【Ruby学習記録】Ruby を動かしてみよう
まずは簡単な「文字出力」の練習から。
お題1:氏名を出力せよ
Rubyの場合、コンソールにテキストを出力する際には以下の4つのメソッドがある。
- puts
- p
- printf
puts
多分、単純にテキストを出力したい場合はこれが一番ポピュラーか。
引数をそのまま出力して、末尾に改行がつく。
Q1の場合、出力は以下のようになる。
puts 'Masahiko Iwakiri'
===
% ruby q1.rb
Masahiko Iwakiri
p
引数の型情報も含めて出力。末尾に改行がつく。
Q1の場合、出力は以下のようになる。
p 'Masahiko Iwakiri'
===
% ruby q1.rb
"Masahiko Iwakiri"
今回出力しているのは、いわゆる文字リテラルなので String クラスとなる。ということで、Stringであることを示すために、テキストがダブルクオートで囲まれる。
print、printf
引数をそのまま出力して、末尾に改行はつかない。
Q1の場合、出力は以下のようになる。
print 'Masahiko Iwakiri'
===
% ruby q1.rb
Masahiko Iwakiri%
今回の場合だと、特に問題なさそうにも思えるが、色々続けて出力した時に改行されずに続けて表示されてしまうので、非常に見づらくなってしまう。
printf は「書式付き出力」と呼ばれるもので、固定のテキストと変数の値を組み合わせたい場合に活用する。(*Q3のようなパターン)
お題2:答えが10になる四則演算、あまりが2になる計算の結果をそれぞれ出力せよ。
puts '### Addition ###'
puts 3 + 7
puts '### Subtraction ###'
puts 35 - 25
puts '### Multiplication ###'
puts 2 * 5
puts '### Division ###'
puts 100 / 10
puts '### Mod ###'
puts 11 % 3
この問題は、Rubyにおける算術演算の演算子を確認するもの。
- 足し算: +
- 引き算: ー
- 掛け算: *
- 割り算: /
- 余り: %
お題3:以下の内容が出力されるように実装せよ
Hello, world!
1 + 1 = 2
私は早合点して下のように解答してしまったが、「1 + 1 = 2」の部分はそのままのテキストでもよかった模様。(あくまでも今回のお題としては)
puts "Hello World"
printf("1 + 1 = %d\n", 1 + 1)
===
% ruby q3.rb
Hello World
1 + 1 = 2
Cからプログラミングを覚えた人間なので、最初に思いつくのがこのパターンだったという次第。
ここで、printf メソッドを使ったが、printf メソッドは以下のような使い方になる。
printf( “文字リテラルとフォーマット文字列” , [フォーマット文字列に対応する変数] , … )
今回の例だと、%d のところがフォーマット文字列で、「ここには数値が入りますよ」という意味になる。
で、「フォーマット文字列に対応する変数」のところに 1+1 という計算式を書いているので、その結果の 2 という数値が表示されることになる。
なお、\n は改行を表すキーワード。なので、printやprintfを使う場合は、よく用いられる。
ちなみに、この問題は puts メソッドでもちゃんと対応できる。その場合は、『変数展開・式展開』というテクニックを使う。
puts "Hello World"
puts "1 + 1 = #{1 + 1}"
===
% ruby q3.rb
Hello World
1 + 1 = 2
””で囲んでいるところが文字リテラルで、その中に #{} という記述を行うと、{} 内に変数や式をかける、というテクニック。
確か、JavaScriptなんかでも同じような方法が使えたような。
printf のような古からのテクニックと、式展開・変数展開という新しめのテクニックの両方が通用するのは、いいとこ取りができる後発の言語ならではといったところか。
Discussion