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なんて名前空間を考えたりもしました。