isdefined("arguments.argument")
の存在をテストするか、デフォルト値を設定する方が速いarguments.argument
ですか?
3 に答える
@matt-busche が示したように、この種のパフォーマンスについて心配することは、時期尚早の最適化のケースです。パフォーマンスの違いは重要ではありません。おそらく、作成中のアプリケーションの全期間を通じて節約できる累積時間よりも、質問を入力するのにより多くの時間がかかりました。
目指すべきは、ロジックの意図とコードの使用目的を最も正確に反映する明確なコードを書くことです。
デフォルトの値がその引数の最も有用な値である場合は、引数のデフォルトを設定する必要があります。これは常に適切であるとは限りません。「最も有用な値」がない場合があるため、引数にデフォルトを指定しないでください。したがって、呼び出しコードに値を渡す必要があります。
後続のコードが壊れないように、デフォルトを設定するコードを書くべきではありません (たとえば、文字列引数を "" にデフォルト設定するのは、後続のコードに存在すると安全に想定できるようにするためです)。
引数のデフォルトを指定する利点の 1 つは、デフォルトがコンポーネントのメタデータと自動生成されたドキュメントに反映されることです。これは、サードパーティが使用する API を作成している場合に便利です。
一方、これisDefined()
はかなり制限された不正確な関数であるため、一般的には避けるべきであり、まれな状況でも誤検知が発生するのを見てきました(スコープルックアップルールを理解していないのは私だけではありません)。
ほとんどの場合structKeyExists()
、 overを使用する必要がありisDefined()
ます。