問題タブ [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.
java - 抽象構文木から制御フロー グラフを取得する
ANTLR Parser Generator for Java から派生した AST があります。私がやりたいことは、ソース コードの制御フロー グラフを何らかの形で構築することです。ここで、各ステートメントまたは式は一意のノードです。この識別には再帰性があるに違いないことを理解しています。最良のオプションとして何を提案するか、ANTLR にこのジョブに使用できるツールセットがあるかどうか疑問に思っていました。乾杯、クリス
編集 - 私の主な関心事は、AST から制御フロー グラフ (CFG) を取得することです。このようにして、ソースのツリー表現を取得できます。明確にするために、ソース コードと実装言語の両方が Java です。
algorithm - 制御の流れの例外
アプリケーション間の制御フローに関連して、これについて興味深い投稿がここにあります。
さて、最近、興味深い問題に出会いました。潜在的に (実質的に) 無限の再帰シーケンスで n 番目の値を生成します。この特定のアルゴリズムは、成功した時点で少なくとも 10 ~ 15 のスタック参照の深さになります。私が最初に考えたのは、次のような SuccessException をスローすることでした (C#):
次に、次のようにします。
そこで、フロー制御に例外を使用しないように何度も聞いてきました。言い訳はありますか?また、実装する場合、このようなものをどのように構築しますか?
python - 複数のループから抜け出す方法は?
次のコードが与えられます(それは機能しません):
これを機能させる方法はありますか?または、入力ループから抜け出すために1つのチェックを実行し、次に、ユーザーが満足している場合は、外側のループをチェックインしてすべてをまとめてブレークアウトする必要がありますか?
java - フロー制御に例外を使用しないようにするにはどうすればよいですか?
私は、ストレージ システムへのインターフェイスとして機能する一連のクラスを開発するプロジェクトを割り当てられました。要件は、クラスが次のシグネチャを持つ get メソッドをサポートすることです。
基本的に、このメソッドは、オブジェクトが の後に変更された場合にのみ、CustomObject
関連付けられたを返すことになっています。ストレージ システムに が含まれていない場合、メソッドは null を返す必要があります。key
ifModifiedSince
key
私の問題はこれです:
キーは存在するがオブジェクトが変更されていないシナリオをどのように処理すればよいですか?
このクラスを使用する一部のアプリケーションは Web サービスおよび Web アプリケーションになるため、これは重要です。これらのアプリケーションは、404 (見つからない)、304 (変更されていない)、または 200 (データはここにあります) のいずれを返すかを知る必要があります。
私が検討しているソリューションは次のとおりです。
- ストレージ システムに
key
- が失敗したときにカスタム例外をスローし
ifModifiedSince
ます。 - ステータス プロパティを CustomObject に追加します。呼び出し元にプロパティの確認を要求します。
これら 3 つのオプションのいずれにも満足できません。フロー制御に例外を使用するのが好きではないため、オプション 1 と 2 は好きではありません。また、値がなかったことを示すことが意図されている場合に、値を返すことも好きではありません。
それにもかかわらず、私はオプション 3 に傾いています。
検討していないオプションはありますか? これらの 3 つのオプションのいずれかについて強い感情を持っている人はいますか?
この質問への回答、言い換え:
- メソッドを提供し、
contains
呼び出し元が を呼び出す前にそれを呼び出すことを要求しget(key, ifModifiedSince)
、キーが存在しない場合は例外をスローし、オブジェクトが変更されていない場合は null を返します。 - 応答とデータ (存在する場合) を複合オブジェクトにラップします。
- 事前定義された定数を使用して、状態を示します (
UNMODIFIED, KEY_DOES_NOT_EXIST
)。 - Caller は、コールバックとして使用されるインターフェイスを実装します。
- デザインがイマイチ。
答え #1 を選択できない理由
これが理想的な解決策であることに同意しますが、それは私がすでに (しぶしぶ) 却下したものでした。このアプローチの問題は、これらのクラスが使用されるほとんどのケースで、バックエンド ストレージ システムが Amazon S3 などのサード パーティのリモート システムになることです。これは、contains
メソッドがストレージ システムへのラウンド トリップを必要とすることを意味し、ほとんどの場合、その後に別のラウンド トリップが続きます。これには時間と費用の両方がかかるため、オプションではありません。
その制限がなければ、これが最善のアプローチです。
(質問でこの重要な要素について言及しなかったことに気づきましたが、簡潔にしようとしていました。明らかに関連性がありました。)
結論:
すべての回答を読んだ後、この場合はラッパーが最適なアプローチであるという結論に達しました。基本的に、応答コードを含むメタデータ (ヘッダー) とコンテンツの本文 (メッセージ) を使用して、HTTP を模倣します。
refactoring - フロー構造のこの制御は良い方法ですか?
if
ネストされたステートメントが多すぎるメソッドを書き直したい。
私はこのアプローチを思いつき、あなたの意見を求めました:
c - 「goto」によるフロー制御マクロ
はい、2つの嫌いな構造が組み合わされています. それとも、goto の使用を制御し、適切なクリーンアップ戦略を提供するための良い方法と見なすことができますか?
職場では、コーディング標準で goto を許可するかどうかについて話し合いました。一般に、誰も goto を自由に使用できるようにしたくはありませんでしたが、クリーンアップ ジャンプに使用することに前向きな人もいました。このコードのように:
このような使用の上記の利点は、次のコードで終わる必要がないことです。
特に、多くの割り当てがあるコンストラクターのような関数では、特に誰かが途中で何かを挿入しなければならない場合に、これは非常に悪くなることがあります。
そのため、goto を使用できるようにしつつ、自由に使用されないように明確に分離するために、一連のフロー制御マクロがタスクを処理するために作成されました。次のようになります (簡略化)。
これは次のように使用できます。
見栄えがよく、多くの利点がありますが、これを開発に展開する前に考慮すべき欠点はありますか? 結局のところ、非常にフロー制御と goto:ish です。どちらも落胆しています。この場合、彼らを思いとどまらせるための議論は何ですか?
ありがとう。
dynamic - 次のN実行行をGDBで自動的に印刷する方法は?
私はしばらくの間、プログラムの制御フローをトレースする GDB の進行を自動化する方法を見つけようと試みてきました。
コマンドを自動化する簡単な方法でも、n
ルーチンが呼び出される順序を確認できます。
n x
x が GDB のステップ スルー回数である場合、問題が発生する可能性があることは認識していますが、問題は、コマンドは表示されますが、ルーチンのアドレスは表示されないことです! ただしn
、GDB で手動で押すと (次に Return キーを押して前のコマンドを発行すると)、アドレスが表示されます。
GDBで次のことを試しました:
GDBは言い<breakpoint 1 at 0x123456>
ます。私はタイプする:
しかし、期待どおりにループせず、アドレスの場所も表示されません :-(.
どんな助けでも大歓迎です!確かに、ルーチンが呼び出された順序を自動的に記録するのは簡単に違いありません??
serial-port - XON と XOFF を等しくすることはできますか?
アプリケーションは XON と XOFF で同じ文字を設定できますか? はいの場合、デバイス ドライバーがこの状況をどのように処理するか
loops - LDAP から CSV への結果の解析に助けが必要
Net::LDAP を使用していくつかの LDAP クエリの結果を含む csv ファイルを生成するスクリプトを作成しようとしていますが、@attributes 配列の 1 つの要素が空白の場合、不完全な行をスキップするのに問題があります。
たとえば、ユーザーがリストされているメールや電話番号を持っていない場合、次の値を返す代わりに hold フィールドをスキップする必要があります。
現在の私のループは次のようになっています。
私は次のようなコードを試しました:
運の悪い他のいくつか。シンプルな if () { print "isempty"; も試してみました。テストをデバッグし、機能していません。どうすればこれができるのか正確にはわかりません。
私が間違っていることについて、あなたが私に与えることができる助けや指針に感謝します。
ご協力いただきありがとうございます。
更新:
カオス リクエストごと:
このプログラムのサンプル実行は、次を返します。
だから私がやりたいことは、電子メールまたは内線番号のいずれかのフィールドが欠落しているすべての行をスキップすることです.
python - execfileで呼び出されたスクリプトの実行を停止します
if / elseステートメントを使用せずにexecfile関数で呼び出されたPythonスクリプトの実行を中断することは可能ですか?試しましexit()
たが、終わらせませんmain.py
。