ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

変数、式展開、コメント

今回は変数と式展開を試す。

目次


変数(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