R├Âportaj: Lambda ifadesi nedir? [kapal─▒]


Al─▒nan cevaba git


Son zamanlarda iki telefon g├Âr├╝┼čmesi yapt─▒m.

Her iki r├Âportajda da bir Lambda ifadesi tan─▒mlayan son soru olarak soruldu.

Lambda ifadesinin bir delege yerine ads─▒z bir y├Ântem oldu─čunu iddia ettim. Ama bir ┼čekilde bu yeterli de─čildi.

Bunu bir telefon g├Âr├╝┼čmesinde tam olarak a├ž─▒klamak ├žok zor.

Daha iyi bilen var m─▒?


44









Cevap say─▒s─▒n─▒ say: 7






Lambda ─░fadeleri sabit de─čerler olarak verilen isimsiz fonksiyonlard─▒r. Ba┼čka herhangi bir sabitin olabilece─či herhangi bir yerde g├Âr├╝nebilirler, ancak genellikle ba┼čka bir fonksiyona parametre olarak yaz─▒l─▒rlar. Kurall─▒ ├Ârnek, bir kar┼č─▒la┼čt─▒rma i┼člevini genel bir "s─▒ralama" yordam─▒na ge├žirece─činiz ve bu i┼člevi tan─▒mlamak i├žin b├╝t├╝n bir i┼člevi tan─▒mlama (ve s├Âzc├╝ksel s├╝reksizlik ve ad alan─▒ kirlili─čine yol a├žma) yerine ge├žecek olman─▒zd─▒r; kar┼č─▒la┼čt─▒rmay─▒ a├ž─▒klayan bir lambda ifadesini ge├žer.

Bununla birlikte, bu Lambda Expressions'─▒n en ├Ânemli ├Âzelliklerinden birini ├Âzl├╝yor, bu da g├Âr├╝n├╝┼čleri ba─člam─▒nda ger├žekle┼čtiriliyor. Bu nedenle, bu ba─člamda tan─▒mlanan de─či┼čkenlerin de─čerlerini kullanabilirler. Bu, fonksiyon g├Âstergelerini ger├žek lambda ifadelerinden ay─▒r─▒r. De─či┼čken de─či┼čkenleri destekleyen dillerde, uygun lambda ifadeleri, bu de─či┼čkenlerin de─čerlerini de─či┼čtirme g├╝c├╝ sunar.

Lambda ifadeleri, t├╝m LISP'lerde, Perl'de, Python'da ve C ++, Objective C, C # ve Java 8'in yeterince yeni s├╝r├╝mlerinde (yeterince s├Âzdizimiyle) g├Âr├╝n├╝r, ancak ge├ži┼č i┼člevleriyle ba┼ča ├ž─▒kmak i├žin bir yolu olmas─▒na ra─čmen, ├Âzellikle C'de de─čildir. Baz─▒lar─▒ i├žin mazeretler) parametre olarak. Bunlar belirli anlambilimsel bir s├Âzdizimi eleman─▒d─▒r ve bu anlambilim, ├žal─▒┼čma zaman─▒nda C'nin gerektirdi─činden daha fazla gereksinim duyar.


40


2010-10-02





Bir lambda ifadesi ads─▒z bir kod s├╝spansiyonudur.

Baz─▒ ├žok spesifik olmayan g├Âsterimler kullanarak, bu anonim "iki ┼čeyi ├žarp" i┼člevini (aka lambda ifadesi) d├╝┼č├╝n├╝n.

 ╬╗(x, y) -> x * y
 

Cevab─▒n─▒z lambda kulland─▒─č─▒n─▒z bir yere ├Âzg├╝d├╝r (C #? San─▒r─▒m) ve g├Âr├╝┼čmeci daha genel bir anlay─▒┼č istedi─činden ┼č├╝pheleniyor. Bir temsilci kavram─▒, C # dili ve bir y├Ântem fikri bir lambdan─▒n ne oldu─čuna ve nas─▒l ├žal─▒┼čt─▒klar─▒na ikincildir. Ka─č─▒t ├╝zerinde lambda ifadeleri kullanarak , ├Ârne─čin, hi├žbir y├Ântem dahil olmadan hesaplayabilirsiniz .


18







Belki de LINQ'un "Dil-B├╝t├╝nle┼čik Sorgu" oldu─čunu duymak istediler.

Oldu─ču s├Âyleniyor, e─čer ger├žekten LINQ'dan olu┼čan "ne" hakk─▒nda bir a├ž─▒klama yapmak isterlerse, muhtemelen sa─člad─▒─č─▒n─▒z daha fazla bilgiyi dahil ederdim. Gibi bir ┼čey:

LINQ veya Dil ile B├╝t├╝nle┼čik Sorgu, .NET 3.5'te eklenen ve sorgu i┼člemlerine daha i┼člevsel bir yakla┼č─▒m sa─člayan bir dizi dil eklemesi ve ├žer├ževe s─▒n─▒f─▒d─▒r. IEnumerable ve IQueryable i├žin uzatma y├Ântemlerine ve LINQÔÇÖda Nesnelere ertelenen uygulamalara ve IQueryable ├╝zerinden uzaktan i┼čleme ve di─čer bir├žok ├Âzelli─če uzaktan i┼člem yap─▒lmas─▒na izin veren genel benzerlerine dayan─▒r. Do─črudan dilde daha "do─čal" bir sorgu s├Âzdizimini desteklemek i├žin C # ve VB.NET'te dil de─či┼čiklikleri yap─▒ld─▒.


1







Ben Linq'in bir delegenin yerine isimlendirilmemi┼č bir y├Ântem oldu─čunu s├Âyledim.

Asl─▒nda, bu kesinlikle LINQ de─čil, bir "lambda ifadesi". Ve teknik olarak, LINQ bile kullanm─▒yor.

LINQ "Dil Entegre Sorgu" anlam─▒na gelir. Olduk├ža ├Âzel bir ifadeyle, "from ... where .. select" anahtar s├Âzc├╝kleridir (yani dile entegre edilmi┼č sorgu s├Âzdizimi ).

┼×imdi, bu anahtar kelimenin i┼čleri yapmas─▒n─▒ sa─člamak i├žin dile (ve CLR) (lambdalar, uzatma y├Ântemleri, Numaraland─▒r─▒labilir s─▒n─▒flar vb.) Daha bir├žok ┼čey eklendi.


1







G├Âzden ge├žirilmi┼č sorunuzu cevaplamak i├žin, bunun i├žin, cevap ger├žekten iyidir. Yapabilece─čim tek de─či┼čiklik "sat─▒r i├ži" kelimesini vurgulamak.

Lambda ifadesi, bir temsilciye ihtiya├ž duyulan bir yerde sat─▒r i├ži yaz─▒lm─▒┼č ads─▒z bir y├Ântemdir.


1







Msdn'de Lambda ─░fadesine bakmal─▒s─▒n─▒z.


1







Muhtemelen LINQ'un sorgulama IQueryable ve IEnumerable nesneler i├žin yeni DSL oldu─čunu bilmenizi bekliyorlar . Esasen, "from ... where ... select ..." s├Âzdizimi. Lambdas ve fonksiyonel stil ile ├Ârt├╝ler alt─▒nda uyguland─▒─č─▒n─▒ bilmek muhtemelen size bonus puan kazand─▒r─▒r.


0


2010-09-30