カテゴリー
読みやすいコード

変数を削除する/Eliminating Variables

役に立たない一時変数

次のPythonコードのスニペットで、now変数を考えてみましょう:

now = datetime.datetime.now()
root_message.last_view_time = now

今は変える価値のある変数ですか? いいえ。理由は次のとおりです。
•複雑な表現を分解しているわけではありません。
•明示的な追加は行われません。式datetime.datetime.now()は十分明確です。
•一度だけ使用されるため、冗長コードは圧縮されません。

これまでになくても、コードはわかりやすくなりました。

root_message.last_view_time = datetime.datetime.now()

現在のような変数は、通常、コードが編集された後に残る「残り物」です。 変数は、元々複数の場所で使用されていた可能性があります。 あるいは、コーダーが複数回使用することを予期していたかもしれませんが、実際にはそれを必要としませんでした。

中間結果の削除

次に、配列から値を削除するJavaScript関数の例を示します。

var remove_one = function (array, value_to_remove) { 
    var index_to_remove = null;
    for (var i = 0; i < array.length; i += 1) {
        if (array[i] === value_to_remove) { 
            index_to_remove = i;
            break;
        } 
    }
    if (index_to_remove !== null) { 
        array.splice(index_to_remove, 1);
    }
};

変数index_to_removeは、中間結果を保持するために使用されます。 このような変数は、取得するとすぐに結果を処理することで、時には排除することができます。

var remove_one = function (array, value_to_remove) {
    for (var i = 0; i < array.length; i += 1) {
        if (array[i] === value_to_remove) {
            array.splice(i, 1);
            return;
        }
    }
};

コードを早期に返すことで、index_to_removeを完全になくして単純化しました
コードはかなりです。
一般的に、できるだけ早くタスクを完了することは良い戦略です。

制御フロー変数の削除

場合によっては、このコードパターンがループ内に表示されることがあります。

boolean done = false;
while (/* condition */ && !done) {
    ...
    if (...) {
        done = true;
        continue;
    }
}

完了した変数は、ループ全体の複数の場所でtrueに設定される場合もあります。
このようなコードは、しばしば、ループの途中から脱却すべきではない、暗黙のルールを満たすようにしています。 そのようなルールはありません!
doneのような変数は、「制御フロー変数」と呼ばれるものです。その唯一の目的はプログラムの実行を操作することです。実際のプログラムデータは含まれていません。 我々の経験では、構造化プログラミングをより有効に活用することで、制御フロー変数を削除することができます。

while (/* condition */) {
    ...
    if (...) {
        break;
    }
}

このケースはかなり簡単に修正できましたが、単純なブレークでは十分ではない複数のネストされたループがある場合はどうなりますか? このようなより複雑なケースでは、ソリューションはしばしば、コードを新しい関数(ループ内のコード、またはループ全体のコード)に移動する必要があります。

参考文献:

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

The Art of Readable Code: Simple and Practical Techniques for Writing Better Code (English Edition)

The Art of Readable Code: Simple and Practical Techniques for Writing Better Code Kindle (English Edition)

コメントを残す

メールアドレスが公開されることはありません。