「if文の書き方」の版間の差分

提供: C言語入門
移動: 案内検索
(if文はブレースで囲むことが好まれる)
 
行144: 行144:
 
if (flag) {
 
if (flag) {
 
s = "OK";
 
s = "OK";
else {  
+
} else {  
 
s = "NG";
 
s = "NG";
 
}
 
}

2018年3月19日 (月) 20:44時点における最新版

プログラムは条件分岐をたくさん使って作られています。C言語では、条件分岐はif文を使って、作られます。

読み方

if文
いふぶん

概要

C言語の if文 とは、条件分岐に利用されます。 プログラムは、たくさんの条件によって動作が分岐していきます。

if文は、

  • if
  • else if
  • else

を使って、表現します。

if文の例

単純な if の例を紹介します。 条件式が真であれば、「処理」が実行され、そうでなければ、何も起こりません。

if (条件式) {
	処理;
}

例えば、以下の例では、変数 argc が 2 以上のとき、「処理」が実行されます。

if (argc >= 2) {
	処理;
}

条件には、関数を使うこともできます。 func が 0 以外であれば、処理が実行されます。

if (func() ) {
	処理;
}

条件式は、復数の条件を書くことができます。 例えば、 i が 2 で、かつ、 j が 3 のとき、といった条件を書けます。

if ( (i == 2) && (j == 3) ) {
	処理;
}

条件は、括弧で囲むことで、人間が読みやすくなります。 if 文は == 、&& 、||、!=、>、< などで条件を記述できますが、それらは評価の優先度があります。書き方によっては、結果的にプログラマの意図しない評価がなされることになります。人間の読み良すさと、予期せぬ評価がなされないために、if の括弧の中の式にも括弧をつけることをお勧めします。

if文はブレースで囲むことが好まれる

if文は、ブレース( {, } ) で囲まれることを好まれます。 例えば、if文は、以下のようにブレースを省略できます。 たとえば、if文単体では、このようになります。

if (条件式)
	処理;

if, else if, else だと以下のようになります。

if (条件式1)
	処理1;
else if (条件式2)
	処理2;
else
	処理3;

しかしながら、

if (条件式)
	処理;

は、

if (条件式) {
	処理;
}

と書くことを好まれます。

一説によれば、処理をあとから追加したくなったときに、以下のように書いてしまったとします。

if (条件式)
	処理1;
	処理2;

しかしながら、上記のコードは

if (条件式) {
	処理1;
}
処理2;

ということであり、条件式に依存せず、必ず、処理2が実行されます。

あとからコードを追加したときに、プログラムが想定外の動作をさせないために、安全のためにブレースをつけることが望ましいとされています。

しかしながら、これらは、コードの規約に依存することです。 コードの規約が、ブレースなしの省略を許している場合においては、ブレースをつけなくても良いでしょう。 規約がまだない、もしくは、規約をあなたが決められるのであれば、ブレースをつけて書くことをお勧めします。

ifとelseの例

条件式が真であれば、処理1を実行します。条件式が偽であれば、処理2が実行されます。

if (条件式) {
	処理1;
} else {
	処理2;
}

ifとelse ifの例

条件式1が真であれば、処理1を実行します。条件式1が偽で、条件式2が真であれば、処理2が実行されます。

if (条件式1) {
	処理1;
} else if (条件式2) {
	処理2;
}

ifとelse ifとelseの例

条件式1が真であれば、処理1を実行します。条件式1が偽で、条件式2が真であれば、処理2が実行されます。 条件式1が偽で、条件式2が偽で、処理3が実行されます。

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

if文は入れ子にできる

if文は、if文を入れ子にすることができます。
if (条件式1) {
	処理1;
	if (条件式2) {
		処理2;
	}
}

三項演算子

if文の省略形として、三項演算子 と呼ばれるものがあります。 例えば、以下のコードは、

char *s;
if (flag) {
	s = "OK";
} else { 
	s = "NG";
}

三項演算子によって、

char *s = flag ? "OK" : "NG";

と簡単に書くことができます。

関連項目