Rubyのプログラムってどのように書くんだろう
Rubyのプログラム例が見てみたい
学んだあとに実際にアウトプットして定着させたい
Rubyを学びたてもしくは学ぼうと思っている方の中には上記のようなことを思う方も多いのではないでしょうか?
みなさんこんにちは!業務でもRubyを用いている現役エンジニアのかいです。
今日は、Ruby初学者の方が思う基礎的な文法の解説や、プログラム例をたくさん見たいという方のために記事を用意しました。
この記事はこんな人のために書きました。
- Rubyのプログラムの書き方がわからない
- 基礎的な文法をマスターしたい
- Rubyのコードを実際にみながら解説してもらいたい
- 解説後、課題などを説いて力をつけたい
今はRubyが熱い!?
それでは、いきなりコードの説明に移って行く前に、軽くRubyがどんな言語かということを解説しておきます。Rubyが今熱い、入門に向いている、などの情報を元に勉強を始めた方が多いと思います。
Rubyとは、まつもとゆきひろ氏によって作られた言語で、動的なオブジェクト指向の言語です。オブジェクト指向については以下の記事がわかりやすいかと思います。
そして、Rubyが人気の理由としては書きやすく、柔軟性が高いこと、またRuby on Railsというフレームワークの存在があげられるでしょう。また筆者のイメージでは文字列処理が得意というイメージもありますね。
RubyはRuby on Railsなどの存在もありWebアプリケーションのバックエンドとして使われることが多いです。クックパッドなどもRubyを使っていることで有名ですね。
なので、Web系に進みたいと思っている初学者にとっては最適な入門言語ということですね。また、Rubyを学んでおけば他の動的言語を学ぶときにもすんなり理解できますので、後々違うことがしたくなっても手を出しやすいため学んでおいて損はないでしょう。
Rubyの実行方法
それでは、実際にRubyのプログラムについて見ていきましょう。まずは、当たり前ですがRubyの実行方法をおさらいしておきます。
.rbという拡張子が、Rubyファイルという意味ですね。以下のようなファイルをテスト用に準備しました。
test.rb
puts 'Hello World'
このカレントまで移動しそこで、ruby ファイル名、この場合では以下のようにすると実行できます。
ruby test.rb Hello World
インタラクティブなシェル
また、Rubyには、インタラクティブシェルという対話型のシェルが用意されており、それを用いると簡単なデバッグや、挙動を調べたいときなどに便利です。サイトの中にはインタラクティブシェルを用いて解説されているものも多いので使い方を見ていきましょう。
とは言っても簡単で、シェルでirbと入力してあげるだけで良いです。あとはここに、好きな処理を書いていけば、その結果が対話的に帰ってきます。ちなみに抜けるときはコントロール+Dです。
irb irb(main):001:0>
Rubyの条件分岐
さてそれでは、実際にプログラムの基本である条件分岐についてみていきます。具体的にはRubyではif文で条件分岐を行い、elseifはelsifとして表現します。
また複数の条件を分岐させるときは、case文を使うこともありますが、case文については以下の記事を参考にしてみてください。
ifの使い方
それでは、実際にifの使い方を見ていきましょう。基本的なif文はif – endをひとまとまりとして下記のように書きます。
if 条件式 処理 elsif 条件式 処理 else 処理 end
これを考慮して、コードを書くと、以下のようになります。
temp = 30 if temp >= 30 then puts "hot!" elsif temp <= 20 then puts "cold!" else puts "confortable!" end
ruby test.rb hot!
演習
さて、ここで演習を用意しました。
”score”という変数に標準入力を格納し、59点以下であれば、”fail”、60点以上79点以下であれば、”soso”、80点以上であれば、”good”と出力するプログラムを作成してください。標準入力にはgetsを用いましょう。
答え
それでは以下に解答例を示しておきます。
score = gets.to_i if score <= 59 then puts "fail" elsif score >= 60 and score <= 79 then puts "soso" elsif score >= 80 and score <= 100 then puts "good" else puts "無効な値です" end
一行目で受け取った値を数値に変換するのを忘れないようにしましょう。ここでは、to_iを用いていますね。そんなの知らないよ!と思う方もいるかもしれませんが、わからないことは調べるという癖をつけておきましょう。
実際にはこのコードでは、文字列であっても無理やり0に変換してfailを返してしまうのであまりよくありません。他言語のように受け取った値が数値かどうか簡単に調べられれば良いのですが、integer?などはfalseを返してくれませんので正規表現というものを用いて数値判別を行うことができます。
ここは本筋からずれるので割愛しますが、そこら辺も考慮して書けるようになるとより良いですね。
Rubyのループ
次はループの代名詞であるfor文についてみていきましょう。
forの使い方
for文は以下のような書式で記述します。doは省略可能です。
for 変数 in オブジェクト do 処理 end
このように、オブジェクトの値をひとつずつ変数に入れ実行していきます。C言語などを先に学んでいる方などは混乱しがちなのですが、Rubyのfor文は俗にいうforeach文です。
for文とforeachの違いがわかっている方は気をつけるようにしましょう。違いがよくわからない方は、初めてのfor文だと思うので特に気にせずそういうものだと思って使ってください。
for i in 1..5 puts i end
ruby test.rb 1 2 3 4 5
このように、endも忘れないようにしましょう。
演習
演習を解いて力をつけていきましょう。
AからZまでのアルファベットと1から10までの数値の全ての組み合わせを以下の例のように出力してください。
例
A1 A2 A3 … z8 z9 z10
答え
答えを見ていきしょう。組み合わせを表現するときはfor文を2重にすることで実現します。
for i in "A".."Z" for j in "1".."10" puts i + j end end
だいたい同じような感じになっているでしょうか?AからZまで一つずつ手動で配列に入れたりすることはやめてくださいね。できるだけ簡潔なコードを心がけましょう。
Rubyの関数
それでは最後に関数の使い方や呼び出し方をみていきます。関数については詳しく説明すると一記事書けるので最低限の知識を入れておきたい方は以下の記事を参考にしてみると良いでしょう。
関数の使い方
関数はdef、defineの略を使って定義します。簡単書くと以下のようになります。
def 関数名(引数) 処理 end # 呼び出すとき 関数名(引数)
実際のコードを見ていましょう。
def Add1 (num) num + 1 end puts Add1(3)
4
返り値は最後に評価された値になりますが、明示的に変数名を書くとその値を返せます。。ここで、返り値?という方は上記のリンクを使って理解を深めておきましょう。
演習
それでは演習です。
引数を2つ(開始値と終了値)を与えると開始値から終了値まで1刻みでその和を計算する関数を作ってください。ただし、結果を関数の中では出力せず関数の外で”result”という変数に定義して出力してください。
答え
答えを見ていきます。これに関しては書き方はたくさんありますが、できるだけわかりやすく簡潔なものが書けるようになると良いですね。
def sum(start, fin) total = 0 start.upto(fin) do |i| total += i end total end result = sum(1, 30) puts(result)
465
このように最後の行で明示的にtotalを返してやらないと正しい値は得られません。コードを見てわかるように、”total”と”result”は同じものですが、このようにスコープごとに名前を変えることもよくあるので頭に入れておきましょう。
まとめ
いかがでしたでしょうか。Rubyを行う上で最低限必須の条件分岐、ループ、関数についてみていきました。
演習がよくわからなかったという方は、付いてるリンクでさらに深く学べますのでそちらで個別に学ぶのも良いでしょう。ここで説明してる内容は基本中の基本ですので必ずマスターしてできるようにしておきましょう!
それでは!!