問題タブ [short-circuiting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SQL の VB AndAlso と同等ですか?
SQL (SQL Server 2005) でVB のAndAlso
/OrElse
および C#の&&
/に相当するものはありますか。||
次のような選択クエリを実行しています。
たとえば、"@a" パラメータが NULL として渡された場合、WHERE 句の 2 番目の部分 (a = @a) を評価しても意味がありません。特別な構文を使用するか、クエリを書き直すことで、これを回避する方法はありますか?
ありがとう、ジェームズ。
coding-style - 短絡コードを使用する理由
関連する質問:短絡評価を使用する利点、言語が短絡評価を使用しないのはなぜですか? 、誰かがこのコード行を説明できますか? (論理演算子と代入演算子)
短絡コードを使用する言語の利点について質問がありますが、プログラマーにとっての利点は何ですか? コードをもう少し簡潔にすることができるというだけですか? それともパフォーマンス上の理由がありますか?
とにかく 2 つのエンティティを評価する必要がある状況については質問していません。たとえば、次のようになります。
私には、そこにある理由は明らかです。両方が真である必要があるため、ユーザーがデータを保存できない場合は、よりコストのかかるモデル検証をスキップできます。
これには(私にとって)明らかな目的もあります。
strlen()
文字列以外の値で呼び出すのは賢明ではないためです。
私が疑問に思っているのは、他のステートメントに影響を与えない場合の短絡コードの使用です。たとえば、Zend アプリケーションのデフォルトのインデックス ページから:
これは次の可能性があります。
または、単一のステートメントとしても:
では、なぜ短絡コードを使用するのでしょうか。制御構造の代わりに論理演算子を使用するという「かっこよさ」のためだけに?ネストされた if ステートメントを統合するには? 速いから?
sql-server - 'OR'を使用するSQLSERVER式のすべての部分が評価されますか?
与えられた:
@Idがnullの場合:式はtrueと評価されます。2番目の部分@Id=Table.Idは引き続き考慮されますか?または、最初の部分が真であるとすると、式がtrueと評価されるだけで十分です(これはc#の場合です)。
これは、すべての部分が評価されているかどうかを知ることが重要な、はるかに複雑なORステートメントのために関連しています。
アップデート:
それ以来、この構文が良い代替手段であることがわかりました
c++ - ブール値の C++ 短絡
私は c++ が初めてで、コンパイラがブール値の遅延評価を処理する方法に興味があります。例えば、
A が 1 の場合、B==2 の部分は評価されますか?
java - Java短絡評価
Javaには短絡評価があると思いましたが、この行はまだヌルポインター例外をスローしています:
この場合perfectAgent
はnull
であるため、式全体が を返すようにしたいのですfalse
が、この行で NullPointerException が発生してアプリがまだクラッシュしています。
編集、一般的な応答:
perfectAgent
isであるため、式が true になることはあり得ないため、 の右側にあるものは実行されませんnull
。さらに言えば、有効な参照が含まれていないため (null ですべて)、実行&&
することはできません。別のステートメントでnullをチェックする必要がないように、短絡評価を使用しようとしています。これにより、ロジックがより雑になります。perfectAgent.getAddress()
perfectAgent
編集2(または、私はばかです):ええ、人生の多くのことと同様に、自分がバカだと世界に発表した直後に答えを見つけます. この場合、何か他のことをしているときに Eclipse の自動ビルドをオフにし、オンに戻さなかったので、ソースと一致しないクラス ファイルをデバッグしていました。
c# - メソッド呼び出しで自分自身の短絡を強制できますか?
一連のオブジェクトをチェックして、どれも null でないことを確認したいとします。
可変数の引数を受け入れ、この種のチェックを簡素化するヘルパー関数を作成することは魅力的な見通しです。
次に、上記のコードは次のようになります。
右?違う。obj
が null の場合、NullReferenceException
に渡そうとするとobj.Parameters
が取得されNoNulls
ます。
したがって、上記のアプローチは明らかに見当違いです。しかし、演算子if
を使用したステートメント&&
は短絡されているため、問題なく機能します。だから:メソッド内で明示的に参照されるまでその引数が評価されないように、メソッドを短絡させる方法はありますか?
objective-c - Objective-C は短絡評価を使用しますか?
私は次の行に沿って何かを試しました:
そして得た:
-[NSNull 長さ]: 認識されないセレクターがインスタンスに送信されました
最初の条件が失敗した後、Objective-C は短絡しませんか?
sql-server - SQL クエリ実行のショートカットまたはロジック?
私は3つのテーブルを持っています:
SmallTable
には、せいぜい数十件のレコードしかありません。BigTable
数百万あり、実際には、このデータベースのテーブルを同じサーバー上の別のデータベースのテーブルと UNIONS するビューです。
結合ロジックは次のとおりです。
平均結合サイズは数千の結果です。表示されるものはすべて索引付けされています。
ほとんどのSmallTable
レコードでは、flag1
とflag2
が に設定されて1
いるため、BigTable.text1 のインデックスにアクセスする必要さえありませんが、SQL Server はアクセスするため、コストのかかるインデックス スキャンとネスト ループが発生します。
との両方が に設定されている場合flag1
、を気にする必要がないことを SQL Server に示唆するより良い方法はありますか?flag2
1
text1
実際、これらの場合に BigTable への結合を完全に回避できれば (JoinTable は管理されているため、問題は発生しません)、このキー クエリはさらに高速になります。
java - Javaに条件付き演算子と条件付き演算子の複合代入バージョンがないのはなぜですか?(&& =、|| =)
したがって、ブール値の二項演算子の場合、Javaには、、、、および&
があります。|
^
&&
||
ここで彼らが何をしているのかを簡単に要約しましょう:
の場合
&
、結果の値はtrue
、両方のオペランド値がtrue
;の場合です。それ以外の場合、結果はfalse
です。の場合
|
、結果の値はfalse
、両方のオペランド値がfalse
;の場合です。それ以外の場合、結果はtrue
です。の場合
^
、結果の値はtrue
、オペランド値が異なる場合です。それ以外の場合、結果はfalse
です。
&&
演算子は似&
ていますが、左側のオペランドの値が。の場合にのみ右側のオペランドを評価しますtrue
。
||
演算子はに似|
ていますが、左側のオペランドの値が。の場合にのみ右側のオペランドを評価しますfalse
。
現在、5つすべてのうち、3つには複合代入バージョン、つまり、、|=
およびが&=
あり^=
ます。だから私の質問は明白です:なぜJavaは同様に提供&&=
しないのですか?||=
必要以上に必要だと思い&=
ます|=
。
そして、Javaにはがありますので、「長すぎるため」は良い答えではないと思います>>>=
。この省略にはもっと良い理由があるに違いありません。
15.26代入演算子から:
12個の代入演算子があります。[...]
= *= /= %= += -= <<= >>= >>>= &= ^= |=
&&=
と||=
が実装された場合、最初に右側を評価しないのはそれだけであるというコメントがありました。複合代入演算子が最初に右側を評価するというこの概念は誤りだと思います。
フォームの複合代入式は、
E1 op= E2
と同等ですE1 = (T)((E1) op (E2))
。ここT
で、はのタイプですが、 1回だけ評価されるE1
点が異なります。E1
NullPointerException
証拠として、次のスニペットは、ではなく、をスローしArrayIndexOutOfBoundsException
ます。