• ベストアンサー

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

  • 本文ではなく、returnへほとんどの処理を記述

    ・本文ではなく、returnへほとんどの処理を記述しているコードがあります ・どういう意図があるのでしょうか? ・複数の関数をreturnする関数が、たくさんあります ・どの関数も、関数本文より、returnする関数内容の方が何倍も多いです hoge = function(){  //中略   return {    a : function(){   },    b : function(){  //これが延々続く  //return関数内で即時関数実行したり ■質問1 ・処理の結果をreturnすると思っていたのですが、returnメインでそこに処理を記述していくやり方のメリットは? ■質問2 ・hoge.aでアクセスしているのですが、関数定義=オブジェクト定義でしょうか? ・下記aメソッドは、同じ意味? hoge = {  a: function(){ hoge = function(){  //中略   return {    a : function(){   },

  • &= ~0x0c; &= ~0x03; |=1;

    JavaScriptで分からないコードがあるので教えてください。 ■変数設定 var hoge = 0; ■変数格納 ・キーを押した時の条件分岐   ~なら hoge |= 1;   または hoge |= 2;   または hoge |= 3;   または hoge |= 8; ・キーを離した時の条件分岐   ~なら hoge &= ~0x0c;   または hoge &= ~0x03; ■変数使用 ・swithch文の条件分岐に利用   (hoge&0x03)   (hoge&0x0c) ■質問 ・どういう意味でしょうか? ・文字コード? ・ビット演算?

  • PHPのreturnについて

    function hoge(){ if(条件){ return false; } 処理A; return true;  } 上記のような場合if文内通ると、return falseするのでその後の処理Aは走らないですよね? 頭がこんがらがってきました・・・

    • ベストアンサー
    • PHP
  • ユーザー関数の外の変数は呼べない?

    以下のコードでpiyoを呼ぶには、hogeを渡すしかないのでしょうか? $hoge="piyo"; function func(){ echo $hoge; } func();

    • ベストアンサー
    • PHP
  • phpで配列の重複する項目を多い順に並べたいです!

    $a = array("hoge","piyo","hoge","banana","hoge","piyo"); ↓ $b = array("hoge","piyo","banana"); みたいな配列があったとき、上のように重複する項目をまとめて、 さらに多い順に並び替えるにはどのようなコードを書けば良いですか?

    • ベストアンサー
    • PHP
  • 関数から関数を呼び出したときのリターン処理について

    宜しくお願いいたします。 ユーザー定義関数からユーザ定義関数を呼び出す必要があり 以下の様にしてみたところ function chk($value) {    if ($value>0) {       return TRUE;    }    return FALSE; } function test(){    $a = 0;    $b = -1;    $c = 2;    $txt = '';    if (chk($a)) {       $txt .= 'aはhoge<br>';    }    if (chk($b)) {       $txt .= 'dはhoge<br>';    }    if (chk($c)) {       $txt .= 'cはhoge<br>';    }    return $txt; } 最初の chk($a) で処理が終わってしまいます。 この場合 chk() の return が test() をも止めてしまっているのでしょうか? return で調べて見ると 呼び出し元のスクリプトに戻る というような解説だったので test() に戻って処理の続きをしてくれる と思ったのですがうまくいきません。 これを return $txt; まで処理させるにはどのようにしたらよいでしょうか? できれば chk() をTRUE、FALSEの判定に使いたいと思います。 何卒ご教授のほどよろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHPにおいての関数ポインタ(リファレンス)の実装の仕方

    こんにちわ, 今PHP4.3.4を使用してWebを作成しています。 C言語で言う関数ポインタを実装したいのですが,どうすればいいのでしょうか。 たとえば, function hoge(){ return 5; } function hoge2(){ return 4; } function hoge3(){ return 3; } と宣言して function main($a, $b)[ return ($a + $b); } としたときに, main(hoge(), hoge2()); をしたときに9 main(hoge()2, hoge3()); をしたときに7 とするようにmainの関数をつくりたいのですが,どうすればいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • returnするには?

    下記のようなソースなのですがarray_walk_recursiveを使用しつつ値を returnするにはどうすればいいでしょうか? 可能であれば仕様上あまり構造変更なくできる方法がいいのですが・・・ class Test { public function hoge($arr){ if (is_array($arr)) { //↓をreturnすると1が返る array_walk_recursive($arr['types'], array($this, 'fuga')); } } function fuga($val){ //echo $val;とすると意図する値が渡っています switch($val) { case 'str': return $this->str();//ここの値が返らない } }

    • 締切済み
    • PHP
  • [(A∧B)→(¬A→B)]は恒真式になりますか?

    [(A∧B)→(¬A→B)]は恒真式になりますか? 真理値を演算してみたら、私側では写真のように全て1となり、恒真式になるんですけど。

  • phpで$a,$b,を%指定して表示させたい

    php で $a, $b, $c... をそれぞれして指定したパーセントの割合で表示させるプログラムを教えて下さい $a = 'hoge'; $b = 'huga'; $c = 'piyo'; $a は 10%, $b は 30%, $c は 60% といった具合に指定できつつ $d, $e... と続いても パーセント指定していけるような関数を作りたいです ご回答よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • iPadを使用しているのですが、iOS15にアップデートしたところ「プリンターが見つかりません」または「接続できません」とでてきてしまいました。iPhoneの方は14.7で使えています。
  • iOS環境で使用している複合機の無線LAN接続に問題が発生しています。iPadをiOS15にアップデートした後、「プリンターが見つかりません」または「接続できません」というエラーが表示され、印刷することができません。なお、iPhoneの方はiOS14.7のままで正常に使用できています。
  • iOS15にアップデートしたiPadで、複合機の無線LAN接続に問題が発生しました。エラーメッセージとして「プリンターが見つかりません」または「接続できません」と表示され、印刷ができません。一方、iOS14.7のままのiPhoneでは問題なく印刷できています。
回答を見る