• ベストアンサー

javascript 省略した記述と思われる部分の意味が分からない

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; おなじくクエスチョンとコロンの意味がよく分からない よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 15mm
  • ベストアンサー率65% (65/100)
回答No.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バイト縮むんですけどね。)

yuzuru0024
質問者

お礼

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

その他の回答 (1)

回答No.1

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%E6%BC%94%E7%AE%97%E5%AD%90 代入演算子も値を返す演算子。= とか +=とか

yuzuru0024
質問者

お礼

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

関連するQ&A