問題タブ [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.
php - 2番目の部分がtrueでチェックされている場合はPHPですか?
私はこれが単純な質問でなければならないことを知っていますが、PHPではこのようなステートメントでそれを知っています
$ aがfalseの場合、PHPは$bもチェックしません
ORについても同じことが言えます。
$ aが真の場合でも、$ bをチェックしますか?
これは初歩的なものだと知っていますが、どこにも答えが見つかりません...ありがとう
php - 「&&」と「and」の違い : 演算子の優先順位と短絡
私はphp.netの演算子の優先順位セクションを調べていて、この例に出くわしました
コード内のどこにいるかを追跡するために、コード内で非常に多くのデバッグおよび詳細な print(_r) ステートメントを使用します。$debug and print_r($dataArray)
そのため、コード間でorを別のステートメントとして使用$verbose and print "Updating dataArray\n"
して、これらの print(_r) ステートメントを制御できるようにしています。これは、多くの[[ $condition ]] && { #Do if true } || { #Do if false }
. BASH では、それらが短絡していることを知っていたので、この事実を利用して多くの単純なワンライナーを書きました。
今、私はこの(書くことの)練習の多くが私の声明$verbose and print
にゆっくりと忍び寄っていることを観察しています. これは推奨される方法ではなく、背中を噛まれる可能性があるif
ことは承知しています。しかし、私はこのようなワンライナーを書くのが好きで、自分のスタイルとして使いたいので、このスキルをマスターしたいと思っています.
だから私の質問は(ある)です:
- 短絡している演算子 (
&&
または) はどれですか?and
- マニュアルには
&&
よりも優先されると書かれていますand
が、短絡した演算子の機能/機能/特性と演算子の優先順位を組み合わせることで、誰かがこれを例示できます。(基本的には優先順位とショートサーキットの組み合わせ)
演算子の短絡と戻り値の性質の両方について詳しく説明してください。
PS: 1. これらの演算子の結合性が同じで直感的であることを願っていますが、何か癖があれば教えてください。
PS: 2. そのような慣習の危険性について私に警告したい場合は、親切に例を含めてください。
編集:単純な$var = mysql_(...) or die()
コードを に置き換えor
て変更した後、 andの代わりにand演算子||
を使用するのがいかに厄介であるかを発見しました。コードは単に機能しませんでした! 私の理解では、前者の構造はorの戻り値を に代入し、それが警告/エラー/予期しない動作を生成するために を順次使用します。後者の構文は、最初に の結果を代入し、次に と の複合を評価します。
これは私にとって良い教訓です。1. PDO/mysqli の使用を開始し、自分でエラーを処理します 2. 上記で個人的なスタイルとして呼び出したものを書く前によく考えてください||
&&
and
or
TRUE
FALSE
$var
$var
mysql_(...)
$var
=
die
.
//自分へのメモ : あるスクリプト言語やインタープリター言語の経験を別の言語で書いているときに使用しないでください。それぞれがユニークで、独自の癖や落とし穴があります。
c++ - 短絡と括弧
単一の短絡演算子を処理するときに部分式をグループ化する方法は重要ですか?
上記の式は同等ですか?
sql - 短絡なしまたはOracle関数との?
スーパーユーザー/管理者がシステムにログインできるようにするために、次のクエリ(の大きいバージョン)を実行しています。
ユーザーIDを渡すと、そのユーザーのすべてのデータを取得します。文字列「Admin」を渡すと、すべてのデータが取得されます。これは、OracleのORが短絡演算子であるために機能します。
ただし、「Admin」をパッケージ定数にして、次のような関数で取得すると、
ORA-01722: invalid number
'Admin'を渡すと取得します。
関数を導入すると、ORが短絡の側面を失うのはなぜですか?
php - Javascriptは、PHPのように短い3値(ではなく、のバリエーション)をサポートしていますか?
私は、2番目の式を省略して、「短い三元」に対するPHPのサポートが好きになりました。
Javascriptはこのような構文をサポートしていますか??:
構文エラーが発生しようとしました。私はブール短絡を認識していますが、それは私が現在行っていることには実行可能ではありません。それは:
助言がありますか?(すぐに呼び出される無名関数でラップすることもできますが、それはばかげているようです)
python - Perlのイディオムに相当するPythonは、これまたはそれを実行します。通常、「または死ぬ」として知られていますか?
Perlでは、のようなことをするのは非常に一般的ですfunction() || alternative()
。最初の値がfalseを返す場合、2番目の値を実行します。
これをPythonで簡単に実装するにはどうすればよいですか?
アップデート
例(擬似コード):
可能であれば、ソリューションはPython2.5以降で機能するはずです
注:func()を変更して例外を発生させたり、ラッパーを記述したりすることはできないという暗黙の前提があります。
evaluation - 短絡評価に頼るのは良い設計ですか?
より好ましい代替手段はありますか?
sql-server-2008 - SQL 2008: 不要な場合にクエリでフルテキスト ルックアップを禁止する
この特定の状況に取り組んでいることから、論理演算子が SQL で短絡していないことがわかりました。
私は通常、where 句で次の行に沿って何かを行います (通常は検索クエリを処理するとき)。
この例では短絡していなくても、実際には問題ではありません。ただし、全文検索関数を扱う場合は問題になります。そのクエリの 2 番目の部分が の場合、CONTAINS(myTable.Description, @Description)
これらの関数では変数を null または空にすることは許可されていないため、機能しません。
WHEN
のステートメントが順番に実行されることがわかったCASE
ので、次のようにクエリを変更して、必要な場合にのみフルテキスト ルックアップが呼び出されるようにし、変数を null から null の'""'
場合に変更してクエリを実行できるようにします。
上記のコードは、実際に検索する値がない限り、フルテキスト クエリ ピースが実行されないようにする必要があります。
私の質問は、 @Description が'""'
であるこのクエリを実行すると、そのテーブルと検索がまったく使用されなくても、クラスター化されたインデックスのシークと fulltextmatch の処理に費やされる実行計画にかなりの時間がまだあるということです。これを回避する方法はありますか?
これをハードコードされた動的クエリからストアド プロシージャに取り込もうとしていますが、プロシージャが遅くなった場合、それを正当化できるかどうかわかりません。
language-agnostic - 短絡乗算のようなものはありますか?
論理式の短絡については誰もが知っています。
条件が真になるmyFunc()
方法がないため、わざわざ実行する必要はありません。if
あなたの毎日の代数方程式に相当するものがあるかどうか、私は興味がありました。
C=0
最初の項を評価する意味がない場合。x
とy
がスカラーである場合、パフォーマンスに関してはあまり問題になりませんが、それらが大きな行列であり、操作にコストがかかる (そして行列に適用できる) 場合、確かに違いが生じます。もちろん、if C!=0
ステートメントを挿入することで、このような極端なケースを回避できます。
だから私の質問は、そのような機能が存在するかどうか、そしてそれが役立つかどうかです. 私はあまりプログラマーではないので、おそらく私が出会ったことのない名前でそうしています。もしそうなら、私に教えてください:)
optimization - Clojureには短絡ロジックがありますか?
多くの言語では、
foo()がtrueを返す場合、bar()とfoobar()は評価されません。
次のClojureコードがあるとします。
aがtrueと評価された場合、bとcも評価されますか、それとも無視されますか?
ありがとう!