プログラム言語には似たような命令がある。それはシンタックスシュガー!

プログラム言語を始めると出てくる疑問

プログラミングの学習を始めた時、シンタックスシュガーに混乱する事があります。
シンタックスシュガーとは糖衣構文の事です。
・・・・って書かれても分からないですよね。
異音同義語(っていう言葉あったっけ?類義語?だっけ?)みたいものです。

つまり、表現は違うけどできる事は同じって事です。

例えば、C言語ですが、

◆ifとswitch

if ( hoge == 0 )
{
    /* 処理Aを実施 */
}
else if ( hoge == 1 )
{
    /* 処理Bを実施 */
}
else if ( hoge == 2 )
{
    /* 処理Cを実施 */
}
else
{
    /* 処理Dを実施 */
}
switch ( hoge )
{
    case 0:
        /* 処理Aを実施 */
        break;
    case 1:
        /* 処理Bを実施 */
        break;
    case 2:
        /* 処理Cを実施 */
        break;
    default:
        /* 処理Dを実施 */
        break;
}

※シンタックスシュガーは他にもありますが例としてはこれだけにしておきます。

if命令とswitch命令では何が違うの?

同じです!
何にも変わりません。
微妙に使い心地が違いますけど、誤差だと思ってもらっていいでしょう。

じゃぁ、どっちを使えばいいの?

どっちを使ってもいいです。
書きやすい/使いやすい/見やすい/他人が見て理解しやすい/不具合を出しにくい方を使えばいいでしょう。

なんでシンタックスシュガーなんてあるの?

言語設計者に聞いてください(笑)

っていうのは冗談ですが、書き方は違うけど同じような命令があることで、その時々で便利な方を使う事ができます。
上で挙げたifとswitchの違いを言えば、switchの方は選択肢が増えても見やすい/書きやすいですよね。
ifの場合、else ifが増えると見づらくなりますし全てのelse ifに条件式を書かないといけないので面倒くさいですよね。
書く量が増えるということは間違えて書く確率が上がるってこと。
間違えて書く確率が上がるってことは不具合を埋め込む確率が上がってしまうということ。
じゃ、ifを使わず毎回switchを使えばいいじゃんと思うのはシロート!(笑 冗談です)

ifの場合、

if ( hoge == 0 )
{
    /* 処理Aを実施 */
}
else if ( hoge == 1 ) && ( fuga == 50 )		/* ←ココの条件がややこしい */
{
    /* 処理Bを実施 */
}
else if ( hoge == 2 ) && ( buka == 100 )	/* ←ココの条件がややこしい */
{
    /* 処理Cを実施 */
}
else
{
    /* 処理Dを実施 */
}

みたいな感じで細かい条件設定をできるのがメリット。

そういうメリットやデメリットを考えて命令を使い分けますが、得られる結果が同じならそんなにややこしく考えなくていいです。
使いたい方を使えばいいです。

『なんで同じような命令が2つも3つもあるねん!!?? ワケワカラン!!』

と思う事もあるでしょうけど、好きな方を使えばいいです。
なんやったら、一つの命令をひたすら使うのもアリです。
一つの命令をひたすら使い続けていると

『なんか○○な時にこの命令やと使いづらいなぁ・・・・』

と思うことがあるでしょう。
その時に新しい命令を覚えればいいと思います。

ってことで、同じような命令が出てきても気にしないでね。

オマケ

※意味が分からない場合は気にしないでください。
シンタックスシュガーは厳密に言うと生成されるアセンブラが変わる事がありますが(*1)、まぁアセンブラが変わったところで今時のコンピュータの処理能力なら誤差にもならないと言ってもいいでしょうから、影響なんて無いです。

*1:アセンブラが変われば処理速度が変わります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

Windows/Mac/Linuxを使う現役システムエンジニア&プログラマ。オープン系・組み込み系・制御系・Webシステム系と幅広い案件に携わる。C言語やC#やJava等数多くのコンパイラ言語を経験したが、少し飽きてきたので、最近はRubyやPython、WordPressなどのWeb系を修得中。初心者向けのプログラミング教室も運営中。オンライン・対面・出張等でプログラミングをレッスンします。