いきなりですが、三項演算子、皆さん使ってますか~~??
条件分岐には、「if-else」や「switch」を多用しがちですが(←かく言う私も、その内の1人^^;)、
たまには、三項演算子も愛してあげよう! というお話です。
三項演算子をネストさせることにより、switchの代わりに使うこともできます。
↓↓こんな感じ↓↓
result = (n == 0 ? 0処理
: n == 1 ? 1処理
: n == 2 ? 2処理
: デフォルト処理);
ちなみに、三項演算子を使用する際は、?と:は縦に揃えて書くのがマナーなんだそうです。
(ご存知でしたか??)
そ~いえば、自らつけた「if-else, switchの使用禁止、条件分岐は全て三項演算子で行うこと」という制約下で、
コードをかいてた猛者(変人?)は知ってます。
まぁ、コードが読み辛くならなければ、何使って条件分岐しようが、関係ないんでしょうかね??^^;)
次に、ちょっぴり面白い三項演算子の小技をご紹介します。
#include <stdio.h>
#include <time.h> // for time()
#include <stdlib.h> // for srand()
int main(void)
{
int i, a, b;
a = 0;
b = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; i++) {
a = b = 0;
* ( (rand() % 2 == 0) ? &a : &b) = rand();
printf("%6d %6d\n", a, b);
}
return 0;
}
変数a, bのどちらかにランダムな値を、もう一方には0をセットするプログラムです。
実行結果は以下の通り
三項演算子を使用し、代入先の変数を切り分けているのがトリッキーです^^;)
ちなみに、
* ( (rand() % 2 == 0) ? &a : &b) = rand();
の部分は、
( (rand() % 2 == 0) ? a : b) = rand();
だと、コンパイルエラーになりますよ~。