電子書籍の厳選無料作品が豊富!

http://zapanet.info/blog/item/1125
このサイトでテトリスのプログラムを参考にしているのですが
途中にある、

d=K-37?1:-1
// d:x方向の差分

f+=Z[h+E[i]+d]==S;
// 移動先が空白かどうか

f?0:h+=d;
// すべて空白なので移動決定

の記述の意味がよく分かりません。
if文か何かを省略した書き方なのでしょうか?
具体的には、

d=K-37?1:-1
クエスチョンマークとコロンが何を示すのかよく分からない

f+=Z[h+E[i]+d]==S;
[]内は、配列と思われますが そのあとにそれに対して
==があるのがよく分からない。(if文の省略書き??)

f?0:h+=d;
おなじくクエスチョンとコロンの意味がよく分からない

よろしくお願いします。

A 回答 (2件)

#1の方の解答を先にお読みいただいた上で。


条件演算子はifとおきかえれますので、
d=K-37?1:-1

if(K!=37){d=1}else{d=-1}//数値のa!=bはa-bで代替可能
とかになります。

f?0:h+=d;

if(!f)h+=d;
とか。

d=・・・のように、値を選ぶのが初歩的な使い方ですが、
f?0:・・・のように、処理を切り替えるのにも使えます。
ショートコーディングにおいて、if,elseを使うのは避けられます(長いから)ので、
条件演算子を知らないうちにショートコーディングに手を出したのは若干失敗ですね。


>>[]内は、配列と思われますが
誤解。
a=[0,1,2]のように[]の前に変数名になりうるものが無ければ配列になりますが、
Z[ ]の形ですので、Zという配列の(h+E[i]+d)番目の値を参照しています。
この値が仮に0だとすると、f+=Z[0]==S;は、
(Z[0]==S)がZ[0]とSが等しいかによってtrue、false(数値では1、0に相当)のどちらかを返し、
変数fに加算しています。
Z[0]とSが異なる場合、f+=0で、加算されているけど変化無し、という感じです。


http://d.hatena.ne.jp/Ozy/20071101
最後のコメントで、6行のテトリス乗せてあります。
(innerHTML→innerText、<br>→\n で、もう2バイト縮むんですけどね。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2010/02/14 19:54

var x = (1 == 1) /* ==は値を返す演算子で、xはtrueになる */



if ( 1 == 1){
}
ってのは条件を書いているというよりも
if (true){
}
という状態に持ってっていると考える。

x = (y == 1) ? 1 : 0; /* 条件演算子(11.2 Conditional Operator) */
http://ja.wikipedia.org/wiki/%E6%9D%A1%E4%BB%B6% …

代入演算子も値を返す演算子。= とか +=とか
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2010/02/14 19:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!