- OCamlとカッコ : (2010/11/02)
-
OCamlにとってカッコは優先度の問題が無いかぎり省略できる。
が、OCamlは文法が非常にアレなので慣れないうちは混乱する。
というか、今後もたぶんあの文法に慣れることは無いと思う。
例えばif式には基本的にカッコは不要だが、ネストした場合に少々わかりづらい。
if true then
if false then
print_string("TRUE")
else
print_string("FALSE")
この場合最初の条件式でtrueになるがその内側の条件式でfalseになるので何も出力されない、というのを意図しても「FALSE」が出力される。
というのもこのelseは外側ではなく内側のifに結びつくので、意図どおりに動かすなら内側のif式を丸ごとカッコで囲む必要がある。
これは単純な例だけど、もう少し複雑になるとあっという間にわけのわからないコードが出来上がる。
結局ifとかfunとかそういう終端句の無い式は全部カッコで囲んでやったほうが後々混乱しなくて済むので本来不要なカッコも念のため書いてしまうようになった。
人はLispに帰ってゆくのですね。
カッコの無いSchemeと言われたDylanでの開発もこういう混乱があったんじゃないだろうか。
と、思って探してみたらステートメントの終端に「end if」みたいに「end」を書くのか。
Statements
Functions_Overview
関数定義の「method foobar (vars)」〜「end foobar」という文法は良いかも。
Rubyはなんでも「end」単体だから結局カッコと比較してそんなに可読性が高いとも思えなくて面倒なだけだったけど、いっそ面倒ついでにもう少し修飾すれば対応関係がわかりやすくていいかな。