ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

みんな大好き(嫌い)? セミコロン

2015-08-22 15:50:03 | プログラミング

「関数型プログラミングの関数とは何か」の話をしている最中に、セミコロン「;」について面白い話を聞いたので、別途書いておく。

C言語やJavaでは、文の末尾にセミコロンを付ける。
これくらいいいだろうと思うんだけど、何故か世間にはセミコロンが嫌いな人が居て、新しいプログラミング言語が出ると、特徴のひとつに「セミコロンが不要」とか言い出す始末^^;
おかげで、セミコロンレスJavaなんてものが大流行したりするわけだけどw 

例えばPascalという言語では、セミコロンは文と文の区切りを表す。
すなわち、(ブロック内の)最後の文の末尾には、セミコロンを付けない(付けるとコンパイルエラー!)。
大学でPascalを使ってた頃は、(C言語を先に独学で覚えていたこともあって)よくエラーになったもんだ…。
これに比べれば、常にセミコロンを付けるC言語やJavaは、文法がシンプルで良いと思う(笑)

Haskellになるともっと進んでいて、セミコロンは演算子なのだそうだ!
「前の処理で作られた環境を、次の処理へ受け渡す演算子」だと考えるんだって。うへぇ。


以前聞いた話なんだけど、プログラミング言語の文法にセミコロンがあると、コンパイラーは楽を出来るらしいんだよね。

文の末尾に必ずセミコロンがあるという文法になっていれば、文の途中で解釈できなくなってコンパイルエラーになったとしても、セミコロンが来れば、解釈をリセットして、続きをコンパイルすることが出来る。

個人的には、Scalaの以下のようなトラップを考えると、セミコロンくらい付けてもいーじゃんと思う。

val v = 1
           + 2

→vは(3ではなく)1。

Scalaは改行で文を終えることが出来るので、明確に続いていると分かる場合(行の末尾が+演算子になっているとか)でない限り、そこで文を終了させる。

JavaやC言語なら、以下のように途中に改行があってもvは3になる。

int v = 1
           + 2;


最新の画像もっと見る

コメントを投稿