変数、式展開、コメント
今回は変数と式展開を試す。
目次
変数(Variable)
リファレンスマニュアル
変数とはオブジェクトに名前をつけること。
変数のリファレンスマニュアルは以下。
Rubyリファレンスマニュアル
変数と定数
https://docs.ruby-lang.org/ja/latest/doc/spec=2fvariables.html
変数の書式
書き方は次のとおり。
変数名 = オブジェクト
変数を使ったコード
実際にコードを書く。
テキストエディタで新規ファイルをつくり、つぎのコードを書く。
crew="Nボートクラブ" puts crew
書けたらtest.rbと名前をつけて練習用のディレクトリ内に保存する。
これを実行すると次のように表示さる。
実行の仕方は前回の記事を参照。
実行結果
Nボートクラブ
上の例を説明するときは「Nボートクラブを変数crewに代入する」と表現する。
変数には文字列オブジェクトだけでなく、いろいろなオブジェクトを代入できる。
整数オブジェクトで試す。
test.rb
rank=1
puts rank
実行結果
1
オブジェクトを変数に代入しておけば持ち運びに便利。
変数に代入しておけば変更するときに元の代入式1箇所を修正するだけですむので便利。
変数を使って前回書いたコードを書き直してみる。
まずは1行だけテストする。test.rbに次のコードを書く。
test.rb
rank=1 crew="N会社" goaltime="05:47.74" puts "rank crew goaltime"
これを実行すると次のように表示される。
rank crew goaltime
変数名がそのまま出力された。これは意図するものとは違う。
" "
で囲むと変数が変数として認識されなくなってしまう。
そこで" "
を使わず、つなげる役目の+
をつかって変数同士をつなげる。
test.rbのputs部分を次のように書き換える。
test.rb
puts rank+crew+goaltime
これを実行すると次のようなエラーになる。
test.rb:4:in `+': String can't be coerced into Integer (TypeError) from test.rb:4:in `<main>'
前回見たエラーに似ている。
今回は「文字列は整数に変換できない」と言っている。
変数rankには整数の1を代入している。そうすると変数rankは整数(Integer)オブジェクトになる。
だから「文字列とは足し算できない」と言われてしまう。
to_sメソッド
オブジェクトのクラスをそろえるため、整数オブジェクトを文字列(String)オブジェクトに変えるto_s
メソッドを使う。
文字列同士なら連結してくれるはず。
test.rbファイルのputs部分を次のように書きかえる。
test.rb
puts rank.to_s+crew+goaltime
実行結果
1N会社05:47.74
オブジェクト同士がくっついてはいるものの、今度はねらいどおりになった。
式展開
違うクラスのオブジェクトをまとめて出力したいとき、上の方法とは別に式展開というやり方もある。
書式は次のとおり。
"#{[式]}"
[式]には変数や数式などさまざまな式を入れることができる。
式展開は必ず" "
(ダブルクォート)の中で使う。
どんな式も式展開を使うと文字列オブジェクトとして扱われる。
式展開を使ってコードを書く。
test.rbを書きかえる。
test.rb
puts "#{rank} #{crew} #{goaltime}"
実行結果
1 N会社 05:47.74
全ての変数を一つの" "
で囲むことができるためスペースも簡単に入れることができる。
コメント
#
記号
Rubyは#
から改行までをコードではなくコメントとみなして無視する。
さきほど説明した式展開の書式"#{}"
だけは例外で、コードとみなされ実行される。
#
は行頭に置いてもかまわないし行の途中からも使える。
=begin、=end
=begin
と=end
で囲んだ部分もコメントになる。
コメントを入れたコード
#この行はコメントのため無視される puts 1+1 #は行の途中からも使える =begin ここにコメントを書く ここにコメントを書く ここにコメントを書く =end
実行結果
2
コメント部分が無視されているのがわかる。
2つの書き方は場面によって使い分ける。
変数、式展開、コメントを使ったコード
変数と式展開を使って前回書いたrubylesson.rbファイルを書きかえる。
今回からオブジェクトの間に適度にスペースを入れてコードを書く。
スペースを入れるとコードが見やすくなる。
スペースは半角で入れる。全角スペースを入れてしまうとエラーになるので注意が必要。
スペースはむやみやたらには入れられないけれど、人のコードを読んでいるうちに入れられる場所がわかってくる。
rubylesson.rb
#レース情報を変数に代入する month_day_time = "10/29 10:40" event = "女子舵手なしクォドルプル" group = "決勝" #着順を変数に代入する rank1st = 1 rank2nd = 2 rank3rd = 3 rank4th = 4 #クルー名を変数に代入する crew1st = "K電力" crew2nd = "M生命" crew3rd = "TY社" crew4th = "W大学" #ゴールタイムを変数に代入する goaltime1st = "06:45.08" goaltime2nd = "06:47.19" goaltime3rd = "06:47.19" goaltime4th = "05:48.99" #ターミナルに出力させる puts month_day_time #日時の出力 puts event + group #種目と組別の出力 puts "#{rank1st}着 #{crew1st} #{goaltime1st}" #式展開を使って1着の結果を出力 puts "#{rank2nd}着 #{crew2nd} #{goaltime2nd}" #2着の結果を出力 puts "#{rank3rd}着 #{crew3rd} #{goaltime3rd}" #3着の結果を出力 puts "#{rank4th}着 #{crew4th} #{goaltime4th}" #4着の結果を出力
実行結果
10/29 10:40 女子舵手なしクォドルプル決勝 1着 K電力 06:45.08 2着 M生命 06:47.19 3着 TY社 06:47.19 4着 W大学 05:48.99
出力用コードの2行目event + group
はどちらも文字列オブジェクトの変数なので+
メソッドを使ってもエラーにならない。
着順の変数rank1stからrank4thは式展開の中に入っているので文字列オブジェクトとして扱われている。
スペースを入れることでコードが読みやすくなった。
今回の使い方では面倒に思える変数も、のちのち役に立つ。
変数名のつけ方
変数名のつけ方には決まりがある。
- 英小文字もしくは_(アンダーバー)からはじめる
- 2文字目以降は英数文字もしくは_を使う(ただし変数名は1文字でも大丈夫です)
- 「予約語」は使えない
予約語についてはRubyリファレンスに書かれている。
https://docs.ruby-lang.org/ja/latest/doc/spec=2flexical.html
次回は配列を試す。
今回の動作確認環境
Ruby 2.4.3p205
macOS 10.13.3
ターミナル
Windows10
Windows PowerShell