ページ 11

このソースは簡略化できますか?

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
なるほど、ありがとうございました!