スコープとカプセル化について一般的な質問があります。2つのシナリオを取ります。
シナリオ1:
// a global application level constant
public static const IS_DEMO_MODE:Boolean = false;
... // somewhere deep in the codebase
private function _myFunction():void
{
if (IS_DEMO_MODE == true) {
// If Demo Mode do not allow this function to complete
return;
}
else {
// Function behaves normally
// Code ...
}
}
シナリオ2:
// a global application level constant
public static const IS_DEMO_MODE:Boolean = false;
... // somewhere deep in the codebase
// call the function and pass in the constant
_myFunction(IS_DEMO_MODE);
private function _myFunction(isDemoMode:Boolean):void
{
if (isDemoMode == true) {
// If Demo Mode do not allow this function to complete
return;
}
else {
// Function behaves normally
// Code ...
}
}
機能的に言えば、これら2つのコードスニペットはまったく同じことを行います。私はコーディングスタイルのより細かい点を理解しようとしていますが、なぜ一方の方法がもう一方の方法よりも優先されるのでしょうか。カプセル化の観点からは、シナリオ2の方が優れているようです。ただし、シナリオ1は、条件付きのブール値が1つの場所、つまりグローバル定数からのみ取得されるという点で、より確実です。パラメータを正しく受信しているときに間違った値を渡す可能性がある関数呼び出しについて心配する必要はありません。ただし、シナリオ2は、定数の依存関係を削除し、関数をより動的に動作させることができるため、価値があるように思われます。これについて何か考えはありますか?私が見ている他のトレードオフはありますか?
同じ概念と質問がオブジェクトとクラスにも適用されます。ただし、コード例を簡単にするために、関数の観点から例を示しています。