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:
- Local function dapat membaca variabel lokal milik method pembungkusnya tanpa perlu dikirim sebagai parameter.
- Local function tidak terlihat dari luar method pembungkusnya, sehingga tidak menambah daftar anggota class.
Contoh Lengkap #
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:
Total 150000, bayar 150000
Total 250000, bayar 230000Mari kita bedah baris demi baris:
- Baris 5 (
int batasDiskon = 200000;): variabel lokal milikProses; nilainya ditentukan satu kali untuk seluruh body. - Baris 7-14 (
HitungBayar): local function dengan return typeintdan satu parameter; kondisi pada baris 9 membacabatasDiskonsecara langsung tanpa parameter tambahan. - Baris 16 (
HitungBayar(totalBelanja)): pemanggilan berjalan seperti method biasa; hasilnya disimpan lalu dicetak. - Baris 21-22:
Prosesdipanggil dua kali dengan total berbeda; belanja250000melewati batas sehingga bayarnya menjadi230000.
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.