October 27, 2012

Merhaba,

Ali hocanın, şurada (http://ddili.org/ders/d/birlikler.html) union'lar ile ilgili güzel bir örneği var. Son öğrendiklerimi denemek için bu iki yapıyı aşağıda karşılaştım.

Aslında basit olan her zaman daha iyi çünkü dizilerin içine (köşeli parantezilerine) yazdığımız değerler ile verileri parmağımızda oynatabiliriz. Ancak union için struct da hoş duruyor hani...:)

import std.stdio;
void main(){
 //* Diğeri için taksim işaretinin birini kaldırabilirsiniz...
 union IPv4 {
   uint address;
   ubyte[4] parts;
 }/*/
 union IPv4 {
   uint address;
   struct parts {
     ubyte d, c, b, a;
   } parts part;
 }/*/
 auto ip = IPv4(0xc0a80102);
 string nokta = ".";
 foreach_reverse(i, p; ip.parts) {
   if(!i) nokta = "";
   p.write(nokta);
 }
 writeln();/*/
 with(IPv4(0xc0a80102)) {
   part.a.write(".");
   part.b.write(".");
   part.c.write(".");
   part.d.writeln();
 }//*/
}

Dikkat ederseniz ilk örnekte foreach_reverse kullanmak zorunda kaldım. Çünkü değerleri tersten ekrana yansıtmam gerekiyordu. Ancak yapılı olan sürümü kurgularken harfleri ters sırada yazmam da aynı sonucu almamı sağladı. Belki bir gün işinize yarar.

Başarılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 27, 2012

Tekrar düşündüm; ikinci sürüm de fena görünmüyor...

Çünkü döngü kurmuyorsunuz, sorgu da yok! Nesneyi kur ve ekrana bas (işle) gitsin...:)

import std.stdio;

void main(){
 union IPv4 {
   uint address;
   struct parts {
     ubyte d, c, b, a;
   } parts part;
 }

 auto ip = IPv4(0xc0a80102);
 with(ip.part) writefln("%u.%u.%u.%u", a, b, c, d);
}

Sanırım std.string.format ile bir 'toString()' işlevi yazabilirdik...

Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]