DT日記

家を離れた自宅警備員の日記

(s)printf ことはじめ

Cでのプログラミングの初歩は printf を置いてほかにないので、ぐぐってみたところ幸運にもRubyにも存在するprintfメソッドを試してみる。

printf("%s\n",'Hello, World!');

うん、おkっすね。

printf("%f\n",1/3)

おおっと、これは融通が利かない。ならばこれでどうかな、と。

printf("%f\n",1.to_f/3)
printf("%f\n",1.0/3)

おk。式がちょっとかっこ悪く見えますが動きますね。基本的な型のクラスではたいてい .to_x で変換できるのでお手軽です。機能別索引 - Rubyリファレンスマニュアルを見る限りでは、 .to_i, .to_s, .to_a, .to_f, .to_hash がありました。

文字列リテラルについてはリテラル - Rubyリファレンスマニュアル #文字列リテラルを参照。Rubyは文字列リテラルの表現がいっぱいあって良いですね。さしあたっては ' と " の挙動の差がわかれば良さげっぽいです。" はエスケープが変換されて、' は変換されない、と。残りは暇があれば覚えれば良いっすね。

で、本題。実際には画面に出力するだけよりも sprintf で文字列を加工した方がファイル出力にも転用できたり、便利が良さげっぽいです。

str=sprintf("%f\n",1.to_f/3)
puts str

これでおkですか。でも、String - Rubyリファレンスマニュアル #self % argsを見るとちょっと面白いことが書いてある。

puts "%s" % 'Hello, World!'
puts "%s%s" % ['Hello, ', 'World!']

フォーマット指定子がひとつの場合はそのまま、複数なら配列にして渡せる、と。こりゃあ便利っぽいですね。

ついでにprintf的に積み残してたのをこっちの記法で書いてみる。irbで実行するのでputは書かない。

"%f"    % 1.11111
"%.5f"  % 1.11111
"%b"    % 21
"%10b"  % 21
"%.10b" % 21

おkおk。これは素敵。Cのprintfには無い%bが追加されてビットを表示できる時点でRubyに惚れますね。濡れますね。