Merhaba,
"Derleme zamanı dizi oluşturma", "Dizilerin farklı tanımlamalar arasındaki farklar" vb. başlıklar vermek istesem de konuyu tam olarak tanımlayamadım! İsterseniz tartışmanın seyrine göre isim verelim...
Şöyle bir dizgimiz olsun:
Alıntı:
> string st = "nanecisi"; //doremifa";
> ```
>
Sonra bu sözcüğün içerdiği sözcükleri şu şekilde hecelediğimizi düşünün:
Alıntı:
>
>
> auto test = new char[st.length];
test = cast(char[])st;
char[][] hecele;
for(int i; i<test.length; i+=2) {
hecele ~= test[i..i+2];
hecele.getDigestString.writeln(": ", hecele);
}
>
Çıktısı aşağıdaki şekilde ve beklendiği gibi her seferinde aynı olacak şekilde çıkar:
'
A117FBA641B346A9E9816EA83410C839: ["na"]
6A3518A7A2FBD36648B6BC5806C60914: ["na", "ne"]
4A639AB0788B0937E9E23BD46E7684A4: ["na", "ne", "ci"]
2F3066B613FA75A48E1E2E4BCCF289BD: ["na", "ne", "ci", "si"]
'
Ancak dikkat!
Burada MD5'i alınan dizi, aslında bir dilim. Yani KOD: [...] şeklinde çıktı aldığımız karakterlerin MD5'ni almıyoruz. Dilim veya nesne(undefined object<--- elbette değil ama şimdilik bilmiyorum!) olduğunu zannediyorum. Kanıtı çok basit çünkü siz kendi bilgisayarınızda yukarıdaki kodu derlediğinizde farklı bir MD5 kodu aldığınızı göreceksiniz...
Şimdi biraz olayı değiştirelim ve diziyi "global variable" yapalım! Belki de yukarıda yanılıyorumdur ki biliyorsunuz, her zaman yanılma payı mevcuttur. Bir de aşağıdaki kodu derlediğinizi düşünün:
import std.stdio, std.md5;
char[8] test = cast(char[])"nanecisi";//doremifa";
void main() {
char[][] hecele;
for(int i; i<test.length; i+=2) {
hecele ~= test[i..i+2];
hecele.getDigestString.writeln(": ", hecele);
}
}
Bu sefer çıktıyı vermiyorum ama bana güvenebilirsiniz; her çalıştırdığınızda farklı bir MD5 kodu alacaksınız. Şimdi daha fazla uzatmadan sormak istiyorum...:)
Neden?
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]