2

わかりました、まず第一に、これは閉鎖されると思います。

そうですね、最初に変数に代入するのではなく、ステートメント内で関数呼び出しを使用することに関連する質問があります。

例えば:

(コードはphpですが、質問は一般的に適用されます。また、コードは過度に単純化されています)

if (myAmazingFunction() === true) {
    // do something amazing
}

それ以外の

$amazingresult = myAmazingFuncton();
if ($amazingResult === true) {
    // do something amazing
}

質問は:

  1. 各アプローチにパフォーマンス、またはその他の根本的な長所または短所はありますか
  2. スタイル的に、他のアプローチよりも優れていると考えられるアプローチはありますか
4

3 に答える 3

2

ほとんどの言語では、パフォーマンスの違いはありません。最初のケースでは、コンパイラは、関数呼び出しの結果がtrue. 2 番目のケースでは、単にこれを明示的にしています。

デバッグしている場合は、2 行目にブレークポイントを設定し、比較が行われる前に関数によって返された値を確認できるため、2 番目の形式の方が簡単な場合がありますが、実行中のパスによって関数の結果が表示されます。あなたが与えた例では、コードはとにかくかかります。Zac がコメントで述べているように、関数を再実行せずに値を再利用することもできます。

スタイル的には、これは主に主観的なものになります。ここで私が言いたいのは、変数名が関数出力の目的を明確にしている場合、他の人がコードを簡単に理解できるようにするために何かを追加している可能性があるということです。

于 2012-08-22T14:45:36.300 に答える
1

@DavidM's answer is correct. However, I'd just like to add that stylistically, I think it depends on the name of the function and its context.

Example:

if ($food->tastesGood()) {
    echo 'Mmmm!';
}

// vs.

$foodTastesGood = $food->tastesGood();
if ($foodTastesGood) {
    echo 'Mmmm!';
}

In this case, it's very clear that the return value of the method tastesGood() is going to be a boolean from both the name of the method and its context. Using a temporary variable adds nothing to your code except making it redundant and less-readable at a glance. In addition, if the variable is not defined right before its used, then you have to go find the definition to understand the condition. In these cases, I would say use of a variable is worse.

Another example:

if ($dishes->wash() !== FALSE) {
    echo 'Sparkly!';
}

// vs.

$dishesAreClean = $dishes->wash() !== FALSE;
if ($dishesAreClean) {
    echo 'Sparkly!';
}

In this case, we can't really infer the return type of the wash() method from its name, and indeed, it would seem that it returns nothing on success and FALSE on errors. Checking if the dishes are clean then requires us to make sure that there were no errors, but the first case doesn't make for particularly readable or self-documenting code. The second case, however, adds very explicit information about what's going on by way of the temporary variable. In these cases, I would say use of a variable is better.

于 2012-08-22T15:08:30.510 に答える
0

各アプローチにパフォーマンス、またはその他の根本的な長所または短所はありますか

パフォーマンスの観点から、if 条件でのみ使用する追加の変数を割り当てると、余分なメモリと 1 行の無駄なコードが使用されます。そのため、より多くのメモリを使用します。目立ちますか?おそらくそうではありません。

スタイル的に、悪いと見なされるアプローチはありますか

ステートメントでメソッドを使用することifは完全に有効です。コードを読んで、条件でテストされている値を正確に確認できるため、より良いアプローチだと思いますif。変数を探して、影響を受けた場所を検索する必要はありません。

于 2012-08-22T14:45:44.660 に答える