きれいなコードを書こう5

今日もがんばるぞ!今日は4章から。

…一応、元ネタの本のリンクをちゃんと貼っておこう。絶対見つからないとは思うけど、万一があるから・・・
www.oreilly.co.jp

前回までのまとめ

第三章は「誤解されない名前をつけよう」という話だった。
・包含/排他的範囲にはbeginとendを使う
閾値を含むか含まないか、といった命名には困ることがあると思うが、とりあえずbeginとendを使っておこうな!
・ブール値の名前
ブール値を格納する変数の名前は、格納するtrue/falseの値が何のためのものか分かるようにしてあげること。
Check_〇〇ではなく、need_Check〇〇で「チェックが必要ならtrue入れてね」、checked_Bool_〇〇で「チェックした結果が入ってます」、といった書き分けを。
・ユーザの期待に合わせる
「期待」というか「予想」というべきか。めちゃくちゃ簡単な処理するっぽいメソッド名なのに、異様にメモリ食うような中身にしたらダメよという話。
一般的に「この名前ならこう動くんだろうな」っていう予想を悪い意味で裏切るのはやめよう。
・複数の名前を検討する
名前を考えるときは、「本当にその名前がベストか?」を考えていくつかの候補から最善策を選ぼう。templateだったら「あくまでtemplateだからこれは使わないってことなのかな・・・?」「templateをお手本として、継承したものを使用するんだぞ」という意味か、解釈が複数存在してしまうので、defaultとかinheritとかの名前も検討しよう。

最善の名前とは「誤解されない名前」だ。しっかり吟味していこう。
二章では「抽象的な名前ではなく具体的な名前を使おう」という話だった。同じテーマの本なので当然だが、どちらも「意味が可能な限り一意になる名前をつけていこうね」という言葉にまとめられると思う。

第四章「美しさ」

ここまでがコードの「中身」の分かりやすさに着目したものとするなら、この章では「見た目」の話に移行していると言える。

なぜ美しさが大切なのか?

はっきり言えば、「その方が理解しやすいから」だ。中身を読んで初めて秩序がつかめるより、パッと見た瞬間の印象で秩序を感じられるほうが理解しやすい。
public変数とprivate変数が入り乱れて定義されていたり、インデントがずれていたりすると、見た目だけで読みたくなるし、理解の障壁となる。

一貫性のある簡潔な改行位置

三つのインスタンスを作るとする。

ConnectDataBase JuneReservation = new ConnectDataBase("192.***.***.1", 5000, "2020/06/22");
ConnectDataBase OctoverReservation = 
    new ConnectDataBase("192.***.***.125", 15000, "2020/10/05");
ConnectDataBase AugustReservation =
    new ConnectDataBase("192.***.***.255", 11000, "2020/08/31");

こんな感じで。
コーディング規定で「一行〇文字まで」っていうのが決められていて第二引数の桁数で改行が入ってしまったという設定。
書き方は間違っていない(よね?)が、ぱっと見のレイアウトが異なるので理解しにくい。

ConnectDataBase JuneReservation = 
    new ConnectDataBase("192.***.***.1"  , 5000 , "2020/06/22");

ConnectDataBase OctoverReservation = 
    new ConnectDataBase("192.***.***.125", 15000, "2020/10/05");

ConnectDataBase AugustReservation =
    new ConnectDataBase("192.***.***.255", 11000, "2020/08/31");

こんな感じ・・・?
はてぶろ上だとレイアウトがエディタと違うのであくまでイメージとして。。。

メソッドを使った整列

引き続きレイアウトの話になるが、再現が困難なので言葉で書く。
同じような処理が複数行にわたって続いているなら、メソッドにして切り出し、本来そこでやりたい処理だけがスパッと分かるようにしてあげるべき。メソッド化のメリットを語っているところなので、まあオブジェクト指向の話とも言えるのだが、やはり見た目を分かりやすくするうえでもこの辺は大事ということなのだろう。

縦の線をまっすぐにする

インデントや、同様の処理の最初の文字の位置などを揃えてあげる。これにより、タイプミスが検出しやすくなるし、ループ系の処理ならその終端が分かりやすくなり、コードを理解する一助になる。
「似ているコードは似ているように見せる」と書いてあった。「読めば分かるでしょ」ではなく、とにかく視覚的に分かりやすく書くことを意識したい。

一貫性と意味のある並び

複数の変数を定義するときと、それらを呼び出すときとで並び順が変わっていると、抜け漏れが発生していることに気が付きにくくなる。また、「この順番で処理しないと動かないってことかな?」と言った勘繰りを生むきっかけになってしまう(本当にそうなら、定義順を変えるべきだ)。
思いついたままに書くだけでなく、後から見直して自分でも引っ掛かるところは修正しよう。

今日はここまで

コメントが短いので雑になってきた感があるが、本書の方もコード実例で紹介している部分が多いので表現しにくい・・・実際のコーディングで自分の手になじませていこう