Ruby学習 「プロを目指す人のためのRuby入門」 2章

はじめに

プロを目指す人のためのRuby入門Rubyを学習しています。
大事そうな部分や理解が難しかった部分、忘れそうなことについて学習メモを書きます。
今回は第2章「Rubyの基礎を理解する」について書いていきます。

記事中のプログラムはirbで動作を確認しました。

すべてがオブジェクト

Rubyでは数値やnilを含め、すべてがオブジェクトです。 したがって数値、nil、true、falseにもメソッドが使えます。

 1.to_s
=> "1"

nil.to_s
=> ""

true.to_s
=> "true"

変数(ローカル変数)の宣言と代入

  • 変数の宣言のみはできない(エラーになる)
  • 変数の宣言時には値の代入が必要
  • 変数名はスネークケース(×employeeId 〇employee_id)
  • 変数には型がない
  • ↑のため同じ変数に色々な型のデータを入れることができるが理解しづらくなるのでできるだけしない

文字列

  • 文字列はダブルクォートかシングルクォートで囲む

  • 改行や式展開を使う場合はダブルクォートで囲む

language = 'ruby'

"今日は#{language}を学ぶ"
=> "今日はrubyを学ぶ"

'今日は#{language}を学ぶ'
=> "今日は\#{language}を学ぶ"

数値

  • 整数同士の割り算は整数になる
  • どちらかの値に少数を含むと結果も少数になる
  • to_fメソッドで少数に変換できる
5/2
=> 2

5.0/2
=> 2.5

(5/2).to_f
=> 2.0

5/2.to_f
=> 2.5
  • 数値と文字列に暗黙的な型変換はない
3 + '5'
TypeError: String can't be coerced into Integer
        from (irb):16:in `+'
        from (irb):16
        from /home/dev_user/.rbenv/versions/2.4.1/bin/irb:11:in `<main>'
  • Rubyでも丸め誤差が発生する場合がある
  • Rationalクラスを使うと正しい結果を得られる
  • 数値リテラルの後ろにrをつけるとRationalクラスの数値になる
  • 変数の場合はrationalizeメソッドを使うとRationalクラスの数値に変換できる
  • Rationalクラスの数値はto_fメソッドを使うと普通の少数に戻せる
0.1 * 3.0
=> 0.30000000000000004

0.1r * 3.0r
=> (3/10)

(0.1r * 3.0r).to_f
=> 0.3

真偽値と条件分岐

  • falseまたはnilは偽
  • ↑以外は真
  • ifは内部で最後に評価された式が戻り値となる
score = 90
=> 90

if score > 70
  'pass'
else
  'failure'
end
=> "pass"
  • ifの結果を変数に代入することもできる
  • If文は文の後ろに書くこともできる
score = 90
=> 90

'pass' if score > 70
=> "pass"

メソッドの定義

  • メソッド名はスネークケース
  • 戻り値に関する情報は定義に出てこない
def test_method
  'test'
end

test_method
=> "test"
  • 最後に評価された式が戻り値になる
  • return文はあるが使わないのが主流
  • return文は処理の途中で離脱する場合に使うことが多い(ガード節で使う)
  • 引数がない場合は()を省略するのが主流

真偽値と条件分岐についてもっと詳しく

  • &&は最初に偽となる式を評価した時点で評価を終了し、最後に評価した式の値を返す
  • ||は最初に真となる式を評価した時点で評価を終了し、最後に評価した式の値を返す
  • unless文はifと反対で条件が偽となった場合に処理を実行する
  • unless文は変数への代入や修飾子として使うなどifと同じ使い方ができる

メソッド定義についてもっと詳しく

  • メソッド定義で引数にデフォルト値を設定できる
  • 真偽値を返すメソッドはメソッド名の末尾を?にする(Rubyの慣習)
  • 使用する際に注意が必要なメソッド名の末尾を!にする(Rubyの慣習)
  • Rubyの変数にはオブジェクトの実態ではなく、オブジェクトへの参照が入っている
  • 変数をほかの引数に代入したりメソッドに引数として渡すと元の変数と同じオブジェクトを参照する
  • 破壊的なメソッドをを使うと元の変数の値も変わる
  • 変数に新しい値を代入しても元の変数の値は変わらない
  • Rubyには何もしなくても使える組み込みライブラリ、明示的に読み込みが必要な標準ライブラリがある
  • 開発者が作成、公開しているライブラリはgemと呼ばれる(gemも明示的に読み込みが必要
  • ライブラリはrequireで読み込む(Rubyを実行しているディレクトリがパスの起点)
  • 同じライブラリを何回も読み込むときはloadを使う
  • require_relativeは自分のファイルのディレクトリをパスの起点としてライブラリ指定できる

感想

今まで使用したことがあるJavaとだいぶ構文や仕組みが違っている事がわかりました。
同じScript言語であるJavaScriptとは少し似たところがあると思いました。
また、Rubyの慣習についても多少分かったので、今後Rubyのプログラムを作成する際に
意識していきます。

課題

Rubyの変数の渡し方が参照渡しっぽいが、実際は違うようなので時間の余裕があれば調べて記事にします。

参考文献

この記事は以下の情報を参考にして執筆しました。