Kadang sebuah langkah bantu hanya relevan untuk satu method: perhitungan kecil yang tidak dipakai method lain di class tersebut. Mendeklarasikan method baru di tingkat class untuk kebutuhan sesempit itu membuka akses yang seharusnya tertutup. C# menyediakan local function: sebuah method yang dideklarasikan di dalam body method lain, sehingga cakupannya persis sebatas kebutuhan tersebut.

Deklarasi dan Pemakaian #

Local function ditulis di dalam body method pembungkusnya, lengkap dengan return type, nama, dan parameter seperti method biasa. Dua keistimewaannya:

  1. Local function dapat membaca variabel lokal milik method pembungkusnya tanpa perlu dikirim sebagai parameter.
  2. Local function tidak terlihat dari luar method pembungkusnya, sehingga tidak menambah daftar anggota class.

Contoh Lengkap #

csharp
static class Pesanan
{
    public static void Proses(int totalBelanja)
    {
        int batasDiskon = 200000;

        int HitungBayar(int total)
        {
            if (total >= batasDiskon)
            {
                return total - 20000;
            }
            return total;
        }

        int bayar = HitungBayar(totalBelanja);
        Console.WriteLine($"Total {totalBelanja}, bayar {bayar}");
    }
}

Pesanan.Proses(150000);
Pesanan.Proses(250000);

Output yang Dihasilkan:

text
Total 150000, bayar 150000
Total 250000, bayar 230000

Mari kita bedah baris demi baris:

  1. Baris 5 (int batasDiskon = 200000;): variabel lokal milik Proses; nilainya ditentukan satu kali untuk seluruh body.
  2. Baris 7-14 (HitungBayar): local function dengan return type int dan satu parameter; kondisi pada baris 9 membaca batasDiskon secara langsung tanpa parameter tambahan.
  3. Baris 16 (HitungBayar(totalBelanja)): pemanggilan berjalan seperti method biasa; hasilnya disimpan lalu dicetak.
  4. Baris 21-22: Proses dipanggil dua kali dengan total berbeda; belanja 250000 melewati batas sehingga bayarnya menjadi 230000.

Local function juga boleh dipanggil sebelum baris deklarasinya di dalam body yang sama — compiler menganggap seluruh body mengenalnya. Fleksibilitas ini berguna saat pembacaan kode lebih enak bila pemanggilan utama ditulis lebih dulu.

Kapan Memilih Local Function #

  • Helper hanya dipakai oleh satu method dan logikanya berdiri sendiri.
  • Helper membutuhkan beberapa variabel lokal sehingga mengirimnya sebagai parameter justru memenuhi signature.
  • Kita ingin menyembunyikan detail dari anggota class lain.

Bila helper dibutuhkan lebih dari satu method, pindahkan menjadi static method biasa di class yang sama, seperti yang kita lakukan pada bab-bab sebelumnya.