4章 プロになるRuby入門
この章で学ぶこと
- 配列
- ブロック
- Range
- 繰り返し処理
- 繰り返し処理用の制御構造
ポイント
- 配列の要素をあれこれいじくり回すようなコードが描きたくなったら、手を動かす前にAPIドキュメントに一通り目を通して使えそうなメソッドはないか探す
- こんなコードを書こうとしているのは、世界で自分だけか? 自問する。
- 以上の過程を踏むことで、簡潔なRubyプログラムがかけるようになる。
配列
- 配列を使っても多重代入できる。多重代入は配列として返してくれるので、divmodのようなメソッドには有効p89
ブロック
- rubyにもfor文があるが、ほとんど使われない。rubyでは、eachメソッドを使い、配列自身に対して繰り返せと命令する。
- 同じ処理を違う言語で比較するとrubyのブラックボックスになってしまっている部分が浮かび上がってくるので面白い。
- Rubyでは、要件を問わず共通する処理はメソッド自身に、要件によって異なる処理はブロックにそれぞれ分担させて、一つの処理を完了させるメソッドが数多く用意されている。
- delete_if は、”配列要素を順番に取り出すこと”と”ブロックの戻り値が真であれば要素を削除すること”という共通処理を提供する。
- |n| ← ブロック引数
- number.each { |n| sum+= n } のようにかける。( do → { , end → } に対応 )
- endの対義語はbeginだけど、doのほうが文字数短い
- 奇数/偶数:odd/even
- ブロックを使うと同じ名前でもオブジェクトidは異なる
Range
- Rubyでは、範囲オブジェクト(例. (1..5) )を使うと便利な場面がある
- 0 <= temp && temp < 100 は、(0...100).include?(temp) とかける
- 10進数 / 16進数 = decimal / hexadecimal
- + vs concatメソッド 違い:破壊的かどうか 大規模な開発では + を推奨
繰り返し処理
- ミュータブルなオブジェクト:stringクラス
- イミュータブルなオブジェクト:数値、シンボル、true/false、nil
- ↑ の違いは破壊的メソッドが使えるかいなか
繰り返し処理用の制御構造
- 繰り返し処理の脱出:break 大域脱出:throw, catch
- returnは、メソッドからの脱出