いまさらリーダブルコードまとめ(第9章)


はじめに

チーム内リーダブルコード輪読会の第9章。
第8章はこちら

第9章 変数と読みやすさ

どんな内容?

変数は書き込みを1度だけに抑え、使用箇所の直前で定義すべきである。
反対に何度も書き換わり、何処で使用されているかわからない変数は
コードを難解にし読みづらくさせる。
また、処理分岐の判断として中間結果を保持するために変数を使う事は
コード量の増加に繋がり簡潔で読みやすいコードからかけ離れてしまう。

読んだ感想

Javaを学習した事がある人であれば誰もが見聞きした「グローバル変数は使うな!」
と教えられた理由がよくわかった。
また、変数を減らす事で余計な追跡をする必要が無くなり
コードが読みやすくなるという結果になることは新たな気付きだった。
ただ、用途が的確に理解できるような説明変数は、使用することでコードを読みやすくもできるので
変数を減らす事だけに拘り続けるのは注意が必要だと感じた。

例を挙げて議論してみよう

変数を削除すると読みやすくなる?

fainalや拡張for文を使って変数をなくしてみる。
【変数あり】

9-1
final List<String> sl = getStringList();
for (int i = 0; i < sl.size(); i++) {
    System.out.println(sl.get(i));
}


【変数なし】

9-1
for (final String s : getStringList()) {
    System.out.println(s);
}

簡略化されコード量は少なくなった。
読みやすさとしては個人差が出るのでは?

javascript ではスコープを縮める+関数の先頭で変数宣言しよう

以下の2例では結果が同じだが見比べてみよう。
【javascriptの特徴を抑えよう】

9-2
var hogeScope = "GlobalVar";

function getScopeValue() {
    console.log(hogeScope);  // ①
    var hogeScope = "LocalVar";
    return hogeScope;
}

console.log(getScopeValue()); // ②
console.log(hogescope);      // ③

①は undefined (変数宣言はホイスティングされるが、代入はされない)
②は "LocalVar" (ローカル変数を参照)
③は "GlobalVar" (グローバル変数を参照)

★javascriptでは変数宣言前でもホイスティングできてしまう。

【関数内の先頭で変数宣言】

9-2
var hogeScope = "GlobalVar";

function getScopeValue() {
    var hogeScope;
    console.log(hogeScope);  // ①
    hogeScope = "LocalVar";
    return hogeScope;
}

console.log(getScopeValue()); // ②
console.log(hogescope);      // ③

①は undefined (変数宣言のみなのでundefined)
②は "LocalVar" (ローカル変数を参照)
③は "GlobalVar" (グローバル変数を参照)

スコープを小さくすることだけを意識すると、必要になった場所で
変数宣言しがちになるが、関数内の先頭に変数宣言をすることで
ブロックスコープがないjavascriptではコードが読みやすくなる。