問題タブ [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.

0 投票する
8 に答える
6891 参照

php - 短絡を使用して最初の非null変数を取得する

PHPの以下(JSスタイルに基づく)に相当するものは何ですか?

したがって、ストーリーが存在する場合は、それを投稿してください。または、メッセージが存在する場合は、それを投稿するなど...

0 投票する
3 に答える
203 参照

compilation - プログラマーの承認が絶対に必要な最適化を提案できるコンパイラーはありますか?

人間をループに入れておけば、コンパイラーは意味論的に同等の厳密な最適化以上のことを行うことができますか?

意味的に同等でない可能性があるため、コンパイラによって完全に却下される潜在的な最適化がいくつかあります。

ただし、それらも問題ない可能性があるため、それらを検出して提案してみませんか? 検出には、コンパイル時の分析段階と実行時のプロファイリング段階の 2 段階のプロセスが含まれる場合があります。

エラー、警告、および... 提案はありますか?

コンパイラは、各コンパイル中にプールされるという意味で、「警告」と同様のことを既に行っており、コンパイラが満足するように対処するまでリストに永遠に留まります。同様の方法で機能し、アプリケーションのパフォーマンスを向上させる可能性がある「提案」または「提案された最適化」セクションを用意してみませんか?

コンパイラが複雑さ、推定実行時間、個々のオペランドが true と false の可能性などについてブール式を分析する場合、式オペランドのより良い順序などの提案のリストを作成し、提案を提示できます。プログラマへのリストとして。その後、プログラマーはそれらに個別に対処し、それらを無視することを決定するか、コードエディターに提案を実装させることができます。

ブール式のオペランド順序の最適化

「短絡論理式の最適化」を検討してください。オペランドの順序は、どのオペランドが「短絡」されるか (つまり、呼び出されないか) に影響するため、単純なブール式 (つまり、A && B && C) のオペランドの順序は、(私が思うに) コンパイラによって変更されないものです。オペランドに副作用がある場合に未知の副作用が発生するのを避けるため。

このことを考慮:

文字の比較は (より高速で複雑でない) ため、式の最初に来る必要があります。これにより、ショートサーキット ロジックは、コンマが検出されたときに IsStringPresent の呼び出しを回避できます。この場合、改行シーケンスよりもコンマ (1 行に複数) が頻繁に出現することも事実です。

概要

客観的には、「A && B」の式について、「短絡をトリガーするために A が false と B である頻度」と「A と B の計算コスト、より多くの短絡を優先する」に基づいて、最適なオペランド順序を決定できます。高価なもの」。コンパイラが、コンパイル時、実行時、またはその両方で、これらのいずれかのおおよその値を決定できる場合、特定の式が最適ではない可能性があると判断し、プログラマが実装するための提案された変更を作成できます。 .

今日、このようなことを行うコンパイラはありますか? そうでない場合、なぜですか?

0 投票する
1 に答える
595 参照

recursion - 短絡した演算子と末尾再帰

私がこのような単純な関数を持っているとしましょう:

この関数は、次のように、より明確な末尾再帰スタイルで書き直すことができます。

論理的には、2つの間にゼロの違いがあります。または(適切に定義された)boolsのみが含まれていると仮定すると、それらはまったく同じことを行います。TRUEFALSE

私の質問は、コンパイラが末尾再帰呼び出しとして2番目を最適化するのに十分賢い場合、「&&」が短絡していることを考えると、同じ方法で最初を最適化することを期待するのは合理的ですか?明らかに、非短絡演算子が使用された場合、演算子が適用される前に両方の式が評価されるため、これは末尾再帰ではありませんが、短絡の場合については興味があります。

(Cコンパイラは通常、末尾再帰呼び出しを最適化しないというコメントが殺到する前に、これは、言語に関係なく、短絡演算子を使用した末尾再帰呼び出しの最適化に関する一般的な質問だと考えてください。これをScheme、Haskell、OCaml、F#、Python、またはCを理解していない場合は、これまでにないもので書き直してください。)

0 投票する
7 に答える
1338 参照

php - PHP での複数の関数のブレークアウト (短絡)

PHP で複数のネストされた関数を返したい。「break」の後に数字を追加することで、複数のループから抜け出すことができます。例えば。

一連の関数を呼び出している間にサーキット ブレークを行うことはできますか?

0 投票する
2 に答える
821 参照

vb.net - LINQはVB.NETで短絡評価を行いますか?

Nullable object must have a value今日、このコード行でエラーが発生しました。

面白いことに、これは以前は正常に機能していたと思います(そして、基になるデータには常にnull値が散在しています)。そして論理的にはそれは私にはうまく見えます。ヌルの危険から私たちを守ってくれるかのようにチェックしHasValueAndAlso 見てください。

しかし、突然そうではないようです。私は何かが足りないのですか?

OK、これに修正できます。これにより、エラーがなくなります。

しかし、これは私には読みにくいように見えます。何かご意見は?

更新...と告白
上記のコードを単純化して行を短くする際に、コードの重要なチャンクを省略しました。元の問題は次のようになっているはずです。

短絡と演算子の優先順位の規則のために(私自身のずっと前の質問への回答で概説されているように)、LINQが2番目を評価するのを止めるために、命令の2番目の部分を角かっこで囲む必要がありましたx.FooDate.Value.Date

LINQが実際にAndAlsoに準拠していることを確認するためのクイックテストコードをスローしてくれた両方の回答に感謝し、元の問題をより詳しく調べるように強制します。

0 投票する
3 に答える
447 参照

c++ - C++ 短絡評価

かなり単純なものが欠けているのかもしれませんが、式の最初のポイントをチェックしているにもかかわらず、ポインターを逆参照するとクラッシュします。

var1 は null ポインターですが、Var1->Dosomething() はまだ呼び出されています。私の理解では、 && と || は C++ の演算子は短絡であるため、var1 が null の場合、最初に終了します。それとも、私が見逃しているものがありますか?

0 投票する
5 に答える
1416 参照

c# - Math.MinまたはMath.Maxと比較すると短絡しますか?

最小または最大の2つの数値/関数と比較する場合、最初のケースが真であり、2番目のケースが真である場合、C#は短絡しますか?これらのケースの具体例は次のとおりです。

は少なくともyと同じ大きさの値を返すためMath.Max(y, z())、x <yの場合、z()を評価する必要はありません。これには時間がかかる場合があります。と同様の状況Math.Min

これらは両方とも次のように書き直すことができると思います

短絡させるためですが、書き直さなくても比較がより明確になると思います。これは短絡しますか?

0 投票する
3 に答える
132 参照

vb.net - iif()を使用したコレクションの初期化は、ArgumentNullExceptionをスローします

実行時にエラーが発生する理由を誰かに教えてもらえますか?

私はArgumentNullException2行目に乗っています。最後の部分を次のように置き換えた場合:

それは機能しますが、何もないNew List(Of String)(mightBeNothing)場合はコンストラクターが呼び出されることはありません。問題は何ですか?mightBeNothing

0 投票する
1 に答える
498 参照

c# - 短絡演算子がデフォルトではない理由

典型的なコーディングのマントラが「メソッド呼び出しで副作用を誘発しない」であることを考えると。短絡演算子を使用しない唯一の理由 (私が間違っている場合は教えてください) は、後続のコードでメソッド呼び出しの副作用に依存する場合です。C# や VB.NET などの言語の既定の演算子が短絡バージョンではないのはなぜですか?

いいえ:

実際には(デフォルトで)