BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

BigInteger tipas .NET Framework 4.0

Parašė Sergejus | 2009-08-23 18:53

Ar jums niekada nekilo poreikis operuoti labai dideliais sveikais skaičiais, tokiais dideliais, kad net neužtektų Int64? Jeigu taip, tai gera žinia jums - nuo .NET Framework 4.0 atsiranda naujas tipas, skirtas operuoti neriboto ilgio sveikais skaičiais BigInteger.

Kaip pavyzdį, pateiksiu faktorialo skaičiavimo metodą Factorial:

Matomai 500 faktorialas yra daug didesnis skaičius negu Int64 ar UInt64, todėl ir rezultatas yra “įdomus”:

Kadangi BigInteger palaiko visas standartines operacijas su sveiku skaičiumi kaip -,+,/,*,%,++,– ir panašiai, adaptuoti Factorial metodą BigInteger tipui yra labai paprasta:

Šį kartą rezultatas yra teisingas:

Pabaigai noriu atkreipti dėmesį, kad šis tipas randasi System.Numerics vardų srityje.

Rodyk draugams

Kortežai (Tuple) .NET Framework 4.0

Parašė Sergejus | 2009-08-18 00:15

Funkciniame programavime egzistuoja tokia sąvoka kaip „kortežas” arba angliškai Tuple. Kortežų pagalba metodas gali grąžinti ne vieną reikšmę, bet kelias vienu metu. Pagal prasmę kortežas panašus į apgaubiančią klasę, kuri naudojama kai reikia grąžinti kelias reikšmes. .NET Framework jau turėjo kažką panašaus, o tiksliau klasę KeyValuePair. Tai nėra tikrasis kortežas, nes pirma klasės pavadinimas tiksliai nusako saugomų objektų sąryšį (raktas / reikšmė), o antra - klasė visada priima lygiai du argumentus.

.NET Framework 4.0 į BCL (Base Class Library) yra įtrauktas naujas tipas Tuple, o tiksliau tipai Tuple<T1,T2>,…, Tuple<T1,…,T8>. Tai nėra tiesiog klasė - tai pilnavertis tipas, nes dabar įmanoma iš C# pasinaudoti F# sukurtais kortežais (kurie yra neatskiriama F# dalis) ir atvirkščiai. Be to, tipas Tuple įgyvendina kortežams reikalingus struktūrinį bei reikšmių palyginimus.

Tikriausiai jums pasitaikė atvejų, kada reikėjo grąžinti ne vieną, o kelias reikšmes vienu metu. Kaip pavyzdį pateiksiu metodą Validate, kuris nusako ar naudotojo vardas ir slaptažodis yra teisingi bei grąžina papildomą informaciją apie nesėkmingą prisijungimą:

Šį metodą nesunkiai galima perrašyti panaudojant kortežus:

Kaip matote, aš tiesiog apgaubiau grąžinamą reikšmę į kortežą. Kortežai gali būti kuriami dvejopai: naudojant operatorių new (kaip parodyta aukščiau) arba pasinaudojant gamykliniu metodu Create:

Ar Tuple panaudojimas yra gera praktika - negaliu pasakyti. Kol kas out parametras man atrodo priimtinesnis, nors tikrai buvo atveju, kada norėjosi iš metodo grąžinti anoniminį objektą (ypač dirbant su C# ir JavaScript sąsaja). Svarbu tai, kad tokia galimybė atsirado ir mes protingai galime ja pasinaudoti.

Rodyk draugams