🌊

リーダブルコード要約(第3章&第4章)

2022/05/22に公開

これは何?

この記事は、リーダブルコードの「3章 誤解されない名前」と「4章 美しさ」の内容を要約したものです!。

第三章 誤解されない命名をしよう

プログラミングに使う英単語には定義が曖昧なものが多いです。
このため、最善の名前とは、誤解されない名前であり、積極的に「誤解」の可能性を探していくことで、意味が曖昧な命名を避けることができます。

以下では曖昧な命名になりがちな例を紹介していきます。

1. メソッド名

以下はデータベースの問い合わせ結果を処理するコードです。

results = Database.all_objects.filter("year < 2011")

一見特に問題無さそうですが、この記述だとfilter()でデータ(year < 2011)を「選択」しているのか「除外」しているのかわかりません。このため、filterselect(選択)exclude(除外)などの具体的な動作がわかりやすいメソッド名に改名するべきです。

2. 変数名

以下はショッピングカートに商品が10以上入らないようにするための記述です。

CART_TOO_BIG_LIMIT = 10
if shopping_cart.num_items() > CART_TOO_BIG_LIMIT

この記述の問題点はCART_TOO_BIG_LIMITという名前の意味が曖昧なことです。
例のような限界値を明確に示しておく必要がある変数には、名前の前にmaxminをつけると適切な形になります。
この場合はMAX_ITEMS_IN_CARTという名前にするべきです。

第四章 美しさ

プログラミングの時間のほとんどはコードを読む時間であるため、優れたプログラムは「目に優しい」ものでなければなりません。

「目に優しい」とは、ひと目見てサッと流し読みができるくらい見た目が整っているということです。

「目に優しい」コードには原則があります。

  • 読み手が慣れているパターンと一貫性のあるレイアウトを使う
  • 似ているコードは似ているように見せる
  • 関連するコードはまとめてブロックにする

今回は「関連するコードはまとめてブロックにする」に注目して、その一例を紹介します。

1. コードを「段落」に分割する

通常、長文の文章は複数の段落に分割されています。
その理由は

  • 似ている考えをグループにまとめて、他の考えと区別する
  • 視覚的な「踏み石」をつくる
  • 段落単位で移動ができるようになる

ためです。
これと同様にコードも「段落」に分けたほうが読みやすくなるわけですね。

例えば、以下のコードは「段落」が無く、一塊に見えてしまい読む気が削がれます。

{
    $friends = user . friends();
    $this->set($friends_emails, $frends . email);
    $contact = import_contacts($user . email, $email_password);
    $this->set($contact_email, $contact . email);
    $no_friend_emails = $contact_emails - $friend_emails;
    $suggested_friends = User<-objects.select($email_in = $no_friend_emails)
    echo "{$user}";
    echo "{$friends}";
    echo "{$contact}"
}

しかし、以下のように段落ごとに要約コメントを追加することで、一気に読みやすくなります。

function suggest_new_friends($user, $email_password)
{
    // ユーザの友達のメールアドレスを取得する
    $friends = user . friends();
    $this->set($friends_emails, $frends . email);

    // ユーザのメールアカウントからメールアドレスをインポートする
    $contact = import_contacts($user . email, $email_password);
    $this->set($contact_email, $contact . email);

    // まだ友達になっていないユーザを探す
    $no_friend_emails = $contact_emails - $friend_emails;
    $suggested_friends = User < -objects . select($email_in = $no_friend_emails);

    // それをページに表示
    echo "{$user}";
    echo "{$friends}";
    echo "{$contact}";

}

Discussion