3.2 Lambda-ifodalari orqali dasturlar tuzish
Lambda-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 TESTLAR Standart testlar
№1 Fan bobi - ; Fan bo’limi- ; Qiyinlik darajasi-.
Lambda ifodasi tuzilishiga ko’ra necha turga bo’linadi?
|
2
|
4
|
3
|
6
|
№2 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Blokli lambda ifodasini yaratishda uning tanasi qanday qavsga o’raladi?
|
Katta qavs
|
O’rta qavs
|
Kichik qavs
|
Qavsga o’ralmaydi
|
№3 Fan bobi -; Fan bo’limi - ; Qiyinlik darajasi-
Lambda operatori qaysi javobda to’g’ri ko’rsatilgan?
|
=>
|
=
|
<>
|
<=>
|
№4 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Nima noma'lum usullarning kengaytmasi bo'lib, ular aniq kiritilmagan parametrlar va qiymatlarni qaytarishga imkon beradi.
|
Lambda ifodalar
|
Delegatlar
|
Anonim usullar
|
Mahalliy funksiyalar
|
№5 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Lambda operatori qaysi operator bilan bir xil ustuvorlikka ega hisoblanadi?
|
Tayinlash
|
Tanlash
|
Shart
|
Taqqoslash
|
№6 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Qiymat qaytarmaydigan lambda-ifodalarini qanday delegat turlariga o’tkazish mumkin
|
ActionDelegat
|
Bunday lambda-ifodalar mavjud emas
|
Lambda-ifodalarini delegat turlariga o’tkazib bo’lmaydi.
|
FuncDelegat
|
№7 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Rekusiv algoritmlarni quyidagilarda qaysi biri yordamida yaratish osonroq?
|
Mahalliy funsiyalar
|
Lambda ifodalar
|
Anonim usullar
|
Ifoda daraxti
|
№8 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Blokli lambda ifodalari tanasi eng ko’pi bilan nechta ifodadan iborat bo’lishi mumkin?
|
Cheklanmagan
|
2
|
3
|
5
|
№9 Fan bobi -; Fan bo’limi-; Qiyinlik darajasi-.
Lambda-ifodasi birinchi bor C# ning qaysi versiyasida qo’llanilgan?
|
3.0
|
3.5
|
2.0
|
5.1
|
Nosdantart testlar
Lambda ifodasining berilishini to’g’ri ketma-ketlikda belgilang.
A
|
Lambda-ifodasi tanasi
|
B
|
Kirish parametri
|
C
|
Lambda operatori
|
Javob:
|
1-
|
2-
|
3-
|
Javobi:
Quyida noto’g’ri berilgan mulohazani aniqlang.
1
|
Lambda ifodalari daraxt-ifodalar qurilishida keng qo'llaniladi.
|
2
|
Lambda ifodalari alohida vazifa bo'lishi mumkin.
|
3
|
Lambda ifodalari boshqa usullarga murojaat qilishi mumkin.
|
4
|
tashqi o'zgaruvchilar lambda ifodalarida anonim usullarda bo'lgani kabi ishlatilishi va olinishi mumkin emas.
|
Javob:
|
|
Javobi:
a) mahalliy funksiyalar b) lambda ifodalar
Mulohazani yuqoridagi so’zlardan mosini qo’yib to’ldiring:
(1) _________________ nomlarga ega. (2)_________________ anonim usul bo'lib, ular Func yoki Action turlarga bo'linadi. (3)_________________ deklaratsiyasiga har qanday kod joylashgan joyda murojaat qilish mumkin. (4)_______________ o'zgaruvchiga kirishdan oldin unga tayinlanishi kerak. (5)_______________ ular e'lon qilinganida delegatlarga aylantiriladi. (6)___________________ faqat vakolat sifatida ishlatilganda vakolatxonalarga aylantiriladi.
|
Javob:
|
1-
|
2-
|
3-
|
4-
|
5-
|
6-
|
Javobi:
Javob:
|
1-a
|
2-b
|
3-a
|
4-b
|
5-b
|
6-a
|
Quyidagilarni mosini belgilang.
kkita parametrga ega va hech qanday qiymatga ega bo'lmagan lambda ifodasi … vakiliga aylantirilishi mumkin.
|
Func
|
Bitta parametrga ega va qiymatni qaytaradigan lambda ifodasi … vakiliga aylantirilishi mumkin.
|
Action
|
Javob:
|
1-
|
2-
|
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:
Javob:
|
ha
|
yo’q
|
3) ha
|
4) ha
|
5) yo’q
|
Quyidagi C# ga doir atamalar va ularning xususiyatlarini juftlang.
Lambda operatori
|
…ning tanasida bir nechta operatorlarni ko'rsatishga ruxsat beriladi.
|
Blokli lambda-ifodasi
|
… bu o'rnatilgan so'rovlar tili
|
LINQ
|
… lambda ifodalarini e'lon qilish uchun ishlatiladi.
|
anonim usul
|
Lambda ifodasi … ni ifodalashning qisqa usulidir.
|
Javob:
|
1-
|
2-
|
3-
|
4-
|
Javobi:
XULOSA
Bu 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 ADABIYOTLAR
O’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
Do'stlaringiz bilan baham: |