ページ 1 / 1
このソースは簡略化できますか?
Posted: 2010年11月19日(金) 22:03
by LisetteLander
rend=GetRand(1);
if(rend==0){
rend==-1;
}
else{
rend==1;
}
rendにランダムで数値を1か0を入力し、
それぞれ符号を反転させるための変数として使います。
これ以上簡単になりませんか?
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 22:05
by LisetteLander
あ、すいません、==ではなく=でした。。
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 22:20
by たかぎ
何をもって簡単と考えるかによりますが、単に行数を短くしたいのであれば...
rend = (GetRand(1) << 1) - 1;
でどうでしょうか?
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 22:21
by みけCAT
GetRand(1)が0か1を返すのであれば
rend=GetRand(1)*2-1;
でどうですか?
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 22:27
by LisetteLander
解決しました!
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 22:27
by LisetteLander
みけCAT 様、たかぎ様、ありがとうございます!
みけCAT様ので実践してみます。
ぱっと出る発想すごいです・・・
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 23:02
by 白い時空
解決したみたいですが、とりあえず書いておきます。
みけCATさん、たかぎさんは数式で解決していますが、
if文は、?と:を使った条件演算子で短縮できます。
(条件式)?(真の時):(偽の時)という風に使います。
rend = GetRand(1)?1:-1;
今回の場合はこうなります。
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 23:24
by LisetteLander
白い時空様、レスありがとうございます。
えっと、?と:を使うことでif文と同じ効果がでるということでしょうか?
GetRandで取得した数値が1の場合真に分岐、-1のときに偽に分岐ということですか?
その場合、分岐したあとの計算式などはどこらへんに・・・
解釈その2として、1のときのみrendに格納するというのがあるのですが・・・
Re:このソースは簡略化できますか?
Posted: 2010年11月19日(金) 23:44
by box
>rend = GetRand(1)?1:-1;
は、
if (GetRand(1)) { /* if (GetRand(1) != 0) { のこと */
rend = 1;
}
else {
rend = -1;
}
と等価です。
Re:このソースは簡略化できますか?
Posted: 2010年11月20日(土) 00:14
by 白い時空
boxさん。補足ありがとうございます。
すいません。ちょっと、説明不足でした。
条件式がGetRand(1)だけになっていますが、
0は偽、それ以外の数字は真という決まりになっているので
GetRand(1)が1なら真、0なら偽として扱われます。
まあ、これも短縮する方法の一つですね。
?と:を使うこの方法は、今回のような簡単な分岐の場合に使用できます。
if文で代用可能なので、無理に使う必要はないですが、覚えておけば今回のように短縮できて便利ですね。
Re:このソースは簡略化できますか?
Posted: 2010年11月20日(土) 00:19
by LisetteLander
なるほど、ありがとうございました!