• ベストアンサー

return (A && B) || 0;

下記コードはどういう意味でしょうか? ・piyo[b] と piyo[b][a] または 0を返す? ・条件分岐もないのに? ・もしかして条件式を返す? ・あるいは、piyo[b] と piyo[b][a] を返す。または 0? ・ビット演算子? hoge = function(a, b) {  return (piyo[b] && piyo[b][a]) || 0; };

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

  • ベストアンサー
  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.3

意味は「piyo[b][a]に入っている数値を安全に返したい」です もしpiyo[b]が未定義ならpiyo[b][a]にアクセスしようとするとエラーになってしまいます そのためまず、piyo[b] && piyo[b][a]で、piyo[b]が真、つまりオブジェクトならば、piyo[b][a]を評価します。 つまりpiyo[b] && piyo[b][a]はundefinedか、piyo[b][a]になることが期待できます 次に||0で、偽ならば0を返します つまり、piyo[b]が未定義のときのundefinedや、piyo[b][a]が未定義のときのundefined、また、piyo[b][a]が0のときは偽と評価されるので0になります。 以上より、piyo[b] && piyo[b][a] || 0はpiyoの構造がある程度しっかりしてなくとも、安全に数値(初期値0)を返すことができます。 ただし、完璧に保証できるわけではありません。 例えば、piyo自体がnullやundefinedになる危険性がある場合はさらなるチェックが必要です。 よってこのコードからは、piyoは二次元数値配列であってほしいのだけど、添字が事前にわからないため、最初は一次元配列としてしか初期化していなくて、あとから追加していく形、でも取得するときは、まだ追加されていないときでも、安全に0を返したいのだと分かります。

re97
質問者

お礼

詳細な解説ありがとうございました。 説明とても分かりやすかったです。 大変勉強になりましたー

その他の回答 (5)

  • tracer
  • ベストアンサー率41% (255/621)
回答No.6

もう既に答えが出ているので、私はそもそも論を展開します。 なぜ、こういう質問が出るのかといえば、re97さんがデバッグ(確認)の方法を知らないからです。 hoge = function(a, b) {  return (piyo[b] && piyo[b][a]) || 0; }; ならば、 console.log(hoge(1,2)); たったこれだけの記述で、何が返されるか確認できるため、箇条書きにされた疑問はほぼ解決します。 参考までに。

re97
質問者

お礼

参考情報ありがとうございましたー

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.5

A && B は、Aが真の時に B と、そうでないときには A と評価される式です。 例えば、Aが真なら return A && B; はBを返します。 A || B は、Aが真の時に A と、そうでないときには B と評価される式です。 例えば、Aが真なら return A || B; はAを返します。 その式がやりたいことは、ANo.3の説明の通りでしょう。 > ANo.4 > それならば、個人的には以下をオススメします。 > !!(piyo[b] && piyo[b][a]) それだと piyo[b][a] に 1 とか 10 とかが入っていても 全部trueが返ってきてしまいます・・・。 return (piyo[b] && piyo[b][a]) || 0; なら piyo[b][a] に 1 とか 10 が入っていれば ちゃんと 1 とか 10 を返してくれます。

re97
質問者

お礼

回答&補足ありがとうございました >A && B >A || B ・この部分をよく理解できていなかったことに気がつきました ・説明分かりやすかったです ・参考になりましたー

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.4

簡単に言えば piyo[b] が「存在」し true と評価できる値 piyo[b][a] が「存在」し true と評価できる値 ならば → piyo[b][a] の値 (true と評価できる) でなければ → 0 (false と評価できる) を「安全に」返す関数 hoge です 論理和 || を併用する意味ですが、 false と評価できる値を、 副作用なく簡単に作り出すためかと思いますが... それならば、個人的には以下をオススメします。 !!(piyo[b] && piyo[b][a])

re97
質問者

お礼

回答ありがとうございましたー

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

う~~んと  false || 0 は0を返すかと…

re97
質問者

お礼

回答ありがとうございましたー

回答No.1

(A):piyo[b] && piyo[b][a]の論理積の結果 (B):(A)と0の論理和 (B)の結果をreturnします。trueかfalseしかreturnしません。

re97
質問者

お礼

回答ありがとうございました >(B)の結果をreturnします。trueかfalseしかreturnしません ・参考になりましたー

関連するQ&A