0Pricing
C# Academy · Pelajaran

Fungsi Lokal Statis

Cegah penangkapan untuk meningkatkan kejelasan dan kinerja.

Fungsi Lokal Statis adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Fungsi Lokal Statis

Menandai fungsi lokal sebagai static melarangnya menangkap variabel apa pun dari luar atau this. Hal ini membuat fungsi tersebut mandiri, lebih jelas, dan bebas dari alokasi penutupan tersembunyi.

Mendeklarasikan Fungsi Lokal Statis

Tambahkan pengubah static sebelum tipe kembalian. Fungsi tersebut tetap dapat menerima parameter dan mengembalikan nilai; fungsi itu hanya tidak dapat mengakses variabel lokal di luar.

using System;

public class Program
{
    public static void Main()
    {
        static int Square(int n) => n * n; // captures nothing

        Console.WriteLine(Square(6));
    }
}

Tidak Boleh Menangkap Variabel

Fungsi lokal statis tidak dapat menggunakan variabel lokal yang memuatnya. Semua hal yang dibutuhkannya harus diberikan sebagai parameter, sehingga masukannya menjadi jelas.

using System;

public class Program
{
    public static void Main()
    {
        int factor = 3;
        // factor must be passed in, not captured
        static int Scale(int n, int f) => n * f;

        Console.WriteLine(Scale(5, factor));
    }
}

Menghindari Alokasi Tersembunyi

Fungsi lokal nonstatis yang menangkap variabel mungkin mengalokasikan objek penutupan tersembunyi. Fungsi lokal statis tidak pernah menangkap variabel, sehingga sepenuhnya menghindari alokasi tersebut.

using System;

public class Program
{
    public static void Main()
    {
        // Pure helper, no closure object created
        static bool IsEven(int n) => n % 2 == 0;

        for (int i = 0; i < 5; i++)
            Console.WriteLine(i + ": " + IsEven(i));
    }
}

Maksud yang Terjelaskan Sendiri

Kata kunci static memberi tahu pembaca bahwa fungsi pembantu hanya bergantung pada argumennya. Jaminan ini membuat fungsi lebih mudah dipahami dan diuji.

using System;

public class Program
{
    public static void Main()
    {
        static int Clamp(int value, int lo, int hi)
            => value < lo ? lo : value > hi ? hi : value;

        Console.WriteLine(Clamp(15, 0, 10));
        Console.WriteLine(Clamp(-3, 0, 10));
    }
}

Compiler Menegakkan Larangan Penangkapan

Jika Anda tidak sengaja merujuk variabel lokal yang memuatnya di dalam fungsi lokal statis, compiler melaporkan galat. Hal ini mendeteksi ketergantungan yang tidak disengaja sejak awal.

using System;

public class Program
{
    public static void Main()
    {
        int seed = 7;
        // Correct: seed is passed explicitly, not captured
        static int Mix(int x, int s) => x * 31 + s;

        Console.WriteLine(Mix(2, seed));
    }
}

Fungsi Lokal Statis dengan Rekursi

Fungsi lokal statis tetap mendukung rekursi, karena memanggil dirinya sendiri tidak sama dengan menangkap variabel.

using System;

public class Program
{
    public static void Main()
    {
        static int Power(int baseN, int exp)
            => exp == 0 ? 1 : baseN * Power(baseN, exp - 1);

        Console.WriteLine(Power(2, 10));
    }
}

Menggabungkan dengan Parameter out

Seperti metode apa pun, fungsi lokal statis dapat menggunakan parameter out, yang cocok dipadukan dengan sifatnya yang murni dan tidak menangkap variabel untuk fungsi pembantu bergaya coba-urai.

using System;

public class Program
{
    public static void Main()
    {
        static bool TryParsePositive(string s, out int value)
        {
            value = 0;
            return int.TryParse(s, out value) && value > 0;
        }

        if (TryParsePositive("42", out int n))
            Console.WriteLine("got " + n);
        Console.WriteLine(TryParsePositive("-1", out _));
    }
}

Meneruskan Fungsi Lokal Statis sebagai Delegasi

Karena tidak menangkap apa pun, fungsi lokal statis dapat dikonversi menjadi delegasi tanpa mengalokasikan penutupan, yang dapat menjadi penting pada bagian kode yang sering dijalankan.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        static bool IsBig(int n) => n > 100;

        var nums = new List<int> { 50, 150, 200, 10 };
        Console.WriteLine(nums.Count(IsBig));
    }
}

Kapan Memilih Fungsi Lokal Statis

Utamakan fungsi lokal statis setiap kali fungsi pembantu tidak memerlukan keadaan dari luar. Fungsi ini mendokumentasikan sifat murni, mencegah penangkapan yang tidak disengaja, dan dapat lebih efisien. Hilangkan static hanya ketika Anda benar-benar perlu menutup variabel lokal.

using System;

public class Program
{
    public static void Main()
    {
        static string Describe(int score)
        {
            if (score >= 90) return "A";
            if (score >= 80) return "B";
            return "C";
        }

        Console.WriteLine(Describe(95));
        Console.WriteLine(Describe(82));
    }
}

Coba Sendiri

Tulis fungsi lokal statis yang murni dan teruskan sebagai predikat ke LINQ. Karena tidak menangkap apa pun, fungsi tersebut dapat dikonversi menjadi delegasi tanpa penutupan.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        static bool IsLeapYear(int year)
            => (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;

        var years = new List<int> { 1900, 2000, 2004, 2021, 2024 };
        Console.WriteLine(string.Join(", ", years.Where(IsLeapYear)));
    }
}

Pemeriksaan Singkat

Ingat kembali hal yang ditambahkan static pada fungsi lokal.

Ringkasan

Fungsi lokal static tidak menangkap apa pun.

  • Fungsi ini tidak dapat menggunakan variabel lokal yang memuatnya atau this; berikan data melalui parameter.
  • Fungsi ini menghindari alokasi penutupan tersembunyi.
  • Compiler menegakkan aturan tanpa penangkapan dan mendeteksi ketergantungan yang tidak disengaja.
  • Utamakan fungsi ini setiap kali fungsi pembantu tidak memerlukan keadaan dari luar.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fungsi Lokal Statis” gratis?

Ya — teks lengkap “Fungsi Lokal Statis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Fungsi Lokal Statis”?

Cegah penangkapan untuk meningkatkan kejelasan dan kinerja. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Fungsi Lokal Statis” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendeklarasikan Fungsi Lokal
  2. Closure dan Variabel yang Ditangkap
  3. Fungsi Lokal Statis
  4. Fungsi Lokal vs Lambda
← Kembali ke C# Academy