Jaunie korteži

Līdz ar .NET 4.0 platformas nākšanu gaismā izstrādātājiem būs iespēja izmantot interesantu datu struktūru, kas nāk no funkcionālās programmēšanas valodas saimes – korteži.

Korteži palielam ir dažādu tipu grupa, kura apkopota zem viena mainīgā un katrs apkopotais tips tiek glabāts noteiktā “slotā”.

.NET 4.0 platforma piedāvās līdz pat 8 slotiem, kas manuprāt ir objektīvs skaitlis, jo vairāk par 8 slotiem sāk palikt jau nesaprotami, neuzskatāmi un sarežģīti. Tādos gadījumos būtu jāizvēlas labāk kādu citu datu tipu šīs grupas realizēšanai.

Piemērs no jaunās platformas:

var t = new System.Tuple<int, char, string>(1, 'a', "this is a string");

 

Izpildes laikā ir redzama objekta “t” saturs:

 

 

No implementācijas viedokļa System.Tuple tips nav pārāk sarežģīts. Apmēram šāds ar izmēru – 2 sloti.

public class Tuple<T1, T2>
{
    public Tuple(T1 item1, T2 item2)
    {
        Item1 = item1;
        Item2 = item2;
    }
 
    public T1 Item1 { get; private set; }
    public T2 Item2 { get; private set; }
}

 

Jāpiemin gan, ka sloti pēc korteža izveides ir pieejami lasīšanas režīmā – ierasts veids funkcionālā programmēšanā :) Ja mēģinās kompilēt kodu, kas izmanto Item1 vai Item2 rakstīšanas režīmā – iegūs CS0200 kļūdu.

 

Jāpiemin gan, ka citā managed valodā korteži izskatās daudz pievilcīgāki:

> let t = (1, 'a', "this is a string");;
val t : int * char * string = (1, 'a', "this is a string")

 

Piemēram, šāda veida kortežs:

> (4, '4', "4", (fun x –> x + 4), 4.0, (fun x –> x + 4.0));;
val it : int * char * string * (int –> int) * float * (float –> float)
= (4, '4', "4", <fun:it@5>, 4.0, <fun:it@5_1>)

 

Pārvērstos par kaut ko pavisam nesaprotamu :)

var t =
   new System.Tuple<int, char, string, Func<int, int>, double, Func<double, double>>(...);

 

 

Iespējams, ka atradīsiet pielietojumu šim jaunajam datu tipam :)

 

Cerams, ka noderēs!

Published Friday, July 10, 2009 8:20 AM by valdis.iljuconoks

Comments

# re: Jaunie korteži

Es laikam kaut ko nesaprotu; kas īsti ir jauns? Vai tad, piemēram, Dictionary<type, type> neskaitās tie paši "kortedži"? Kā tam vispār ir oriģinālais nosaukums (angliski)?

P.S. Pēc koda, man lasāmāks liekas "<a, b, (..)>", nekā "a * b * (..)".

Friday, July 10, 2009 8:48 AM by ar

# re: Jaunie korteži

Man arī C# variants liekas lasamāks, bet tas jau ir tikai pieradums.

Man liekas šo struktūru jau sen trūka. Bieži vien bija vajadzīga struktūra, kur glabāt 2 vai trīs objektus un negribējās tam izveidot atsevišķu klasi. System.Web jau izmanto savus Pair un Tuple, bet citur tas nebija pieejams.

Friday, July 10, 2009 12:32 PM by Kostja

# re: Jaunie korteži

Tā īsti nevaru iedomāties pielietojumu šai te lietai. Nedomāju, ka ir prātīgi šo te klasi izmantot metodes, kā argumentu vai atgriežamo vērtību. Bet lokāli kodā var izmantot arī daudz vienkāršāku piemēru:

var t = new {Item1 = 1, Item2 = "String", Item3 = 10.0M};

Console.WriteLine(t.Item1);

Console.WriteLine(t.Item2);

Console.WriteLine(t.Item3);

Friday, July 10, 2009 10:52 PM by andrejs.mamontovs

# re: Jaunie korteži

funkcionālajā programmēšanas pasaulē korteži (angl. `Tuple') ir bieži sastopami datu tipi, arī funckiju parametros un atgriežamajās vērtībās.

reāls pielietojums imperatīvajā pasaulē pagaidām grūti iedomāties, kamēr vēl ikdienā nav nācies šādu izmantot.

ierobežojums šim tipam ir līdz astoņiem (8) Item[X] slotiem.

starpība starp vārdnīcu un šiem jaunās platformas kortežiem ir tāda, ka kortežiem nav nepieciešama ieraksta atslēgas vērtība pretstatā vārdnīcas tipam, kuram, lai saglabātu vērtību, tam ir jāpiešķir atslēgas vērtība, pēc kuras vēlāk var ierakstu sameklēt.

korteži sagrupē dažāda tipa datus vienā "sarakstā".

ja pierod pie F# pieraksta, tad tas IMHO šķiet īsāks un saprotamāks, ja runa ir par sarežģītiem un kompleksiem datu tipiem.

pašlaik, kas pagaidām nav ērtī izdomāts ir korteža vērtību "binding" pie mainīgaiem. piemēram

let t = (1, "string")

let (i, s) = t

kā rezultātā vērtība `1' saņems nosaukumu "i" un vērtība "string" saņems nosaukumu "s".

imperatīvajā stilā tas pagaidām dažos c# feature request tiek apsaukāts kā "local variable binding".

Monday, July 20, 2009 11:26 PM by valdis.iljuconoks

# re: Jaunie korteži

Ko lai saka, mani pagaidām šīs kostrukcijas nekrata:) Ne viss kas ir īss ir labs!

Wednesday, July 22, 2009 1:56 PM by andrejs.mamontovs

# re: Jaunie korteži

Kaut kas tāds ir/būs iespējams?

(int,string) func()

{

 return (1,"string");

}

int i;

string s;

(i,s) func();

// i=1,  s="string"

Saturday, August 01, 2009 12:26 AM by MGo

# re: Jaunie korteži

Kā jau minēju, pagaidām šis ir by design un tiek apspriests valodas dizaina komandā.

Saturday, August 01, 2009 12:53 AM by valdis.iljuconoks

# re: Jaunie korteži

Es pareizi sapratu? Framework versijas korteži ne-ar-ko neatšķirsies no maniem 'home-made' (tādi paši kā tevis dotais) veidotajiem?

Monday, August 10, 2009 4:31 PM by Arnis L.

# re: Jaunie korteži

nezinu detaļās, bet iespējams ka frameworka korteži varētu būt thread-safe..., kas paštaisītajiem ir jāpiedomā pašiem klāt :)

Thursday, August 13, 2009 12:06 AM by valdis.iljuconoks

# What a good thing Adam had

Как хорошо было Адаму: когда он произносил что-нибудь умное, он был уверен, что до него никто этого не говорил.

What a good thing Adam had. When he said a good thing, he knew nobody had said it before. (С) Twain

Надеюсь, Вы поняли к чему я об этом......

Tuesday, June 15, 2010 2:16 PM by Twain

# Very informative blog

Thanks for making such a killer blog. I come on here all the time and am floored with the fresh information here.

Sunday, August 29, 2010 1:46 AM by payday loans

# ivuxrqdy

I enjoyed reading your blog. Keep it that way. udyzdpouetyanlic

Saturday, September 18, 2010 4:24 AM by slipsoffece

# android application

As a newcomer to the world wide web, I am always looking on line for data that can help me. This has been 1 that is. Thank you!

Saturday, July 09, 2011 3:08 PM by Retha Autery

# Hi,glad to know everybody here!

Hello,happy to know everyone for the first time! It is good discussion board, I had been searching for something like this particular.

Sunday, July 10, 2011 6:53 AM by beatsdrea8

# AtBhzYIdqrn

T00F5A Muchos Gracias for your article post.Really thank you! Fantastic.

Saturday, March 24, 2012 5:20 AM by google+ circles

Leave a Comment

(obligāts) 
(obligāts) 
(brīvizvēles)
(obligāts)