Thread overview
Bir opDispatch örneği
Mar 12, 2012
Mengu
March 11, 2012

Şurada Ruby'nin güzelliklerini gösteren bir programın D'ye uyarlanmışı var:

http://idorobots.org/2012/03/04/romans-rubies-and-the-d/

Ruby kodu:

class Roman
 def self.method_missing name, *args
   roman = name.to_s
   roman.gsub!("IV", "IIII")
   roman.gsub!("IX", "VIIII")
   roman.gsub!("XL", "XXXX")
   roman.gsub!("XC", "LXXXX")

   (roman.count("I") +
    roman.count("V") * 5 +
    roman.count("X") * 10 +
    roman.count("L") * 50 +
    roman.count("C") * 100)
 end
end

puts Roman.X
puts Roman.XC
puts Roman.XII

D karşılığı:

import std.stdio;
import std.array;
import std.algorithm;

struct Roman {
   @property static auto opDispatch(string number)() {
       enum num = number.replace("IV", "IIII")
                        .replace("IX", "VIIII")
                        .replace("XL", "XXXX")
                        .replace("XC", "LXXXX");

       enum value = num.count('I')
                  + num.count('V') * 5
                  + num.count('X') * 10
                  + num.count('L') * 50;

       return value;
   }
}

void main() {
   writeln(Roman.XV);
   writeln(Roman.IIX);
   writeln(Roman.VXCII);
}

İşin güzeli, D'nin oluşturduğu program değerlere hesaplamak için çalışma zamanında hiç zaman harcamıyor; şu program kadar etkin çalışıyor:

import std.stdio;
struct Roman{}
void main() {
   writeln(15);
   writeln(10);
   writeln(97);
}

Ali

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

March 12, 2012

ustad reddit'te gormeyegor, hemen gelip yapistiriyorsun buralara. :) ben de onun icin girmistim. :)

method_missing olanagi ruby'de en cok ovunen ozelliklerden birisi. sirf method_missing ile adamlar cilgin dsller yaziyorlar.

ruby haliyle yorumlanan bir dil oldugu icin, d gibi derlenen bir dilden yavas calisiyor. :)

ama d'de boyle guzel seyler yapabilmek buyuk rahatlik. mesela ben dinamik dillerden gelen bir gelistirici oldugum icin __traits modulu cok isime yaramisti.

Alıntı (acehreli:1331492473):

>

Şurada Ruby'nin güzelliklerini gösteren bir programın D'ye uyarlanmışı var:

http://idorobots.org/2012/03/04/romans-rubies-and-the-d/

Ruby kodu:

> class Roman
>   def self.method_missing name, *args
>     roman = name.to_s
>     roman.gsub!("IV", "IIII")
>     roman.gsub!("IX", "VIIII")
>     roman.gsub!("XL", "XXXX")
>     roman.gsub!("XC", "LXXXX")
>
>     (roman.count("I") +
>      roman.count("V") * 5 +
>      roman.count("X") * 10 +
>      roman.count("L") * 50 +
>      roman.count("C") * 100)
>   end
> end
>
> puts Roman.X
> puts Roman.XC
> puts Roman.XII
> ```

>
> D karşılığı:
>
>
>

import std.stdio;
import std.array;
import std.algorithm;

struct Roman {
@property static auto opDispatch(string number)() {
enum num = number.replace("IV", "IIII")
.replace("IX", "VIIII")
.replace("XL", "XXXX")
.replace("XC", "LXXXX");

    enum value = num.count('I')
               + num.count('V') * 5
               + num.count('X') * 10
               + num.count('L') * 50;

    return value;
}

}

void main() {
writeln(Roman.XV);
writeln(Roman.IIX);
writeln(Roman.VXCII);
}

>

İşin güzeli, D'nin oluşturduğu program değerlere hesaplamak için çalışma zamanında hiç zaman harcamıyor; şu program kadar etkin çalışıyor:

> import std.stdio;
> struct Roman{}
> void main() {
>     writeln(15);
>     writeln(10);
>     writeln(97);
> }
> ```

>
> Ali
>

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

Alıntı (Mengu):

>

method_missing olanagi ruby'de en cok ovunen ozelliklerden birisi. sirf method_missing ile adamlar cilgin dsller yaziyorlar.

Ben de derlemeli dillerden geldiğim için opDispatch pek aklıma gelmiyor. Böyle örnekler uyandırıyor. :)

Ali

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