O’zbekiston respublikasi oliy va o’rta maxsus ta’lim vazirligi farg’ona davlat universiteti kurs ishi mavzu: C# dasturlash tilida dasturlashda lambda-ifodadan foydalanish bajardi
Lambda ifodasini vazifa sifatida ishlatish
Download 229.99 Kb.
|
O
- Bu sahifa navigatsiya:
- III-BOB. LAMBDA-IFODALAR VA MAHALLIY FUNKSIYALAR
- 3.2 Lambda-ifodalari orqali dasturlar tuzish
- MAVZUGA OID TESTLAR
- Nosdantart testlar
- XULOSA
- FOYDALANILGAN ADABIYOTLAR
2.3 Lambda ifodasini vazifa sifatida ishlatishOdatiy metodni vazifa sifatida ishlatishdan tashqari, yana bir oqilona yondashuv mavjud: lambda ifodasini alohida hal qilingan muammo sifatida belgilash! Eslatib o'tamiz, lambda ifodalari anonim funksiyalarning maxsus shakli hisoblanadi. Shuning uchun ularni alohida vazifalar sifatida bajarish mumkin. Lambda ifodalari, ayniqsa metodning yagona maqsadi bir martalik vazifani hal qilishda foydalidir. Lambda ifodalari alohida vazifa bo'lishi yoki boshqa metodlarga murojaat qilishi mumkin. Lambda ifodasini vazifa sifatida ishlatish chiroyli ko’rinish oladi. Quyidagi dasturda lambda ifodasini vazifa sifatida ishlatilishini namoyish etadi. using System; using System.Threading; using System.Threading.Tasks; class DemoLambdaTask { static void Main() { Task tsk = Task.Factory.StartNew( () => { Console.WriteLine("Vazifa boshlandi"); for (int count = 0; count < 10; count++) { Thread.Sleep(500); Console.WriteLine("Muammolar soni " + count ); } Console.WriteLine("Vazifa tugadi."); } ); tsk.Wait(); tsk.Dispose(); Console.WriteLine("Asosiy qism tugadi."); Console.ReadKey(); } } Dastur natijasi quyidagicha: Izoh: Vazifani tasvirlash uchun lambda ifodasini ishlatishdan tashqari, tsk.Dispose() metodiga tsk.Wait () metodi qaytmaguncha murojat qilinmasligiga e'tibor bering. Dispose() metodi faqat vazifaning oxirida chaqirilishi mumkin, buni tekshirish uchun tsk.Wait() metodini chaqirishdan oldin bu yerda tasvirlangan dasturda tsk. Dispose() metodini chaqirib ko'ring. Bu favqulodda vaziyatga olib kelishini darhol sezasiz. III-BOB. LAMBDA-IFODALAR VA MAHALLIY FUNKSIYALAR3.1 Lambda ifodalari va mahalliy funksiyalarni taqqoslashBir 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. 3.2 Lambda-ifodalari orqali dasturlar tuzishLambda-ifodalaridan foydalanishda kirish parametrlari turlari aniq yoki barchasi aniq bo'lishi kerak, aks holda CS0748 kompilyator xatosi yuz beradi. using System; namespace Lambda_1 { class Program { delegate int Operation(int x, int y); static void Main(string[] args) { Operation operation = (x, y) => x + y; Console.WriteLine(operation(10, 20)); Console.WriteLine(operation(40, 20)); Console.ReadKey(); } } } Dastur natijasi: using System; namespace Lambda_2 { class Program { delegate int kvadrat(int x); static void Main(string[] args) { kvadrat k = i => i * i; Console.Write("Sonni kiriting: "); int a=int.Parse(Console.ReadLine()); Console.WriteLine("Uning kvadrati: "+k(a)); Console.ReadKey(); } } } Dastur natijasi: using System; namespace Funk_2 { class Program { public static int r (int x) { int y=x*x; return y; } static void Main(string[] args) { Console.Write("Sonni kiriting: "); int a=int.Parse(Console.ReadLine()); Console.WriteLine("Uning kvadrati: "+r(a)); Console.ReadKey(); } } } using System; namespace Lambda_3 { class Program { delegate void Salom(); static void Main(string[] args) { Salom s1 = () => Console.WriteLine("Salom!"); Salom s2 = () => Console.WriteLine("Xush kelibsiz."); s1(); s2(); Console.ReadKey(); } } } Dastur natijasi: using System; namespace Lambda_3 { class Program { public static void Salom() { Console.WriteLine("Salom!"); Console.WriteLine("Xush kelibsiz."); } static void Main(string[] args) { Salom(); Console.ReadKey(); } } } using System; namespace Lambda_4 { class Program { delegate void ChangeHandler(ref int x); static void Main(string[] args) { Console.Write("Sonni kiriting: "); int x = int.Parse(Console.ReadLine()); ChangeHandler ch = (ref int n) => n = n * 2; ch(ref x); Console.WriteLine(x); Console.ReadKey(); } } } Dastur natijasi: using System; namespace Lambda_5 { class Program { delegate void Hello(); static void Main(string[] args) { Hello message = () => Show_Message(); message(); Console.ReadKey(); } private static void Show_Message() { Console.WriteLine("Assalomu alaykum!"); } } } Dastur natijasi: using System; namespace Lambda_6 { class Program { delegate bool IsEqual(int x); static void Main(string[] args) { int[] integers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int result1 = Sum(integers, x => x > 5); Console.WriteLine(result1); int result2 = Sum(integers, x => x % 2 == 0); Console.WriteLine(result2); Console.ReadKey(); } private static int Sum (int[] numbers, IsEqual func) { int result = 0; foreach(int i in numbers) { if (func(i)) result += i; } return result; } } } Dastur natijasi:
MAVZUGA OID TESTLARStandart testlar№1 Fan bobi - ; Fan bo’limi- ; Qiyinlik darajasi-.
№2 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
№3 Fan bobi -; Fan bo’limi - ; Qiyinlik darajasi-
№4 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
№5 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
№6 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
№7 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
№8 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
№9 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Nosdantart testlarLambda ifodasining berilishini to’g’ri ketma-ketlikda belgilang.
Javobi:
Quyida noto’g’ri berilgan mulohazani aniqlang.
Javobi:
a) mahalliy funksiyalar b) lambda ifodalar Mulohazani yuqoridagi so’zlardan mosini qo’yib to’ldiring:
Javobi:
Quyidagilarni mosini belgilang.
Javobi:
To’g’ri fikrlarni aniqlang. Javoblar jadvaliga “ha” yoki “yo’q” so’zlarini yozing. 1) Har qanday lambda ifodasi delegat turiga aylantirilishi mumkin. 2) Blokli lambda-ifodalarining mazmuni har qanday sonli ifodalardan 3) Agar lambda ifodasida bir nechta parametr ishlatilsa, ular qavs ichiga o'ralgan bo'lishi kerak. 4) Lambda ifodalari anonim funksiyalarning maxsus shakli hisoblanganligi uchun ularni alohida vazifalar sifatida bajarish mumkin. 5) Lambda ifodalari faqat LINQ bilan ishlashda ishlatiladi.
Javobi:
Quyidagi C# ga doir atamalar va ularning xususiyatlarini juftlang.
Javobi:
XULOSABu kurs ishida turli dasturlar tuzishda lambda-ifodalaridan foydalanish metodikasi ko’rib chiqildi. Lambda-ifodalari – anonim funktsiyalar singari ishlatiladi , farqi shuki, Lambda ifodalarida siz kiritgan qiymat turini ko'rsatishingiz shart emas, shuning uchun uni ishlatish uchun yanada moslashuvchan qiladi. Lambda ifodasi anonim funksiya bo'lib, asosan LINQda delegatlar yaratish uchun ishlatiladi. Oddiy qilib aytganda, bu deklaratsiyasiz usul, ya'ni kirish modifikatori, qaytish qiymati deklaratsiyasi va nomi. Lambda ifodasi anonim usulni ifodalashning qisqa usulidir. Anonim usullar ham, Lambda ifodalari ham usulning bajarilishini ichki qismni aniqlashga imkon beradi, ammo anonim usul aniq usuldan parametr turlarini va qaytish turini aniqlashni talab qiladi. Lambda ifodasi C # 3.0 tipidagi infer xususiyatidan foydalanadi, bu esa kompilyatorga kontekst asosida o'zgaruvchining turini aniqlashga imkon beradi. Bu juda qulay, chunki bu biz yozishda juda ko'p narsalarni ya’ni olgan sinfga alohida usulni e'lon qilish va yozish harakatini tejaydi. Usul faqat bir marta ishlatiladigan va usulning ta'rifi qisqa bo'lgan joylarda ayniqsa foydali! FOYDALANILGAN ADABIYOTLARO’zbekiston Respublikasi “Kadrlar tayyorlash m illiy dasturi “to’g’risidagi qonuni, “ Xalq ta’limi jurnali“, 1998 yil, 2- soni. I.A.Karimov “Barkamol avlod - O’zbekiston taraq qiyotining poydevori” Toshkent, Sharq nashriyoti , 1999 yil. Paul Short “Lambdas in C#” 2013 year. Герберд Шилдт “C# 4.0: полное руководствo” 2011 г. GoalKicker.com “C# Notes for Professionals”. https://www.geeksforgeeks.org/lambda-expressions-in-c-sharp/. https://www.codingame.com/playgrounds/213/using-c-linq---a-practical-overview/lambda-expressions Download 229.99 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling