Merhaba,
Avantajlı yeni bir şey öğrendim, daha doğrusu keşfettim: Bugünlerde BigInt'e takılıyorum da meğer, toHex gibi özelikler ve neredeyse sınırsız kapasitesi ile ne güzel bir modülmüş! Neyse konumuza dönelim...
Aşağıdaki örnek kodda, C stili ile yapıyı kurarak (sayı1) dışarısında tanınmayan değişkenlerini eşitlemek çok kolay. Çünkü kendi dünyanızda tanıdığınız veriyi, int
olarak emanet ettiğinizde BigInt
türüne otomatik cast işlemi yapılıyor. Modülde bütün bunlar tanımlanmış. Sanırım string
olarak da veri tanımlamak mümkün.
struct BüyükSayı {
import std.bigint;
BigInt a, b = 2022;
void çarp() { a *= b; }
string toString() {
import std.format;
return format("%s\n(%s)", a, a.toHex);
}
}
import std.stdio;
void main()
{
BüyükSayı sayı1 = { a: ulong.max };
sayı1.çarp();
sayı1.writeln("\n");
auto sayı2 = BüyükSayı();
sayı2.a = 10;
sayı2.çarp();
sayı2.writeln("\n");
import std.bigint;
auto sayı3 = BüyükSayı(
cast(BigInt)123,
BigInt(12345567)
);
sayı3.çarp();
sayı3.writeln("\n");
struct KuruculuBüyükSayı {
import std.bigint;
BigInt a;
this(int i) { a = i; }
} /* Error:
struct `KuruculuBüyükSayı` has constructors,
cannot use `{ initializers }`,
use `KuruculuBüyükSayı( initializers )` instead
*/
auto ikibinyirmi = KuruculuBüyükSayı(2020);
ikibinyirmi.writeln;
//KuruculuBüyükSayı hata = { a: 2020 };
} /* ÇIKTISI:
37299316517040713365530
(7E5_FFFFFFFF_FFFFF81A)
20220
(4EFC)
1518504741
(5A828B25)
KuruculuBüyükSayı(2020, null)
*/
Tabi kendi kurucu üyeniz this()
olmaması lazım yoksa kodun sonundaki hatayı alırsınız. Gerçi bu sefer tek üyeli bir sınıf (KuruculuBüyükSayı) olmasına rağmen null olan bir üye değişken gördüm!
Bu nedir? Yoksa this()
kurucusu mu?
Son bilgi (gerçi sayı3'de görülüyor), eğer C stili kullanmak istemiyorum ve varsayılan kurucu bana yeter diyorsanız, demeyin! Çünkü o zaman hem kurulduğu yerde std.bigint modülünü eklemeli, hem de kendi tür dönüşümünüzü hemen oracakta yapmalısınız.
Kolay gelsin...