DEV Community

kaede
kaede

Posted on

リーダブルコード 1-2 章 理解し易いコードの基本定理と変数名の決め方

この本の何が良いのか

Java や C++ の知識は必要ない、何がわかり易いコードなのかがわかってくる。

例題は殆どが具体的でわかり易い。

是非買って読みましょう!


どこで買ったのか

https://www.oreilly.co.jp/books/9784873115658/

オライリー公式ストア、電子版 PDF 2112 円

kindle にはない。


なぜ読み始めたか

カエデ 「よし、これで実装できたぞ! しっかりと要件は満たしてるし、Pull Request 提出っと!」
レビュワー「ここの変数名、何でこれにしたんですか?気持ち悪いって思わない? こういうのやめてほしいんですよね、レビューにコスト、人件費が余分にかかってる認識を持ってください」

と、変数の命名で厳しい指摘を受けたため。


以下にフロントエンドのジュニアエンジニアな私が書いてあって理解できたことをまとめた。

U01 理解しやすいコード

1.1

{ flag ? x + x : x * x }
Enter fullscreen mode Exit fullscreen mode

このような三項演算子よりも

if (flag) {
  return x + x
} else {
  return x * x
}
Enter fullscreen mode Exit fullscreen mode

このような if 文のネストの方が見やすいと書いてある

1.2

基本的な考え方として、

コードは他の人が最短時間で理解できるように書かなければいけない。

という基本定理があるらしい。

自分が最短時間で理解できるコードでもダメで
他人が時間をかければ理解できるコードでもダメ

だと解釈する。

また、6ヶ月後には自分のコードでも他の人のコードに見えることがあるという。



U02 名前に情報を詰め込む

2.1

GetPage をやめて FetchPage か DownlaodPage にするべき

Class のなかの Size() は何のサイズかわからないので
Height(), MemoryBytes() などにするべき

Stop よりも
取り消しできない場合は Kill で
再開できる場合は Pause にする

send よりも dispatch や route
make よりも create や generate や add

などと明確な関数名を使うべき。


2.2

中間的な役割で、すぐに破棄されるにしても

returnValue += [i] * v [i]
Enter fullscreen mode Exit fullscreen mode

だったら

sum_squares += [i] * v [i]
Enter fullscreen mode Exit fullscreen mode

にしたほうが違う動作を間違えて書いてある時にデバックしやすい。

temp = user.name
temp += user.phone_number
temp += user.email
Enter fullscreen mode Exit fullscreen mode

だったら temp は user_info にするべき。


2.3

デバック情報を印字してサーバーを動かす --run_locally のオプションは
--extra_logging にするべき


2.4

start が ミリ秒であれば start_ms
delay が 秒であれば delay_secs
size が メガバイトであれば size_mb

のように、単位があれば単位も追加すべきだし

エスケープ前のコメントは unescaped_comment
暗号化前のパスワードは plaintext_password
utf8 に変えた html は html_utf8

のように、重要な情報があるデータはその補足を変数名に入れるべき。


2.5

めちゃくちゃ長い名前を安直につけてはいけない

スコープ、その関数の行数が短ければ短めの名前でいい
しかし、スコープがとても長かったりグローバルだったら長くても一目瞭然名前にするべき。

無意味な動詞をつけてはいけない

ConvertToString は ToString
DoServerLoop は ServerLoop

にするべき。


2.6

C++ の場合だと
クラス名は CamelCase
クラスのメンバ変数(プロパティ)は member_
変数名は lower_separated
定数名は kConstantName

というように、物によってフォーマットを変える方針もある。


2.7

とにかく変数名を見ただけで情報がわかるようにコードを書こう!

3章の誤解されない関数名編にに続く!

Oldest comments (0)