PRINT USING
いつかやろうと思っていたネタ。
http://p22.aaacafe.ne.jp/~qwerty/private/junk/printusing.d
BASICのPRINT USINGをDに移植してみました。
import printusing;
enum { LC_ALL = 0 }
extern(C) char* setlocale(int, char*);
int main()
{
setlocale(LC_ALL, "");
print_using(`+####`\n, 123);
print_using(`-####`\n, 123);
print_using(`###,###,###`\n, 123456);
print_using(`###,###,###`\n, 123456789);
print_using(`## + ## = ##`\n,
delegate void (inout using s){ s.sign_always = 0; },
1, 99, 100);
print_using(`00 + 00 = 00`\n,
delegate void (inout using s){ s.sign_always = 0; },
1, 99, 100);
return 0;
}
+123
123
123,456
123,456,789
1 + 99 = 100
01 + 99 = 100
書式文字列と出力の桁数が一致するため、printfなどよりも遥かに視認性がよく、かつてのBASICが唯一、現在の言語にも勝る点ではないかと…(言い過ぎ)
内部的にはtypeidを使ってあらゆる型に対応できるようにしてありますが、所詮ネタですので実装はintのみです。
どうせネタならと一瞬std.basic.printなんて名前空間を考えたりもしました。