(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください)
まあ僕は今受験生でしかも今11月なんで中身はほぼ0です。そのうち書き直します。多分。
誰か代わりに書いて
仕様書
今回はECMA262で書いていきます。pdf形式なので私は既にiPhoneにダウンロード済みです。かなり便利。ネットで見ようとすると重くて面倒ですからね。
仕様書の読み方
ある程度英語がわかっても意味がわからない表現が幾つかあるので書いておきます。 まあ今回必要な分だけです。僕自身まだ仕様書全部読んだわけじゃないので。
Let X be Y
直訳すると「XをYにする」です。Xという変数にYを代入することを示します。ただし、変数と言っても内部処理で使うものです。私たち自身が使える変数ではありません。
例: Let lref be the result of evaluating LogicalORExpression.
訳: lrefにLogicalORExpressionを評価した結果を代入します。
ReturnIfAbrupt(argument)
abruptは「突然の」という意味です。
どうやら内部処理では文(文かあやしいです…)はいくつかのタイプの返り値を返すようです。例えば例外、break、continueが特殊な返り値に区分されます。
この特殊な返り値が「abrupt completion」らしいです。ReturnIfAbruptでは、渡されたargumentがabruptならargumentを返し、違う場合はargumentにargument.valueを代入します。
argumentはtype、valueと言ったプロパティを持つオブジェクトです。typeは例外、breakなど、どの形で値が返されたのか示します。
というわけで三項演算子について語ろう
まあ入門と言いつつこんな記事見てる時点である程度力あると踏んでそこそこ面白そうなの選びました。
三項演算子は178ページにあります。
ConditionalExpression: LogicalORExpression ?AssignmentExpression:AssignmentExpression
- lref に LogicalORExpressionの評価結果を代入
- lval に ToBoolean(GetValue(lref))を代入
- ReturnIfAbrupt(lval)をします
- lval が true なら
- trueRef に1番目の AssignmentExpression の評価結果を代入
- GetValue(trueRef) を返す
- Else
- falseRef に2番目の AssignmentExpression の評価結果を代入
- GetValue(falseRef) を返す
おそらくReturnIfAbruptは例外が投げられたかどうかの判定に使ってるのだと思います。breakやcontinueは入りませんからね。
まあ、三項演算子だなぁ、という感じの仕様ですね。