■
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 メソッド