C# 3.0 Part2 – Tagalized!

Magandang araw!

Kamakailan lamang ay nag blog ako ng tungkol sa mga bagong kakayahan ng C#3.0. Nilagay ko doon ang unang apat na bagong features ng C# at sa blog na ito naman ay ipakikita ko ang kasunod na tatlong bagong features ng C#. Katulad ng naunang blog, ang gagamitin ko ay Visual Studio.Net 2008 Team System, at hindi na gagamit ng database. Gagawa ako ng isang simpleng web application at dito natin titignan ang mga bagong features ng C#.

5. LinQ at Anonymous types

6. Lambda Expressions

7. Extensioin Methods

 

LinQ and Anonymous Types

Ang LinQ o Language Integrated Queriy (dati Language Integrated Natural Query ang tawag dito, pero ito ay nabago sa hindi ko alam na dahilan) ay isang bagong paraan para magsulat ng mga query, na kasama na sa ating code. Binibigyan tayo ng LinQ ng kakayanan na gamitin ang isang bagong query syntax para sumulat ng query, kasabay sa code, kayat magagmit na natin ang mga bagay tulad ng intellisense, at ang buong framework.

Halimbawang kailangan mo ilista sa isang application ang lahat ng mga process na kasalukuyang umaandar sa iyong computer. Maaring gusto mo lamang makita ang listahang ito, o naghahanap ka ng mga tianatawag na spyware. Dadagdagan ko ngayon ang ating web application ng isang control na tinatawag na GridView control:

image

Makikita sa larawan, ang isa sa mga bagong features ng IDE ng Visual Studio, ang split view. Sa paggamit ng splitview, sabay mong makikita ang iyong MarkUp (HTML) at ang magiging itsura ng iyong page.

Ngayon, sa ating code behind, maglalagay ako ng isang LinQ query at gagamitin ko itong pang-bind bilang datasource ng ating gridview.

image

Makikita na ginamit ko ang LinQ, isang query, at ang Diagnostic namespace ng sabay, sa isang query lang. Ganito ka-integrated ang LinQ sa ating framework kaya pwede nang gamitin ng sabay ito.

Mapapansin, sa unang linya ay ginamit ko ang var keyword para ideclare ang object na myProcs na paglalagyan ng magiging resulta ng ating query. Ang LinQ syntax na ginamit ko ay binubuo ng isang from.. select na statement. Kahawig din ito ng ating natural na SQL statement. Nagdeklara din ako ng isang tinatawag na iterator na pinangalanan kong processes. Ang iterator na ito ang gagamitin ng compiler para daanan lahat ng laman ng ating query at isa-isa itong ilagay sa ating object na myProcs.

Hindi lamang ganito ang kakyanan ng LinQ, napakarami pa. Ang resulta ng ating query na ginamit kong pang-bind sa ating GridView ay isang listahan na ang type ay IEnumerable. Pero kung mapapansin, ang ating listahan ay hindi kahawig ng lumalabas na resulta kung titignan mo ang processes na umaandar, sa pamamagitan ng Process Viewer. Kayat babaguhin ko ng kaunti ang ating LinQ statement ng ganito:

image

Ngayon ay magkahawig na sila, dahil ang laman ng Task manager at ng ating grid ay parehong nakaayos ayon sa pangalan ng process. Sa ating query, nagdagdag lang ako ng isang orderby statement at pinili ko ang ProcessName. Ang LinQ ay mayroon ding kakayanan gumamit ng orderby, join at iba pang mga kaya ring gawin ng SQL. Idagdag mo pa dito ang kakyahang gamitin ang framework at ang mga posibleng paggamitan nito ay napakarami.

Anonymous Types

Ang anonymous type, ay isang type, na… anonymous. (duh!)

Ito ay isang type na hindi pa nagagawa habang tayo ay nagsusulat pa lang ng code o sa compile type. Isa itong type na hindi pa alam, kaya nga anonymous.

Tignan ang query na ito:

image

Ginamit ko ulit ang LinQ sa ibabaw ng ating framework para makuha ang pangalan ng lahat ng files sa aking root directory. At iyong mapapansin, na sa ating select clause ay nag declara ako ng mga bagong properties na Filename at Extension. Wala, kahit saan man sa code, ang aking pagdeklara ng kung anong type ang Filename at Extension hindi dahil nakalimutan ko ito, ngunit dahil pwede na itong gawin sa C#3.0.

Pansinin din, na sa aking foreach, ay var ang ginamit kong type ng fileitem. Kung naglagay ako ng isang type, hindi ito gagana.

Para makita kung anong type nga talaga si fileitem, itanong natin kay .net.

image

Makikitang ang Name ng type ni fileitem ay <>AnonymousType0`2.

Kung iyo namang napapansin kung bakit mayroon pa ring datagrid sa ating sample, ito ay gagamitin ko para magpakita ng isa pang punto tungkol sa LinQ.

Ang ating object na myFiles ay pwede mo ring isipin bilang isang command. At ang command na ito, ay tinatawag twing isusulat mo ang myQuery sa iyong code. Ano ang ibig sabihin? Sa ating code, mapapansin na tatlong beses mo makikita ang salitang myQuery. Una, nang ito ay ideclare natin, ikalawa nang ginamit natin ito sa ating foreach statement at ikatlo, nang gamitin natin pang-bind sa grid.

Sa dalawang pagkakataon na ginamit o tinawag natin ang command na myQuery, ay dalawang beses din itong nag-execute. Tig-isa, sa bawat pagtawag. Ang ibig sabihin nito, hanggat hindi natin tinatawag ang myQuery ay hindi ito mag-eexecute kaya’t walang dagdag na trabaho sa ating computer. Maari mo kasing isipin, na baka ang query ay umaandar kahit hindi tinatawag at ito ay magiging pampabigat lang ng pagtakbo ng ating program. At sa punto naman ng ating pagtawag, ay aandar ang ating command na myQuery. Kaya, kung sa pagitan ng dalawa nating pagtawag ng myQuery, ay nagbago ang laman ng ating data, ang pinakabagong set ng data ang makukuha ng ikalawang pagtawag.

Lambda Expressions

Huwag ka masyadong matakot sa salitang Lambda Expression. Kadalasan kapag naririnig ito ay parang pinapaso ang ating tenga at para itong isang sobrang taas na uri ng programming para ating maintindihan.

Ang Lambda Expression ay simple lamang. Ito ay isang paraan para makapagpasa tayo ng isang function sa isang command. Kahawig ito ng tinatawag na anonymous delegates, kung saan pwede kang magpasa ng function, sa isa pang function/method kasama ng parameters, bilang isang parameter. 

Halimbawa ay mayroon tayong isang list:

image

At gusto nating kuhanin ang halibawa ay Average ng laman ng ating list.

image

Pero ang average ay nangangailan ng type na int, pwede tayong magpasa ng anonymous delegate dito o gumamit ng lambda expression.

image

Nanghihingi ng int ang method na average, at ang ipinasa natin sa kanya ay hindi diretsong isang int na value pero isa pang method, ang Length method ng string an FirstName. Ginamit ko ang "=>" symbol na simbolo ng lambda expression. Dito, isinama sa paggamit ang tinatawag na type inference at dineklara ko ang variable na aver bilang katulad ng kung ano man ang type na ibabalik ng FirstName.Length. Ang naipasa nating value sa aver ang siyang babasahin ng .Average na method at ito naman ang ipapasa sa variable na averageLength na idineklara ko naman sa paggamit ng var keyword para siguradong masasalo niya, kung ano man ang value na maibabalik sa atin. Saan kumuha ng Firstname? Sa ating List na ang type ay Person.

Tama ang ibinalik na resultang 4.6666666666667 kahit bilangin mo pa.

Extension Methods

Ang extension method ay isang bago at nakakatuwang paraan ng pagdagdag o pag-extend ng isang property. Pwede kang magsulat ng isang panibagong method at idagdag ito sa isang class kahit wala sa iyo ang code ng class na ito. Halimbawa ay ang string class. May gusto akong idagdag sa String class pero alam naman natin na ito ay kasama na sa .Net at wala sa atin ang code nito. Ano ang paraan para magdagdag pa ng isang method? Dito papasok ang extension methods. Halimbawa ay tumatanggap tayo ng string (halimbawa ay email) at ito ay isa sa mga property ng ating class/object. At sa loob ng ating class, ay mayroon tayong isang string function na pagdudugtungin ang FirstName at Lastname sa Lastname first na format.

Sa tradisyonal na paraan:

image

Sa paggamit ng extension methods, ang una nating kailangan ay isa pang panibagong class kung saan natin ilalagay ang ating method na FirstAndLast at idedeklara natin na ang method na ito ay isang extension ng class na Person.

image

Oo, alam ko, dapat gumamit ako ng stringbuilder! Demo lang ito kaya huwag ka na kumontra. Saka, maiksi lang naman eh 🙂 . Ang importanteng tandaan sa paggawa ng extension method ay ang this na keyword sa kaliwa ng class na gusto mong i-extend.

Paano gamitin ang bagong method na ito:

image

Makikitang iba ang icon ng FirstAndLast kaya’t mahahalatang ito ay isang extension method. Tapusin natin ang code, paandarin at:

image

Gagamitin ang extension method na pareho lang ng isang regular na method. ASTIIIIIIIIG!

Pero tandaan, na kapag ang class ay extended o protected, ibang usapan na yun. Sa static lang ito gagana.

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s