勉強メモ

主にプログラミングの勉強メモ

プロを目指す人のためのRuby入門 第二章 メモ

初めて知ったことをメモ。

数値

  • 数値にアンダーバーを入れて書ける。桁数が多い数値を記述する場合にカンマ替わりにして見やすくするなどの用途がある。
a = 1_000_000 #=> 1000000
  • 少数の計算を行う場合は、Rational 型を使用すると、誤差を防げる。

文字列

  • ヒアドキュメントの <<識別子 は、式としてみなせる。文字列メソッドを適用したり、文字列を引数にとる関数に渡したりできる。

  • 「文字」と「文字列」の違いはない。

  • 以下のような表記で、一文字だけの文字列を生成できる。

真偽値、条件分岐

  • if 文は最後に評価された式を戻り値として返す。この性質を利用して次のように変数に代入も可能。
b = 1
a =
if b == 1
  "aは1だよ"
else
  "aは1じゃないよ"
end
puts a #=> "aは1だよ"
  • 論理演算子の評価の優先順位は以下。
1. !
2. &&
3. ||
4. not
5. or, and
  • 優先順位の違いにより、等価に見える式も返す値が異なることがある。
t = true
f = false

# (!t) || f  と同じ
!t or f #=> false

# not (t || f ) と同じ
not t || f  #=> true  
  • 論理演算子を使った式の戻り値は、式全体の真偽値が確定した時点での、最後に評価した式の戻り値を返す。 trueやfalse を返すとは限らない。
1 && 2 && 3 #=> 3
1 && nil && 3 #=> nil

t1, t2 = true
f = false
# or と and は優先順が同じため先頭から評価される
t1 or t2 and false #=>false
  • and , or は制御フローを書くのに向いている。
# ユーザーが有効なら何か処理
# && を使って書くと mail_to(user) とする必要がある。
user.valid? and mail_to user

# a が真でなければ 文字列を返して関数を抜ける
def func(a,b)
  a or return "Invalid arg"
  # a について処理...
  ...
end

メソッド

  • デフォルト引数には関数の戻り値など、動的な値を指定することもできる。
def hoge(a = Time.now)
  "Input time : #{a}"
end

puts hoge #=>Input time : 2018-10-11 23:41:51
  • ! で終わるメソッドは、使用に注意が必要なメソッド。どんな注意が必要になるかは、明確な定義はない。 必ずしも破壊的メソッドだけに付くわけではない。

その他

  • Ruby の変数はオブジェクト参照を格納している。どのオブジェクトを指しているかは object_id メソッドで確認できる。

  • requireruby を実行したディレクトリを基準としてファイルを読みこむ。 require_relative は そのファイルを起点とした相対パスでファイルを読み込む。

  • puts, print, p メソッドは微妙に異なる。基本的には puts, print は一般ユーザー向けの、p は開発者向けの用途で用いる。

  • puts, print メソッドは内部的に to_s メソッドを呼び出して値を出力する。 p メソッドは inspect メソッドを内部的に呼び出している。