4

isdefined("arguments.argument")の存在をテストするか、デフォルト値を設定する方が速いarguments.argumentですか?

4

3 に答える 3

6

@matt-busche が示したように、この種のパフォーマンスについて心配することは、時期尚早の最適化のケースです。パフォーマンスの違いは重要ではありません。おそらく、作成中のアプリケーションの全期間を通じて節約できる累積時間よりも、質問を入力するのにより多くの時間がかかりました。

目指すべきは、ロジックの意図とコードの使用目的を最も正確に反映する明確なコードを書くことです。

デフォルトの値がその引数の最も有用な値である場合は、引数のデフォルトを設定する必要があります。これは常に適切であるとは限りません。「最も有用な値」がない場合があるため、引数にデフォルトを指定しないでください。したがって、呼び出しコードに値を渡す必要があります。

後続のコードが壊れないように、デフォルトを設定するコードを書くべきではありません (たとえば、文字列引数を "" にデフォルト設定するのは、後続のコードに存在すると安全に想定できるようにするためです)。

引数のデフォルトを指定する利点の 1 つは、デフォルトがコンポーネントのメタデータと自動生成されたドキュメントに反映されることです。これは、サードパーティが使用する API を作成している場合に便利です。

一方、これisDefined()はかなり制限された不正確な関数であるため、一般的には避けるべきであり、まれな状況でも誤検知が発生するのを見てきました(スコープルックアップルールを理解していないのは私だけではありません)。

ほとんどの場合structKeyExists()、 overを使用する必要がありisDefined()ます。

于 2013-05-22T23:41:00.933 に答える