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文を説明しました。
コメント