リーダブルなコードを書こう(変数編)


  
「リーダブルコード」という本書を読んだのでちょっとメモ

良いコードとはなにか

読んだだけでどう動いてるのかが分かるコード

ここで重視されるのはコメントや変数、メソッド名である。

あなたが作成したメソッドにもしコメントがない場合、
他の人がそのメソッドを理解するには記述されたコードを読んでようやく理解することができる。

コメントはなるべく明確にわかりやすく書こう。

変数名も同じである。

例えば、終礼のチャイムが鳴ったらあなたはオフィスを出るとしよう。

var is_time_going_home_ = true

if (is_time_going_home_ === true)
{
    leaveTheOffice()
}

上記のように is_time_going_home と変数名が書かれていた場合、英語のようにすらすら読むことができるだろう。

この変数名の指定でプログラムを始めたての頃にやりがちなのがある。

フラグ変数なのでただ単に f と記述してしまうのだ。

var f = true

if (f === true)
{
    leaveTheOffice()
}

みんなも上記のコードのように書いたことがあるのではないだろうか。(ワタシハアル)

どうだろう、f はなんのための変数なのか書いた人の意図を汲み取れるだろうか。

汲み取れたらあなたはエスパーか何かだろう。

手が加えられる状態であること

チーム開発では、コードは改修されることを前提として書いていくのが重要である。

コードの質は事業の継続性に繋がると思えという人もいる。

その事業の継続、プロダクトの成長を持続させるには、

できるだけ小さく軽量なコードを書いていく必要があると言われている。

変数編

public getData(){

}

上記のような変数名を私は書いたことがある。

「get」はあまり明確な単語ではない。「get」という単語からは何も伝わってこない。

このメソッドはページから?ローカルキャッシュから?データベースから?インターネットから?どこからDataを取ってくるのかがわからない。

インターネットならば、FetchData()、DownloadData()のほうが明確である。

「リーダブルコード」より引用

明確な名前はコードを読む人へのメッセージにもなる。

本書の例として、単語の代替案の例が挙げられている。

単語 代替案
send deliver, dispatch announce, distribute, route
find search, extract, ocate, recover
start launch, create, begin, open
make create, set up, build, generate, compose, add, new

「リーダブルコード」より引用

英語のニュアンスに強くなる必要があるのかもしれない。

省略形の名前

ソースコードに一般的な省略形は用いても大丈夫である。

例:CSS (Cascading Style Sheets)

しかし、プロジェクト独自の省略形はやめよう。

新しいメンバーがプロジェクトに加わったときその省略形が分からなかったら意味がない。

→ 辞書作ればいいと思うのん。いい考えだと思うがそれは避けるべき状況である。そもそも省略形を多用するべきではない。

独自の省略形は多用せず最小限にとどめておこう。

変数のScopeを減らそう

変数のことが見えるコード行数を減らす。

「リーダブルコード」より引用

これはどういうことか。

public Class1 {
    string str_CompanyName

    public void Method1(){
        str_CompanyName = "";
        Method2();
    }
    public void Method2(){
        str_CompanyName = "Method2で使用した";
    }

    public void Method3() {
        // str_CompanyNameを使用していない
    }

    // Method3()のようにstr_CompanyNameを使用していないメソッドがたくさんあるクラスになっている
}

上記コードの str_CompanyName はクラス内のどこからでもアクセスできるのがわかる。

しかし、実際使用しているのはたった2個のメソッドだけである。

変数 str_CompanyName のスコープはとても大きいということになる。

これは縮めるべきである。ということで下記コードのように改修してみる。

public Class1 {

    public void Method1(){
        string str_CompanyName = "";
        Method2(str_CompanyName);
    }
    public void Method2(string str_CompanyName){
        str_CompanyName = "Method2で使用した";
    }

    public void Method3() {
        // str_CompanyNameが見えない
    }

    // その他のメソッドも同様にstr_CompanyNameが見えない
}

Method1にローカル変数として定義し、Method2には引数として渡す形になっている。

これにより、変数のスコープを小さくできていることがわかる。

まとめ

  • 明確なコメントを書こう。
  • 変数名、メソッド名は他の人が読んでもわかるようなものを選ぼう。
  • 変数を用いるスコープに応じて、長さを調節しよう。

参考図書