パーフェクトRubyメモ3 + ブロック

f:id:piyo_yeah:20190221235400p:plain

章別

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のほうが腑に落ちる。

ブロックは、式の並び・手続きをメソッド呼び出しのパラメータとして利用するための仕組みと言えます。

 通常の処理だと、「処理方式 + データ」の形をとるが、ブロックの場合は「データ + 処理方式(ブロック)」の形をとる、というイメージ。

 だが、正直言うとまだブロックの使い方には納得できていない。今後の課題。