Fungsi lokal

Dalam bahasa Inggris disebut Local Functions, fitur ini baru hadir sejak C# 7.0.

Sebelumnya kita sudah mempelajari pemanggilan metode. Di dalam blok kode suatu metode, kita bisa memanggil metode lain dengan aturan berikut:

  • Metode di dalam kelas yang sama: panggil langsung dengan nama metode serta berikan parameter;
  • Metode lintas kelas: harus membuat objek instan dari kelas yang dituju terlebih dahulu, dan metode tujuan harus diberi penanda public.

Mulai dari C# 7.0, kita dapat mendefinisikan fungsi mandiri di dalam sebuah metode. Fungsi ini dinamakanfungsi lokal:

  1. Sifat terisolasi: hanya dapat dipanggil dari metode luar yang membungkusnya, kode luar tidak bisa mengaksesnya;
  2. Keunggulan: logika kode terpusat, keterbacaan meningkat dan perawatan kode lebih mudah;
  3. Aturan deklarasi: berbeda dengan variabel lokal, fungsi lokal dapat dideklarasikan di mana saja di dalam metode luar, tidak perlu dideklarasikan lebih awal.

Fungsi lokal dapat menangkap variabel lokal milik metode luar, namun ruang lingkupnya hanya terbatas di dalam metode pembungkusnya.


Mari tambahkan satu pengetahuan dasar:

Variabel lokal di dalam fungsi dieksekusi dari atas ke bawah. Variabel harus dideklarasikan terlebih dahulu sebelum digunakan, urutan tidak boleh dibalik.

Lihat kode berikut sebagai contoh: variabel hour baru dibuat di bagian bawah, kita tidak boleh mengaksesnya sebelum dideklarasikan.

    int GetHours()
    {
        Console.WriteLine(hour);
        int hour = DateTime.Now.Hour;
        return hour;
    }Code language: C# (cs)

Meskipun ruang lingkup variabel hour mencakup seluruh isi metode, kita tetap tidak boleh menggunakannya sebelum dibuat.

Akan muncul kesalahan dengan garis gelombang merah, pesan kesalahannya terlihat pada gambar di atas.

Hal ini berbeda dengan fungsi umum. Fungsi yang ada di bawah dapat memanggil fungsi di atas. Metode kelas merupakan anggota kelas yang dicatat dalam Method Table. Saat dipanggil, sistem akan mencari tabel tersebut, bukan menjalankan kode secara berurutan dari atas ke bawah.

Pada contoh di bawah, metode Main di bagian atas memanggil GetHours yang didefinisikan setelahnya. Perilakunya berbeda dengan aturan pendeklarasian variabel lokal.

class Program
{
    static void Main()
    {
        Program program = new Program();
        program.GetHours();
    }

    int GetHours()
    {
        int hour = DateTime.Now.Hour;
        return hour;
    }
}Code language: C# (cs)

Kembali ke pembahasan fungsi lokal.

Lihat contoh berikut:



class Program
{
    static void Main()
    {
        Program program = new Program();
        program.ZoomIn();
    }

    public void ZoomIn()
    {
        // Diizinkan memanggil fungsi lokal sebelum fungsi tersebut dideklarasikan
        int results0 = ZoomIn5(10);
        Console.WriteLine($"A: {results0}");

        // Fungsi lokal: mengalikan nilai masukan val dengan 5 lalu mengembalikan hasilnya
        int ZoomIn5(int val)
        {
            return val * 5;
        }

        // Memanggil fungsi lokal
        int results = ZoomIn5(10);
        Console.WriteLine($"B: {results}");

        int results2 = ZoomIn5(5);
        Console.WriteLine($"C: {results2}");
    }
}
Code language: C# (cs)

Ruang lingkup fungsi lokal ada di dalam metode tempatnya berada. Kita bisa mengaksesnya baik sebelum maupun sesudah tempat pendeklarasian fungsi lokal tersebut.

Selain itu, nama fungsi lokal bahkan boleh sama dengan nama metode luar yang membungkusnya.



class Program
{
    static void Main()
    {
        Program program = new Program();
        program.ZoomIn5();
    }

    public void ZoomIn5()
    {
        // Diizinkan memanggil fungsi lokal sebelum fungsi tersebut dideklarasikan
        int results0 = ZoomIn5(10);
        Console.WriteLine($"A: {results0}");

        // Fungsi lokal: mengalikan nilai masukan val dengan 5 lalu mengembalikan hasilnya
        int ZoomIn5(int val)
        {
            return val * 5;
        }

        // Memanggil fungsi lokal
        int results = ZoomIn5(10);
        Console.WriteLine($"B: {results}");

        int results2 = ZoomIn5(5);
        Console.WriteLine($"C: {results2}");
    }
}
Code language: C# (cs)

Pada contoh di atas, metode luar dan fungsi lokal sama-sama bernama ZoomIn5. Tidak terjadi bentrokan nama karena ruang lingkupnya berbeda, namun cara penulisan seperti ini tidak disarankan.

Fungsi lokal

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *