問題タブ [control-flow]
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.
language-agnostic - プログラミングスタイル:ガード条件が満たされない場合は、早く戻る必要がありますか?
私が時々疑問に思ったことの1つは、以下に示す2つのスタイル(ある場合)のうち、どちらが優れているかということです。ガード条件が満たされていない場合はすぐに戻るのが良いですか、それともガード条件が満たされた場合にのみ他のことを行うべきですか?
議論のために、ガード条件は、例外をスローすることによって制御フローに影響を与える可能性のあるものではなく、要素がコレクションにあるかどうかを確認するなど、ブール値を返す単純なテストであると想定してください。また、メソッド/関数がエディターのスクロールを必要としないほど短いと仮定します。
common-lisp - 制御の移行のための Common Lisp 条件システム
以下は、私がやりたいことの非常にひどい説明であることを前もって認めます。あらかじめお詫び申し上げます。私が説明するのを助けるために質問してください。:-)
次のような個々の操作で構成される ETL (抽出、変換、読み込み) を他の言語で作成しました。
次に、これらの操作をいくつかつなぎ合わせて、Operations の呼び出しとそれらの間でのデータのプッシュを担当する The Dispatcher を呼び出します。
私は Common Lisp で似たようなことをしようとしていますが、同じ基本構造を使用したいと考えています。つまり、各操作は、リストを入力してリストを出力する通常の関数のように定義されていますが、遅延しています。
define-condition
条件 ( have-value
) を使用して for のようyield
な動作を行うことができ、単一のループで実行でき、うまく機能します。入力をループして、同じ方法で操作を定義しています。
問題は、いくつかの操作をつなぎ合わせて実行したい場合です。これらのディスパッチャーを作成する最初の試みは次のようになります。
ただし、再起動には動的な範囲しかありません。各操作には同じ再起動名があります。再起動は、関数の状態を保存するために保存できる Lisp オブジェクトではありません。これは、ハンドラ ブロック内で名前 (シンボル) で呼び出すものであり、後で使用するために保存できる継続ではありません。
ここで私がしたいことをすることは可能ですか?それとも、各操作関数がその入力キューを明示的に見て、明示的に出力キューに値を配置するだけのほうがよいでしょうか?
networking - 「送信予定」キューおよびその他の設計上の問題を伴うTCP送信の制限
この質問は、私が過去数日間に尋ねた他の2つの質問の結果です。
送信/受信のフローを制御する方法を理解する上での「次のステップ」に関連していると思うので、新しい質問を作成しています。これについては、まだ完全な答えは得られていません。
その他の関連する質問は次
のとおりです。IOCPドキュメントの解釈に関する質問-バッファの所有権のあいまいさ
非ブロッキングTCPバッファの問題
要約すると、私はWindows I/O完了ポートを使用しています。
完了ポートからの通知を処理するスレッドがいくつかあります。
質問はプラットフォームに依存せず、* nix、* BSD、Solarisシステムで同じことをするのと同じ答えになると思います。
ですから、私は自分のフロー制御システムを持っている必要があります。罰金。
だから私は送信と送信をたくさん送信します。受信側はX量に制限されているため、送信のキューイングをいつ開始するかをどのように知ることができますか?
例を見てみましょう(私の質問に最も近いもの):FTPプロトコル。
私は2台のサーバーを持っています。1つは100Mbリンク上にあり、もう1つは10Mbリンク上にあります。
100Mbをもう一方(10Mbにリンクされたもの)に1GBのファイルを送信するように注文します。平均転送速度は1.25MB/秒で終了します。
送信者(100Mbにリンクされたもの)は、送信を保留するタイミングをどのように知っていたので、遅い送信者がフラッディングされませんでしたか?(この場合、「送信される」キューはハードディスク上の実際のファイルです)。
これを尋ねる別の方法:
リモート側から「送信保留」通知を受け取ることはできますか?TCPに組み込まれているのでしょうか、それともいわゆる「信頼性の高いネットワークプロトコル」である必要がありますか?
もちろん、送信を固定バイト数に制限することもできますが、それは私には正しく聞こえません。
繰り返しになりますが、リモートサーバーへの送信が多いループがあり、そのループ内のある時点で、その送信をキューに入れるか、トランスポート層(TCP)に渡すことができるかを判断する必要があります。
それ、どうやったら出来るの?あなたならどうしますか?もちろん、送信が完了したというIOCPからの完了通知を受け取ったら、他の保留中の送信を発行します。これは明らかです。
これに関連する別の設計上の質問:
送信キューでカスタムバッファを使用するため、「送信完了」通知が到着したときにこれらのバッファは解放されて再利用されます(したがって、「delete」キーワードは使用されません)。 、そのバッファプールで相互除外を使用する必要があります。
ミューテックスを使用すると処理が遅くなるので、私は考えていました。各スレッドに独自のバッファプールを持たせないのはなぜですか。したがって、少なくとも送信操作に必要なバッファを取得するときにアクセスする場合、スレッドのみに属するため、ミューテックスは必要ありません。
バッファープールは、スレッドローカルストレージ(TLS)レベルにあります。
相互プールがないということは、ロックが不要であることを意味し、操作が高速であることを意味しますが、一方のスレッドがすでに1000個のバッファーを割り当てている場合でも、現在送信中で、何かを送信するために1000個のバッファーが必要なもう一方のスレッドは、割り当てる必要があるため、アプリによって使用されるメモリも多くなります。これらを独自に。
別の問題:
「送信予定」キューにバッファA、B、Cがあるとします。
次に、受信者が15バイトのうち10バイトを取得したことを通知する完了通知を受け取ります。バッファの相対オフセットから再送信する必要がありますか、それともTCPがそれを処理しますか、つまり送信を完了しますか?また、必要に応じて、このバッファがキュー内の「次に送信される」バッファであると確信できますか、それともたとえばバッファBである可能性がありますか?
これは長い質問であり、誰もけがをしなかったことを願っています(:
誰かがここで答えるのに時間がかかるのを見てみたいです。私は彼に二重投票することを約束します!(:
ありがとうございました!
php - 最初の if ステートメントが false でも、PHP の elseif ステートメントが実行されない
2 つの多次元 PHP 配列の違いを出力する再帰関数を作成しています。このコードの目的は、jpeg ヘッダーの違いを確認して、adobe bridge cs3 が評価情報を jpg ファイル内に保存する方法を判断することです。
eclipse - zend デバッガー IDE を使用してコードをシングルステップ実行すると、最初の if ステートメントが false (つまり、どちらの値も配列ではない) でも、後続の elseif ステートメントが実行されないように見えます。以下に関数を添付します。
注: コメントに基づく元の投稿以降の変更
デフォルトの level= '' を追加しました
if{} elseif{} ブロック間のコメントを
削除しました else;を削除しました。機能を持たないブロックの最後に < および > 記号をエンコードして、山かっこがコードに表示されるようにしました
java - Java フロー制御の問題
私は単純な 2D ゲーム エンジンをプログラミングしています。エンジンをどのように機能させるかを決めました。エンジンは、必要に応じてメインのゲーム ループがトリガーする「イベント」を含むオブジェクトで構成されます。
構造についてもう少し: すべてGameObject
にはupdateEvent
メソッドがあります。
objectList
更新イベントを受け取るすべてのオブジェクトのリストです。このリストにあるオブジェクトだけが、ゲーム ループによって updateEvent メソッドが呼び出されます。
このメソッドを GameObject クラスに実装しようとしています (この仕様は、メソッドで達成したいものです) :
そのため、オブジェクトが更新イベント内で自身を削除しようとすると、制御がゲーム エンジンに戻されます。
これが私がこれまでに持っているものです。それは機能しますが、フロー制御に例外を使用することについて読めば読むほど気に入らなくなるので、代替手段があるかどうかを確認したいと思います。
メソッドの削除
p>ゲームループ
p>2 つの質問:
上記の remove メソッドの stop-right-away 部分を実装する唯一の方法は、カスタム例外をスローしてゲーム ループでキャッチすることであると想定するのは正しいですか? (フロー制御に例外を使用するのは goto のようなものですが、これは悪いことです。自分がやりたいことを行う別の方法が思い浮かびません!)
リスト自体からの削除では、1 つのオブジェクトがリストのさらに下にあるオブジェクトを削除することができます。現在、コードを実行する前に削除済みフラグをチェックしており、各パスの最後にオブジェクトを削除して同時変更を回避しています。これを行うためのより良い、できればインスタント/非ポーリングの方法はありますか?
[編集] あなたの回答を読んだ後、メソッドの仕様を変更すると思います。インスタント削除の動作は、私が別のエンジンでの作業に慣れているものですが、その通りです。Java の動作に実際には適合しません。ちょっと違う考え方を頭に入れてみよう!
java - C プログラムを制御フロー グラフに変換する Java コード
C プログラムを制御フロー グラフに変換するための Java コードが必要です。
誰でも私を助けてくれませんか?
loops - Perl ループ ラベルは GOTO としてカウントされますか?
一般に、GOTO を避けることをお勧めします。それを念頭に置いて、私はこのトピックについて同僚と議論してきました.
次のコードを検討してください。
ループ ラベルの使用は goto としてカウントされますか?
これは perldoc の perlsynが言わなければならないことです:
C プログラマーが Perl で特定のアルゴリズムをコード化する方法を次に示します。
一方、このイディオムに慣れている Perl プログラマーが行う方法は次のとおりです。
あなたはループを短絡して前進するように明示的に言っているので、これについての私の見解はノーですが、私の同僚は同意しません。これが GOTO であるかどうかを説明する説得力のある議論またはドキュメントを探しています。また、なぜこれが perl で良い習慣と見なされるか、または考慮されないかについての説明も受け入れます。
language-agnostic - プログラミング101、ブロックの場合はVSを選択
ifブロックとswitch/selectブロックの違いがわかりません。私はいつもそれらを使用しているという意味です。しかし、スイッチブロックをいつ適用する必要があるのか、いつ適用しないのかは私にはわかりません。以来、selectブロックはifブロックに展開できます。したがって、selectブロックを使用することで私が考えることができる唯一の本当の利点は、人間が読みやすいことです。
c# - 一般的なコールバックメカニズムは、フロー制御の手段として成功ハンドラーをオーバーロードします-コードの臭い?
私はプロジェクトにかなり慣れていないので、データベースに対して行ういくつかの非同期呼び出し(変数と関数名が変更された)の興味深い設計パラダイムに出くわしました。
使用例:
使用例は、2つの異なるケース(初期ログインと再ログイン(技術的には再ログインではありませんが、現在ログインしているユーザーの初期状態が異なる場合のアプリケーションの再起動))に対するこの関数の2つの異なる呼び出しを示しています。
気になるのは、この2つの場合のコールバック関数が違うことです。私は、関数がコールバックを取得して、関数のユーザーが呼び出されている関数の範囲内でカスタム実装を提供できるようにするのを見るのに慣れています。
ただし、上記の場合、コールバック関数は制御フローを変更します。提供されているコールバック関数に応じて、非同期呼び出しが戻った後の後続の呼び出し関数は異なります。これはコードの臭いですか、それともコールバックの独創的な使用法ですか?
mips - 逆コンパイラのルールを定義する良い方法を探しています。アドバイスが必要です
私は MIPS アーキテクチャ用の非常に単純な逆コンパイラに取り組んでおり、進行するにつれて、コード分析のための多くのルールを定義する必要があります。bneであり、現在の前のアドレスを参照しています -ループを作成します問題 - そのようなルールがたくさんあり、それらを定義する良い方法を見つけることができません。すべてのルールに個別の関数を書き、素敵な OOP ベースロジッククラスを定義し、それらを拡張して作成しようとしましたルール、失望したコードで正規表現を試してみましたが(驚いたことに、これは予想よりもうまく機能します)、何を試しても、コードをすぐに大きくして読みにくくなりました。それ。
これは、私が間違ったツールを使用してこのタスクを解決しようとしているという結論に達します(そのような複雑なタスクにはあまりにも愚かであることは言うまでもありません:))が、何を試すべきかわかりません。現在、テストされていない 2 つのアイデアがあります。1 つはある種の DSL を使用することです (私はこれについてまったく経験がないので、完全に間違っている可能性があります)。
誰かが私を正しい方向に向けてくれることを願っています.thx.