C # 7 secara mendalam: Menjelajahi fungsi-fungsi lokal

Dukungan untuk fungsi lokal adalah fitur baru yang sangat baik yang telah diperkenalkan di C # 7. Perhatikan bahwa Anda dapat mendefinisikan fungsi lokal di dalam metode apapun, konstruktor kelas atau di dalam properti - baik pengambil maupun penyetel. Ketika dikompilasi oleh kompilator C #, fungsi lokal diubah menjadi metode pribadi.

Saat mengembangkan aplikasi, Anda mungkin sering kali perlu membuat metode yang tidak digunakan kembali - Anda memerlukannya hanya untuk modularitas. Anda mungkin tidak ingin metode Anda berlangsung lama karena mempertahankan metode tersebut akan menjadi mimpi buruk seiring berjalannya waktu. Namun, Anda mungkin akan memiliki banyak metode privat yang tidak dapat digunakan kembali, bukan? Fitur baru di C # 7 ini datang untuk menyelamatkan dalam keadaan seperti itu - Anda dapat mendefinisikan fungsi yang bersifat lokal ke lingkup lain, atau bisa di dalam fungsi lain atau bahkan di dalam properti (pengambil dan penyetel).

Bayangkan situasi di mana Anda akan membutuhkan fungsi pembantu yang akan dipanggil sekali saja. Sebelum C # 7 ada, Anda dapat melakukannya dengan menggunakan tipe Func dan Action dengan metode anonim. Namun, ada beberapa tantangan. Mereka tidak mendukung parameter generik, params dan ref dan out.

Dengan C # 7, sekarang Anda dapat mendeklarasikan fungsi tersebut di dalam tubuh fungsi lain. Fungsi semacam itu dikenal sebagai fungsi lokal. Dengan kata lain, dukungan untuk fungsi lokal memungkinkan Anda untuk mendefinisikan suatu fungsi dalam lingkup fungsi lain.

Menerapkan fungsi lokal di C #

Mari tulis beberapa kode dan lihat bagaimana fungsi lokal bekerja. Perhatikan cuplikan kode berikut. Perhatikan bahwa metode Sum didefinisikan di dalam tubuh metode Utama dalam cuplikan kode berikut.

 static void Main(string[] args)

        {

            int Sum(int x, int y)

            {

                return x + y;

            }

            Console.WriteLine(Sum(10, 20));

            Console.ReadKey();

        }

Dalam contoh ini, metode Sum adalah fungsi lokal - itu lokal untuk metode Utama. Dengan kata lain, metode Sum hanya dapat digunakan di dalam metode Utama, yaitu metode di dalamnya yang telah ditentukan.

Fungsi lokal dapat memiliki semua fitur dari metode biasa kecuali bahwa fungsi lokal tidak boleh statis. Fungsi lokal bahkan bisa asynchronous dan dapat memiliki akses ke variabel dari blok terlampir juga. Parameter dan variabel lokal dari lingkup yang melingkupi dapat digunakan di dalam fungsi lokal, mirip dengan ekspresi lambda. Perlu dicatat bahwa variabel lokal yang ditangkap diteruskan ke fungsi lokal dengan referensi. Berikut contoh lain yang mengilustrasikan bagaimana fungsi lokal dapat mengakses variabel dari tipe penutupnya.

public static void Display(string str)

        {

            int ctr = 5;

            DisplayText();

            void DisplayText ()

            {

                for(int i = 0; i < ctr; i++)

                Console.WriteLine(str);

            }

        }

Sekarang, lihat potongan kode yang diberikan di atas. Metode Display berisi parameter string dan variabel integer di dalamnya. Perhatikan bahwa fungsi lokal yang didefinisikan di dalam metode Tampilan (bernama DisplayText) dapat memiliki akses ke variabel lokal dan juga argumen metode Tampilan. Fitur yang bagus, bukan?

Salah satu manfaat utama dari fungsi lokal adalah enkapsulasi - fungsi lokal hanya dapat dipanggil dari tipe penutupnya. Perhatikan bahwa jika Anda memiliki metode privat di kelas Anda, setiap anggota kelas dapat memanggil metode privat.