Sveicināti atkal,
Pētot sarakstu ar iespējām, ko Microsoft izstrādātāji ir ieplānojuši izdarīt ar C# 4.0 un VB 10 versijām (tās beidzot varētu teikt, ka saņems vienādu feature-set), ieraudzīju vienu palaistu garām feature - Extension Properties. Piekrītu dažiem, ka paplašinājuma metodes (ieraksti - 1, 2) rada sava veida apjukumu un disorientāciju kodā, piekrītu arī citiem, kas tas paver plašas paplašinājuma iespējas savam un kādam citam kodam.
Tomēr šķiet, ka C# trešās versijas jaunievedums, kas deva paplašināt metodes, šķiet nedaudz nepabeigts bez paplašinājuma īpašībām, statiskajiem klases locekļiem vai pat paplašināmiem klases notikumiem.
Par cik man darbs ir sajūsmināties un iedegties par visām jaunajām iespējām un platformām un galvenais argumentēti un pārliecinoši to pasniegt priekšniecībai, jo tikai tādā veidā notiek kaut kāds progress nevis stagnācija tehnoloģiskajā jomā, tad nu šoreiz kārta ir programmēšanas paradigmai, kas bija ļoti populāra pāris dekādes atpakaļ - funkcionālajai programmēšanai. Šoreiz runa ir par .NET 4.0 jaunpienācēju - F#.
Nedaudz apgūstot F# pamatus sapratu, ka paplašinājuma īpšības nodefinēt tipam F# programmēšanas valodā ir tikpat vienkārši, kā nodefinēt jaunu tipa locekli (member).
Tātad, uzsākot mūsu mazo eksperimentu, mums ir jānodefinē vārdu telpa
namespace Int32Extensions
Pēc tam ir jādefinē pats tips (klase):
module Int32Extensions =
type System.Int32 with
member this.DivFromTen
with get() =
10 - this
Šim jaunajam tipam jeb klasei ir jauns loceklis, kas definē jaunu īpašību (with get()) System.Int32 tipam jeb klasei. Konkrēti jaunā īpašība aprēķina "attālumu" līdz skaitlim 10.
Pozitīvi ir arī tas, ka jaunie definētie locekļi parādās arī bez problēmām gudrajā pārlūkotajā - IntelliSense.
Un lūk arī rezultāts augstāk minētajām 2 rindiņām:
>
val int : int
Div - 5
>
Jāpiemin, ka diemžēl šīs konstrukcijas nav pieejamas citās valodās, piemēram, C# :(
Būtu jau jauki, ja mēs varētu uzrakstīt kodu apmēram šādu:
var past = 2.Minutes.Ago;
Cerams, ka noderēs!
_____________________________