6/20 プロを目指すRuby


・式展開 #{}を用いる場合自動的にto_sメソッドが呼び出される

丸め誤差
 0.1 * 3.0 #=> 0.3000000004
 コンピュータ内部で10進数ではなく2進数で計算しているため。
 大小を計算する際にバグにつながる可能性あり。

 Rationalクラスを使うと少数ではなく分数で計算結果が出
 そのため、バグが起きにくい
 0.1r * 3.0r #=> (3/10)

 変数に値が入っている場合にはrationalizeメソッドを呼ぶ
 a = 0.1
 b = 3.0
 a.rationalize * b.rationalize #=> (3/10)

Rubyではnilは偽となる

・後置if
 point *= 3 if day == 7

 もし7日であればポイント3倍みたいな

rubyではメソッドの戻り値を設定しない(することはできる)
return を使うときは途中でメソッドを抜けるときに使うことが多い

配列を連結して1つの文字列にする
[10.20.30].join => 102030

"Hi" * 10 => Hi!Hi!......

■数値クラスの継承関係

Numeric(数値)
       |
    ------------------------------------------------
    |        | |      |
Integer(整数) Float(少数)       Rational(有理数)   Complex(複素数)

■真偽値と評価を終了するタイミング
1 && 2 && 3 => 3 3までいかないと真偽が決められない
nil || false || 2 || 3 =>2 2の時点で真偽が確定


or and は優先順位が低く制御フローにて使われる

or 「Aが真か?、真でなければBせよ」

country or return "countryを入力してください"
# countryがnilまたはfalseの場合にはメッセージを返してメソッドを抜ける。

Rubyは、最後に評価された式がメソッドの戻り値になる

■条件演算子(参考演算子
式 ? 真だった場合 :偽だった場合

シンプルなif/else文の場合には条件演算子を利用した方がよい

■Predicate Methods / Bang Methods

?で終わるメソッド predicate methods 真偽値を返すことができる。
.empty? .odd? .even? .nil?
自身で作成したメソッドでも設定可能

■基礎知識

ガベージコレクションGC
 Ruby使用されなくなったオブジェクトを回収し、自動的にメモリを開放する

エイリアスメソッド
 .length .size など名前だけ異なるメソッド

■テスト自動化
・テスティングフレームワークに沿って、テストコードを書く
・テストコードを実行する
・実行結果の確認

■&とシンボルを用いて書く
.map{ |s| s.upcase}
→.map(%:upcase)

・条件はブロックの引数が1つだけ
・ブロックで呼び出すメソッドには引数がない
・ブロック引数に対して、メソッドを1回呼び出す以外の処理がな

■n以上m以下、n以上m未満の判定をする

・不等号を用いるよりも範囲オブジェクトを使うことでシンプルに記述できる
0度以上100以下
def liquid?(temperature)
0 <= temperature && temperature < 100

(0...100).include?(temperature)
end

・case 文と併用して用いる

case age
  when 0..5
  when 6..12

・値が連続する配列の作成をする
(1..5).to_a → [1,2,3,4,5]

■プログラムのインプットとアウトプットが明確である場合
TDD(テスト駆動開発)が向いている。
調べたら、コストかかるからどうなのって記事多いけど実際どうなんだ

■配列
rubyは添え字に負の数を用いることができる
a = [1,2,3] a[-1] → 3
first , last メソッド