3

まず、これが単なるコーディング スタイルの問題である場合は、お詫び申し上げます。既存の変数を再割り当てするためだけに、各プロパティまたは関数に新しい変数を割り当てることの長所と短所について疑問に思っています。これは、スコープを超えて変数にアクセスする必要がないことを前提としています。

これが私が言いたいことです(名前$var0,...は簡単にするためのものであることに注意してください)、オプション#1:

$var0= array('hello', 'world');
$var1="hello world";
$var2=//some crazy large database query result
$var3=//some complicated function()

対オプション#2:

$var0= array('hello', 'world');
$var0="hello world";
$var0=//some crazy large database query result
$var0=//some complicated function()
  1. 既存の変数のメモリサイズに依存しますか? つまり、メモリの再割り当ては、新しい変数の割り当てよりも計算コストが高くなりますか?
  2. これは常にスコープの問題ですか。つまり、ここに示されているスコープ外の各変数値が必要ない場合にのみオプション #2 を使用する必要がありますか?
  3. 各変数の値に依存しますか? 異なるデータ型に再割り当てすると、それに関連するコストが異なりますか?
4

3 に答える 3

5

技術的に言えば、変数を再利用すると (わずかに) 高速になります。ただし、測定可能なパフォーマンスに違いはありません。

ハードウェアは安くなり、作業時間は増えますが、保守しやすいコードを探す必要があります。これにより、長期的には頭痛の種と会社の多額の費用を節約できます。

投入している作業 (お金) の量を相殺するのに十分なパフォーマンスの向上が得られる場合にのみ最適化してください。

クラウドとサーバー クラスターの今日では、少し最適化されていないコードは、最終的にプロジェクトの速度を低下させることはほとんどありません。プロジェクトが同じくらい速く実行される可能性は高くなりますが、CPU サイクルが数回多くかかるため、ホスティング プロバイダーの費用が少し高くなります。ただし、このわずかな追加コストは、パフォーマンス向上のための最適化に何時間もかかることはほとんどありません。もちろん、Amazon 向けに開発しているためにこれを求めている場合を除きます。(そして、1 日に何百万ものヒットがある Amazon のような場所でさえ、変数を再利用しても、顕著なパフォーマンスの向上は得られません)

質問に戻ります。元の状態の更新されたコンテンツを保持する場合にのみ、変数を再利用する必要があると思います。しかし、一般的に、それはあまり起こりません。

$content次の状況では、変数を再利用することが論理的な選択だと思います

function getContent()
{
    $cacheId = 'someUniqueCacheIdSoItDoesNotTriggerANotice';
    $content = someCacheLoadingCall( $cacheId );

    if (null === $content) {
        $content = someContentGeneratingFunction();

        someCacheSavingCall( $cacheId, $content);
    }

    return $content;
}

記述コード

また、変数には常にわかりやすい名前を使用するように、将来の自分に親切にしてください。あなたはそれに感謝するでしょう。次に、論理的に意味がない限り、変数を再利用しないという協定を自分自身と結ぶと、保守可能なコードに向けて別の一歩を踏み出したことになります。

今から 6 か月後に、別の大きなプロジェクト (またはもっと小さなプロジェクト) を完了した後、重要なクライアントから、古いプロジェクトにバグがあるという電話がかかってきたとします。ホーリー!@#! 今すぐ直さなきゃ!開いて、このような機能をどこでも見ることができます。

function gC()
{
    $cI = 'someUniqueCacheIdSoItDoesNotTriggerANotice';
    $c  = sclc( $cI );

    if (null === $c) {
        $c = scg_f();
        scsc( $cI, $c);
    }

    return $c;
}

わかりやすい変数名と関数名を使用し、優れたコード補完機能を備えたコード エディターを入手して、必要なだけ速くコーディングできるようにすることをお勧めします。現時点では、 Aptana StudioまたはZend Studioをお勧めします。Zendのコード補完は少し優れていますが、Aptana の方が安定していることが証明されています。

PS。私はあなたのプログラミングのレベルを知りません。あなたに関係ない場合は、これを読んでいる可能性のある他の誰かを助けてくれることを願っています:)

于 2012-08-25T16:00:32.970 に答える
4

オプション #2 は絶対に使用しないでください。関連のないコード ブロックに変数を再利用するのは、ひどいやり方です。オプション #2 が可能な状況であってはなりません。関数が長すぎてコンテキストを完全に変更し、別の問題に取り組んでいる場合は、関数をより小さな単一目的の関数にリファクタリングする必要があります。

古い値が使用されなくなった後、それらを「リサイクル」したいという願望から、変数を再利用しないでください。変数が存在しない場合、ソフトウェアを正しく構築していれば、当然のことながら範囲外になります。あなたの決定は、変数の命名の影響を受けないパフォーマンスやメモリの最適化とは何の関係もありません。変数名を選ぶときの唯一の考慮事項は、保守可能で安定したコードを生成することです。

変数を再利用するかどうかさえ自問しているという事実は、あまりにも一般的な名前を使用していることを意味します。var0などの変数名var1ひどいものです。実際に含まれているものに従って変数に名前を付け、新しい値を格納する必要がある場合は新しい変数を宣言する必要があります。

于 2012-08-25T15:55:12.903 に答える
4

個人的には、別のものを含むように変数を再割り当てするべきではないと思います。これにより、デバッグが非常に困難になります。メモリ消費が心配な場合は、いつでもunset()変数を使用できます。

また、変数名を決して持つべきではないことに注意してください$var#。変数名は、それが保持するものを説明する必要があります。

結局のところ、コード内の WTF の数を最小限に抑えることがすべてです。オプション 2 は 1 つの大きな WTF です。

既存の変数のメモリサイズに依存しますか? つまり、メモリの再割り当ては、新しい変数の割り当てよりも計算コストが高くなりますか?

これは、あなたと他の人がコードを (再) ビューするための WTF の数を制限することです。

これは常にスコープの問題ですか。つまり、ここに示されているスコープ外の各変数値が必要ない場合にのみオプション #2 を使用する必要がありますか?

まったく別のスコープにある場合は、同じ名前を複数使用しても問題ありません。variabel に何が含まれているかが明確である限り、例えば:

// perfectly fine to use the same name again. I would go as far as to say this is prefered.
function doSomethingWithText($articleText)
{
    // do something
}

$articleText = 'Some text of some article';
doSomethingWithText($articleText);

各変数の値に依存しますか? 異なるデータ型に再割り当てすると、それに関連するコストが異なりますか?

コストの問題ではなく、メンテナンスの問題です。多くの場合、これははるかに重要です。

于 2012-08-25T15:55:50.837 に答える