C言語の条件評価 if文とswitch文

プログラミングC言語

C言語の条件評価であるif文とswitch文を説明します。

if文とswitch文

条件評価はif文とswitch文の2通りあります。

オブジェクト指向の考え方に慣れているとswitch文の存在を忘れます。実際、switch文が存在しないプログラミング言語も多数です。

>>> 【オブジェクト指向の考え方】オブジェクト指向は滅びたのか、定着したのか

if文、switch文の使用方法を説明します。

if文の中の式 条件

他プログラミング言語にはbool型という型がありますが、C言語にはbool型はありません

信じられないかもしれませんが事実です。じゃぁif文の条件の式は何を返すか?int型です。

0が偽でそれ以外が真です。

「0が偽、1が真」ではないのです。0でなければ真です。2も3も-1もすべて真の扱いです。C言語を学ぶ人は気を付けましょう。

比較演算子

if文の式としては比較演算子が最も基本的です。

x == y  // 等しい
x != y  // 等しくない
x < y   // より小さい
x > y   // より大きい
x <= y  // 以下
x >= y  // 以上

評価順序は覚えなくていい..と思います

どの演算子が先に評価されるとか順番が決まっていますが、覚えなくていいと思います。カッコ()をたくさんつけましょう。評価順番を正しく知っていてもカッコ()を付けた方がいいです。

例えば、以下の式はどちらの積りでしょうか?

x && y == 0  // 意図が分からない
(x && y) == 0
x && (y == 0)

どちらかが正しいんですが、調べる必要も覚える必要もありません。カッコ()をつけてください。

正しい意図であればカッコ()を付けなくていい、という考え方は賛同できません。どちらが正しいかを正しく把握しても、誤解を防ぐためにカッコ()はつけた方が良いと思います。

※評価順序を覚えて、積極的にカッコ()をつけない、という方もいらっしゃいます。筆者個人の見解です。

判断する関数

何かを判断する関数は、isXXXX()のようにisで始めるのが慣例です。

int isActive(); //activeなら1、そうでないなら0を返す

int型がつらいです。他言語に慣れるとなぜbool型がないのか理解できなくなってきます。

if文

if文の文法

if文の使い方は以下が基本です。

if (条件式){
    //何かやる
} else {
    // 他の何かをやる
}

elseは省略可能です。また、elseの後にifを付けて再び判定するのもありです。

つまり、以下のような文を書くことが可能です。

if (条件式){
    // 何かやる
}

if (条件式1){
    // 何かやる
} else if (条件式2){
    // 何かをやる
} else if (条件式3){
    // 何かをやる
} else {
    // 最後に何かをやる
}

if (条件式1){
    // 何かやる
} else if (条件式2){
    // 何かをやる
} else if (条件式3){
    // 何かをやる
} 

else if を何度も重ねるのは見にくいのと、Jeff Bayのオブジェクト指向の精神に反するのでなるべくやめましょう。

※また、中カッコ{}は省略可能ではあるんですが、省略することなんか考えない方がよいです。バグを生み出す可能性はなるべく刈り取りましょう。個人の見解です。

3項演算子?:はいらない..と思います

3項演算子?:がif文の代わりとなります。

以下の式では、条件式1がtrueなら条件式2がfalseなら条件式3が実行されます。

条件式1 ? 条件式2 : 条件式3

以下のif文と同じです。

if (条件式1){
    条件式2
} else {
    条件式3
}

例えば、以下のように負なら0、正なら1になる有名なヘビサイド関数です。

int heaviside(int x){
    return (x < 0) ? 0 : 1;
}

3つの式を1行に書くわけですから情報量が多いです。それぞれが長くなると非常に見にくいので、1行で書けないならif文で書いた方がよいと思います。

例えば上記のヘビサイド関数は以下でいいのはないでしょうか?

int heaviside(int x){
    if (x<0){
        return 0;
    }
    return 1;
}

個人的には3項演算子は禁止してif文だけにしてほしいです。

※積極的に3項演算子を使う人はいます。筆者個人の見解です。

swithch文

switch文の文法

switch文の使い方は以下です。

switch (式) {
    case 定数式1 : 
      // 何かやる
    case 定数式2 :
            // 何かやる
    default :
            // 最後に何かやる
}

注意があります。case文が終わって次のケースに行くならbreak;をつけないといけません。

以下のように覚えた方がよいです。

switch (式) {
    case 定数式1 : 
      // 何かやる
            break;
    case 定数式2 :
            // 何かやる
            break;
    default :
            // 最後に何かやる
            break; //この最後のbreakは不要だがいつも付ける癖をつけた方がよい
}

breakを書かないと次のようにcase文の2つともが実行されてしまいます。

switch (式) {
    case 定数式1 : 
      // 何かやる
            // breakを忘れると、次の行が実行されます
    case 定数式2 :
            // 何かやる
            break;
    default :
            // 最後に何かやる
}

この言語仕様は、個人的にいやですね。breakを忘れるとバグですからね。

「breakしないでいいときだけnobreakとする」の方が分かりやすいと思いますが、決まりなので仕方がありません。breakを忘れないようにしてください。

まとめ

C言語のif文、swith文を説明しました。

>>> いろいろなプログラミング言語の条件評価 if文など

>>> 今日を生き抜くプログラミングの知識 C言語の知識

コメント

スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
タイトルとURLをコピーしました