III-BOB. LAMBDA-IFODALAR VA MAHALLIY FUNKSIYALAR 3.1 Lambda ifodalari va mahalliy funksiyalarni taqqoslash
Bir qarashda mahalliy funksiyalar va lambda ifodalari juda o'xshash. Ko'pgina hollarda lambda ifodalari va mahalliy funksiyalarni tanlash uslubi va shaxsiy xohishga bog'liq bo’ladi. Biroq, siz bilishingiz kerak bo'lgan birini yoki boshqasini ishlatishingiz mumkin bo'lgan haqiqiy farqlar mavjud.
Mahalliy funksiyalar nomlarga ega. Lambda iboralari anonim usul bo'lib, ular Func yoki Action turlarga bo'linadi.
Mahalliy funksiyani e'lon qilganingizda, argument turlari va qaytish turi funksiya deklaratsiyasining bir qismidir. Lambda ifodasi tanasining bir qismi bo'lish o'rniga, argument turlari va qaytish turi lambda ifodasining o'zgaruvchan turi deklaratsiyasining bir qismidir.
Mahalliy funksiyalar lambda iboralariga qaraganda aniq tayinlash uchun turli xil qoidalarga ega. Mahalliy funksiya deklaratsiyasiga har qanday kod joylashgan joyda murojaat qilish mumkin. Lambda ifodasi o'zgaruvchiga kirishdan oldin unga tayinlanishi kerak (yoki lambda ifodasiga murojaat qiladigan vakil orqali chaqiriladi.) Ushbu farqlar shuni anglatadiki, rekursiv algoritmlarni mahalliy funksiyalar yordamida yaratish osonroq. O'zini chaqiradigan mahalliy funksiyani e'lon qilishingiz va belgilashingiz mumkin. Lambda ifodalari e'lon qilinishi kerak va bir xil lambda ifodasiga murojaat qiladigan tanaga qayta tayinlanishidan oldin standart qiymat belgilanishi kerak.
Belgilangan tayinlash qoidalari, shuningdek, mahalliy funksiya yoki lambda ifodasi bilan olingan har qanday o'zgaruvchiga ta'sir qiladi. Ikkala mahalliy funksiyalar va lambda ifoda qoidalari har qanday qo'lga kiritilgan o'zgaruvchilar mahalliy funksiya yoki lambda ifodasi delegatga aylantirilganda aniq belgilanishini talab qiladi. Farqi shundaki, lambda ifodalari ular e'lon qilinganida delegatlarga aylantiriladi. Mahalliy funksiyalar faqat vakil sifatida ishlatilganda va delegatlarga aylantiriladi. Agar siz mahalliy funksiyani e'lon qilsangiz va uni faqat metod kabi chaqirib murojaat qilsangiz, u vakilga aylantirilmaydi. Ushbu qoida mahalliy funksiyani o'z ichiga qamrab oladigan har qanday qulay joyda e'lon qilish imkoniyatini beradi. Qayta tiklash bayonotlaridan so'ng mahalliy funktsiyalarni asosiy usul oxirida e'lon qilish odatiy holdir.
Uchinchidan, kompilyator mahalliy funksiyalarni o'rab turgan doirada aniqlangan parametrlarni aniq belgilashga imkon beradigan statik tahlilni amalga oshirishi mumkin. Ushbu misolni ko'rib chiqing:
int M()
{
int y;
LocalFunction();
return y;
void LocalFunction() => y = 0;
}
Mahalliy funksiyalar lambda ifodalariga nisbatan ortiqcha tuyulishi mumkin bo'lsa-da, aslida turli xil maqsadlarda qo'llaniladi. Mahalliy funksiyalar faqat boshqa metodning kontekstidan chaqiriladigan funksiyani yozishni istagan holatlar uchun samaraliroq bo'ladi.
Do'stlaringiz bilan baham: |