リーダブルコードを読了しました2018-12-01リーダブルコードを読了しましたBookおすすめ頂いたリーダブルコードを読了しました。個人的に多くの知見を得ることができ、また、汎用的に利用できる知識が多くこれからのコーディングに少なからず影響を与えてくれる書籍でした。今日はその中でも肝に命じておきたいこと、所感などまとめておきたいと思います。無関係の開問題を抽出するコードに思いを込めるまとめ名前に情報を詰め込むプログラムに使用される変数名や関数名にはtmpなどハッキリしないものが多い。sizeやgetのように、一見問題なさそうな名前も、詳細な情報が含まれていないことがある。本書では、名前を考える際に下記6点に注意することを推奨している。明確な単語を選ぶ汎用的な名前を避ける(あるいは、使う状況を選ぶ)抽象的な名前よりも、具体的な名前にする接尾辞や接頭辞を使って情報を追加する名前の長さを決める名前のフォーマットで情報を伝える上記の中から、いくつか心当たりのある部分をピックアップしてみます。汎用的な名前を避ける(あるいは、使う状況を選ぶ)個人的に、関数の戻り値などにretなどの変数名をつけてしまう時があります。この変数から読み取れる情報としては戻り値という当たり前の情報だけで、それ以外はないですよね。2乗の合計を返す場合はsum_squaresなど、その変数(今回は戻り値)にどのような値が格納されているかを連想できるような名前を付けるべきですよね。すれば変数の目的を事前に伝えることが可能となりますし、バグの発見確度もあがりそうです。Date()).getTime()時分?秒?正解はミリ秒です。今回の場合は、下記のような変数名にするとわかりやすいですよね。Date()).getTime()このように、接尾辞や接頭辞に属性を追加するだけで、変数の意味の理解度が向上するはずです。名前(変数名、引数名など)は短いコメントだと思い、命名することが大切なようです。本書には、名前が「他の意味と間違えられることはないだろうか?」と何度も自問自答することが大切だと記載されています。範囲を指定する場合はfirstとlastを使うよくコーディングしていて出くわすのが、範囲を絞ったコードですよね。stop=4)[2,3]?あるいは[2,3,4]・・・?コードを見ただけで判断するのはとても難しいと思います。範囲を指定する場合はfirstとlastを使うと良いみたいです。(この変数名が正しく聞こえるから)包含/排他的範囲にはbeginとendを使う上記とは切り分けて、包含/排他的範囲を示す場合はbeginとendを用いるのが良いみたい。コメントすべきことを知るコメントを書くことは良いことだと思いますが、何でもかんでもコメントとして残すべきではありませんよね。コメントを読むとその分だけコードを読む時間も増えますし、画面を占領します。よって、コメントには読むだけの、また、画面を占領させるだけの価値を持たせる必要があると思います。本書では、この価値のあるコメントについても言及しています。コードからすぐに分かることをコメントとして書かない新しい情報を提供するわけでもなく、読み手がコードを理解しやすくなるわけでもないコメントは書かないべきです。分かるという部分がとても重要です。`*`.join(line.split('*')[:2])上記コメントは「新しい情報」を提供できてはいませんよね。コードを見ればどのように動くかは分かると思います。コードを理解するよりも、コメントを読んだ方が早く理解できると感じたはずです。よって、このコメントは価値のあるコメント(コメントとして記載した方が良いコメント)ということになりそうです。通常は「補助的なコメント」(コードの読みにくさを補うコメント)が必要になるケースはあまりないようです。優れたコメント)」と呼ぶそうです。自分も業務の中で、「ここは補足的なコメントが必要だよな」と思い、良心からコメントを残していますが、そもそものコードがヒドいからコメントが必要だったんですね・・・。いった点も意識しながらコーディングすると、同じ量のコードを書いてもスキルの上達具合が全然違うんだろうと感じました。本章の最後にとても簡潔なまとめが載っていたので、転記させていただきます。「コメントはWHATではなく(あるいはHOWではなく)WHYを書こう」とうアドバイスを耳にしたことがあるかもしれない。確かにキャッチーな言葉だけど、少し単純化しすぎていて、人によっては取り方が違うかもしれない。ぼくたちからのアドバイスはこうだ。これなら、WHATでもHOWでもWHYでも(あるいは3つ全部でも)書ける。制御フローを読みやすくする条件やループなどの制御フローはできるだけ「自然」にする。コードの読み手が立ち止まって読み返したりしないように書く。