プレイ日記
ゆっき F-YUKKY
こういうIFの使い方でもOKということを初めて知りました!
8そうだね
プレイ済み
返信[1]
親投稿
駄目です。
0そうだね
プレイ済み
返信[2]
親投稿
その書き方だとエラーは出なくてもほとんどの場合思った通りに動きません。 その理由はコンピュータの気持ちになって考えれば分かります。 ……という冗談は置いといて コンピュータは式を左から順に計算します。 ==などは条件が成立すれば1、成立しなければ0という計算結果を返します。 なので、 まずA==Bが計算されて1もしくは0になります。 その後、A==Bの結果1もしくは0とCが比較されるため、変な結果になります。 テストで書くと無条件で不正解になるので気を付けましょう。
4そうだね
プレイ済み
返信[3]
親投稿
Soybeanman 2013niconico
こういちさん>>あああああああああああああ!!!!(ブリュリ(以下割愛) …は置いといて、 駄目ではないです。 確かに予想と違う事になるかもしれませんが、 エラーも吐きませんし大丈夫です。 ちなみに投稿画像と、私のコメント画像は同じ動作をします。
1そうだね
プレイ済み
返信[4]
親投稿
Soybeanman 2013niconico
画像張り忘れた…
1そうだね
プレイ済み
返信[5]
親投稿
ゆっき F-YUKKY
ご指摘ありがとうございます!
0そうだね
プレイ済み
返信[6]
親投稿
しんいち stgf1080
変わったIF文の書き方、って捉えちゃうと難しいと思っちゃうかも知れませんが、所詮は式、って言う認識が身に付くと、プログラミングの仕方の幅が広がるというか、簡単になると思います。 算術演算も比較演算も論理演算もビット演算も変数も定数も戻り値1つの関数も全部式。式は代入文(=)の右側に書くことができて、IF文とかの条件のところにも書くことができると。 IF 1 THEN ~ IF F THEN ~ IF A%/2 THEN ~ IF B*(C==5)>D THEN ~ IF SPVAR(0,0) THEN ~
2そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
A==Bのような等号や不等号を行った比較演算はtrue(成立時)の場合は1の値を返しfalse(不成立)の場合は0を返します。そして、IFは条件式部分の値が0以外ならばTHEN以下を実行するためIF A==B==C==D==E==F THEN ~を見てみるとまずAとBを比較して0か1の値になりその値を変数Cと比較して・・・ということを行っています。 そのため仮に「変数A~Fの値が0もしくは1の値しか取らない場合でA~Fの値がすべて1になっているかどうかを判定したい」ならばこのIF文は正しく動作します。 私ならば「変数A~Fの値が0もしくは1の値しか取らない場合でA~Fの値がすべて1になっているかどうかを判定したい」という場合は IF A*B*C*D*E*F THEN ~と記述してしまいますが・・・。
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
どんな記述方法であっても自分が想定している通りに動けばそれは正解であり、いくらきれいな記述であっても自分が想定しているように動かなければそれは不正解です。 したがって、自分が何をしたいのかが分かっていれば記述方法は無数にあり正解も無数にあるということです。(つまり、そのIF A==B==C==D==E==F THEN ~という1文を見ても正解か不正解かの判断をすることはできない) 完全に動作原理を把握する必要はありませんが、もしも「ちゃんと思った通りに動いているかさえ分からない」というのであればその記述は避けた方がいいでしょう。 余談ですが、プチコン3号の演算は基本的に左側から順番に処理されますが、構文解析は右から行わるため自作関数を使ってIF A()==B()==C()==D()==E()==F() THEN ~という判定を行うと予想外の結果になる可能性もあるので注意しましょう
1そうだね
プレイ済み
返信[9]
親投稿
ゆっき F-YUKKY
ありがとうございました!
0そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
おちゃめさん > プチコン3号の演算は基本的に左側から順番に処理されますが、 > 構文解析は右から行わる 構文解析については == は左結合つまり a==b==c は (a==b)==c と解釈される 実行順序というか評価順序は 構文木を作り時計回りで帰りがけ順に評価 になります。 この場合、 c を評価して b を評価して a を評価して 一個目の == を評価(演算)して 二個目の == を評価 となります。
0そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
MIKIさんへ 右から行われるのは「構文解析」ではなく「評価」でしたね。 プチコン3号では構文解析は実行した時点で中間コードへとコンパイルされるのでその際に行われています。 変数の評価は1つのIF文の中でどのような順番においても変わることはないのですが、関数の評価に関しては順番で変わる恐れがあるため注意が必要ということです。
0そうだね
プレイ済み