Ş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. ]