プログラミング言語で必ず出てくるif文についてまとめました。自分がプログラムを書く上での備忘録を作成したかったので、ついでにブログも書いてみました。
はじめに
私は大学生の頃から科学技術計算系のプログラムを書いてきましたが、常々疑問に思うことがありました。それは「プログラミング言語多すぎじゃね?」ということです。基本的に出来ることは一緒なのだから、言語なんて2、3個あれば十分だと思っています。しかしながらプログラミング言語は現在も増えていて、挙句の果てには人気プログラミング言語のランキング表が注目されている状況です。幸いなことに私が得意とするC/C++は常にランキングの上位にあって、簡単には廃れることが無いでしょう。とは言え、機械学習などのAI関連の情報はPythonばっかりで、C/C++だけでは少々キツイのでPythonと組み合わせてプログラミングしています。それにしても1つのプログラミング言語で全てを処理できないのは生産性良くないなぁと感じます。
手続き型と呼ばれる一般的なプログラミング言語は制御構造が共通しています。つまりどの言語にもif文はあるし、for(do)ループもあります。私が納得いかないのはこの部分の文法が言語毎に微妙に異なることで、特にif文の違いは最悪です。例えばif文の一部で、C/C++、Python、Perlはそれぞれ”else if”、”elif”、”elsif”と書きます。ここが異なる意味って何かあるのでしょうか?正直、プログラミング言語開発者の嫌がらせとしか思えません。このような細かい違いを一々記憶していられないし、if文が出てくるたびにネット検索するのも面倒なので簡単な備忘録にまとめようと思ったわけです。
いろいろなif文
色々と愚痴めいたこと書きましたが、私がよく使うプログラミング言語を中心にif文を下の表にまとめました。一部の言語において論理演算子については”&&”などの記号に加えて”and”とかも使えるものもありますが、C言語の記述方式に統一しました。
言語 | if文 | 条件式 | 論理演算子 | ブロック |
---|---|---|---|---|
C/C++ | if ~ else if ~ else ~ | ()の中に記述 | &&, ||, ! | {}で囲まれた部分 |
Fortran | if ~ else if ~ else ~ end if | ()の中に記述 | .and., .or., .not. | thenとend ifに囲まれた部分 |
Python | if ~ elif ~ else ~ | 記述の最後に:を付ける | and, or, not | インデントした部分 |
Perl | if ~ elsif ~ else ~ | ()の中に記述 | &&, ||, ! | {}で囲まれた部分 |
Ruby | if ~ elsif ~ else ~ end | そのまま記述 | &&, ||, ! | thenとendに囲まれた部分 |
R | if ~ else if ~ else ~ | ()の中に記述 | &&, ||, ! | {}で囲まれた部分 |
Bash | if ~ elif ~ else ~ fi | []の中に記述して最後に;を付ける | &&, ||, ! | thenとfiに囲まれた部分 |
CMake | if(…) ~ elseif(…) ~ else() ~ endif() | ()の中に記述 | AND, OR, NOT | ifとendifで囲まれた部分 |
PHP | if ~ elseif ~ else ~ | ()の中に記述 | &&, ||, ! | {}で囲まれた部分 |
java | if ~ else if ~ else ~ | ()の中に記述 | &&, ||, ! | {}で囲まれた部分 |
javascript | if ~ else if ~ else ~ | ()の中に記述 | &&, ||, ! | {}で囲まれた部分 |
BASIC | If ~ ElseIf ~ Else ~ End If | 記述の最後にThenを付ける | and, or, not | ThenとEnd Ifに囲まれた部分 |
こうして見てみるとC言語と全く共通しているのはR、java、javascriptですね。惜しいのはPHPとPerlで、どちらも”else if”の記述が微妙に異なります。特にPHPでは”elseif”とスペースが無くなっているだけです。無理に空白1個を無くさなくても良いような気がするんですがねぇ… それとも字句解析する際の都合上、空白が無い方が良いのですかね?私の希望としてはif文の書き方については全てC言語に合わせて頂きたいところです。
終わりに
今回はif文の違いについてですけど、forループの違いも微妙です。ただループの場合はカウンタを利用して回す場合とイテレータを利用して回す場合とがあり、まとめるのが面倒だったので今回省きました。時間があるときにまとめてみようと思ってます。大体のプログラミング用エディタにはスニペットを登録する機能が付いています。この機能を使えば細かい事を記憶する必要が無くなるので、これを機にif文やforループについてのスニペットを地道に作成してみようと思います。
Category: プログラミング関連