Help us understand the problem. What is going on with this article?

リーダブルコード大喜利

More than 1 year has passed since last update.

ITエンジニアは小説家、新聞記者、二宮金次郎に次いで読量の多い人種だと思っています。
技術書を読み、記事を読み、仕様の行間を読み、だれが書いかわからない難解なコードを読み…
とても疲れます。
疲れた時は、ちょっと休憩してリーダブルコードを読む事をお勧めします。

なぜリーダブルコード?

「読むのに疲れたのにまた読むのかよ」というのはごもっともな意見ですが、

  • それほど頭を使わない
  • 為になる
  • 挿絵で笑える

という理由でとても程良いのです。
あと個人的な意見ですが、エンジニアなら暗記するほど読んだ方がいいと思っています。
読みやすいコードは皆を幸せにしますので。

まだ読んでない方へ

「リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック」は、読みやすいコードとは何かを徹底的に叩き込んでくれる本です。
言語には依存しません。
是非、読んでみてください。

すでに読んだ方へ

「大昔に読んだのでほとんど覚えていない」と言う方は、時々思い返してみると良いと思います。

では、ちょっと思い返してみましょう。
テスト形式だと大袈裟なので、大喜利形式で思い返してみましょう。

これから、実際の出来事を元にお題を出します。
回答を考えて下さい。
その後、お題に関連するリーダブルコードの原則を思い返します。

それでは行きます。

お題①

以下のようなコードがあります。

const date = new Date(); // 今日の日付を取得
const kind = [4,5]; 
kind.forEach(function(value) {
    // date.getDay()の値が4のとき、金曜日。5のとき、土曜日。
    if(value === date.getDay()){  
        weekEnd();
    }
});

今日が金曜日か土曜日だったらweekEnd();をコールするという簡単な処理です。
新人のAさんは、これに日曜日も追加するように言われました。
どのように書き換えたでしょう?

それではお考えください!


……
………

回答です。

const date = new Date();
const kind = [4,5]; // date.getDay()の値が4のとき、金曜日。5のとき、土曜日。 
const nichi = [6]; // date.getDay()の値が6のとき、日曜日。
kind.forEach(function(value) {
    if(value === date.getDay()){
        weekEnd();
    }
});
nichi.forEach 

やっちゃいましたね。
kindを種類と読まずkindo(金土)と誤読したわけです。
Aさんが悪いのではなく、読みにくいコードが引き起こした不幸な出来事です。
以下、これに関連した原則です。

名前に情報を詰め込む(2章)
誤解されない名前を付ける(3章)

気になったら読んでみましょう。
では次です。

お題②

Bさんは以下のようなクラスを書きました。

class Account{
function __construct(){
$this->name = "取引先";
}
function show() {
echo $this->name;
}
}

先輩から、コードを見やすくする為に
「コメントを書いたほうがいいよ」
「インデントを揃えたほうがいいよ」
と言われました。

その通りにしましたが、逆にわかりにくくなりました。
それはなぜでしょう。

それではお考えください!


……
………

回答です。

// 2019/11/12 CHG START
//class Account{
    class Account{
// 2019/11/12 CHG END
// 2019/11/12 CHG START
//function __construct(){
//$this->name = "取引先";
//}
        function __construct(){
            $this->name = "取引先";
        }
// 2019/11/12 CHG END
// 2019/11/12 CHG START
//function show() {
//echo $this->name;
//}
         function show() {
             echo $this->name;
         }
// 2019/11/12 CHG END
// 2019/11/12 CHG START
//}
    }
// 2019/11/12 CHG END

あ、そう理解したんだ。

以下、これに関連した原則です。

コメントすべき事を知る(5章)
コメントするべきでない事を知る(5章)

「コメントのためのコメントをしない」はなぜか好きな言葉です。

まとめ

記憶は感情と結びつくと定着しやすいらしいです。
覚えたいと思ったら、その対象に対して笑ったり怒ったり悩んだりすれば良いわけですね(適当)
他にも息抜きに使える程よい本があったら教えてください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away