パーフェクトRubyメモ3 + ブロック
章別
3-3-2 例外の制御
例外発生時のみ処理、例外ないときのみ処理、例外の発生如何に関わらず処理、などを節で制御する。
- rescue 例外発生時
- else 例外発生なし
- ensure 例外発生如何に関わらず
3-3-4 メソッドやクラス、モジュール定義での例外捕捉
ここでいう「メソッドの呼び出し時」「クラスやモジュールの定義時」というのは、このメソッドないしクラスやモジュールを呼び出している箇所で例外が発生した時を指すのだろうか。
もしくは、begin に置き換わったdef hoge から rescue節の間までを指すのか?おそらく前者だろう。
3-4--1 catch, throw
シンボルを使うことで、特定のcatch と throw が関係性を持つ。ただthrow だと「どのcatch に向けるかわかりにくい」弊害が生じる恐れがある。上手い人が使う例外捕捉が気になる。
3-5-2, 3-5-3
メソッド呼び出し時に() を省くと、同じ名前の変数がある場合はそちらが優先される。
またメソッドの冒頭を大文字にすると「定数」とみなされるので、この場合は必ず() が必要。(大文字から始まるメソッド名を定義することはほぼないだろうが)
3-5-5 省略可能な仮引数
これも「使って良い場面」が少なさそう。上手い人の使い方を見たい。
3-5-6 可変長引数
配列として引数を受け取るという。イメージとしては、この配列部分には「同じカテゴリのデータのみ入るが、個数が不明」であることが条件だろう。
3-5-8 ブロック
メソッド内でyieldを使用している場合は、「メソッドの引数にブロックを使用していることが条件」「yield部分で、ブロックとして受け取った処理を実行する」ことを意味する。
3-5-8
ここで出ている例は、ブロック内に単発の処理しか入っていない。ブロックを使うのはどんなとき?
ブロックとは
ブロックについて「引数のカタマリ」と説明しているサイトが幾つかあるが、違和感がある。
個人的にはパーフェクトRubyのほうが腑に落ちる。
ブロックは、式の並び・手続きをメソッド呼び出しのパラメータとして利用するための仕組みと言えます。
通常の処理だと、「処理方式 + データ」の形をとるが、ブロックの場合は「データ + 処理方式(ブロック)」の形をとる、というイメージ。
だが、正直言うとまだブロックの使い方には納得できていない。今後の課題。