Skip to content

Commit

Permalink
fixed twitter#5: add comments on 'for loops and comprehensions.' than…
Browse files Browse the repository at this point in the history
…ks to @eed3si9n.
  • Loading branch information
okapies committed Mar 21, 2012
1 parent 44a7dd5 commit e7baf87
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion effectivescala-ja.mo
Expand Up @@ -571,10 +571,20 @@ elaborate..
if (item != 2) return
}

.LP このコードでは、<code>return</code>を非局所的(nonlocal)にするよう`container`が計算を遅延させると、ランタイムエラーが発生することがある!(訳注: どういう意味?)
.LP このコードは、`container`が計算を遅延させた場合にランタイムエラーが発生し、その結果として<code>return</code>が非局所的(nonlocal)に評価されてしまうことがある!

これらの理由から、コードを明瞭にするためである場合を除いて、`for`を使う代わりに、`foreach`や`flatMap`や`map`や`filter`を直接呼び出す方が良いことが多い。

(訳注1: Scalaのfor式は`foreach`、`flatMap`、`map`、`withFilter`を呼び出す糖衣構文で、ループ内の式は、コンパイル時にそれらのメソッドに渡される匿名関数に変換される。例えば、上記の例のfor式は、実際には

container foreach { item =>
if (item != 2) return
}

というコードとして実行される。原文では、最初からこのように記述することを推奨している。)

(訳注2: ネストした匿名関数での`return`式は、ランタイムエラーである`NonLocalReturnException`の`throw`と`catch`に変換される。この場合、`container`が遅延評価されると`return`式の挙動が意図しないものになる場合がある。詳細に興味がある場合は、[こちらの議論](https://github.com/okapies/effectivescala/commit/8b448ef819e6d87d21fa78310b84fc72593b0226#commitcomment-996948)も参照してほしい。)

### `require`と`assert`

`require`と`assert`は、どちらも実行可能なドキュメントとして機能する。これらは、要求される不変条件を型システムが表現できない状況で有用だ。`assert`は、コードが仮定する(内部あるいは外部の)*不変条件*を表現するために使われる。例えば、
Expand Down

0 comments on commit e7baf87

Please sign in to comment.