Slide 1

Slide 1 text

理解しやすいコード / 名前について 佐々木千奈

Slide 2

Slide 2 text

リーダブルコードの全体像 ● 第0部 ○ はじめに ○ 1章 理解しやすいコード ● 第1部 表面上の改善 ○ 2章 名前に情報を詰め込む ○ 3章 誤解されない名前 ○ 4章 美しさ ○ 5章 コメントするべきことを知る ○ 6章 コメントは正確で簡潔に ● 第2部 ループとロジックの単純化 ○ 7章 制御フローを読みやすくする ○ 8章 巨大な式を分割する ○ 9章 変数と読みやすさ ● 第3部 コードの再構成 ○ 10章 無関係の下位問題を抽出する ○ 11章 一度に1つのことを ○ 12章 コードに思いを込める ○ 13章 短いコードを書く ● 第4部 選抜テーマ ○ 14章 テストと読みやすさ ○ 15章 「分/時間カウンタ」を設計・実装する ● 付録 ● 解説

Slide 3

Slide 3 text

1章 理解しやすいコード

Slide 4

Slide 4 text

キー1:コードは理解しやすくなければならない ● 筆者が集めてきた「ひどいコード」を見て、なぜそのコードがひど いのか、それを改善するためにはどんな原則や技法が使えるの かと調べてみたところ、コードは理解しやすくなければならないと いうたった1つの原則にたどり着いた。

Slide 5

Slide 5 text

優れたコードって何? ● 何でしょう

Slide 6

Slide 6 text

キー2:コードは他の人が最短時間で理解できるように書かな ければならない ● コードは他の人が最短時間で理解できるように書かなければならな い、これが筆者がたどり着いた読みやすさの基準。 ● この本ではこれを「読みやすさの基本定理」としている。 ● 「他の人」に読ませないコードだとしても、「他の人」というのは6か月 後の自分自身かも。

Slide 7

Slide 7 text

2章 名前に情報を埋め込む

Slide 8

Slide 8 text

名前に情報を詰め込むTips ● 明確な単語を選ぶ ● tmp や retval などの汎用的な名前を避ける ● 抽象的でなく、具体的な名前を使って、物事を詳細に説明する ● 変数名に大切な情報を追加する ● スコープの大きな変数には長い名前を着けてOK ● 大文字やアンダースコアなどに意味を含める

Slide 9

Slide 9 text

明確な単語を選ぶ ● getPageという曖昧な単語より、fetchPage()やDownloadPage() な どの明確な単語の方が良い

Slide 10

Slide 10 text

tmp や retval などの汎用的な名前を避ける ● 関数の内部でもtmpやretvalなどの空虚な名前ではなく、その物の 値についてや変数の目的を表した名前をつける ● 例: 変数を2乗の足し算の結果の格納に使うなら、retvalよりも sum_squaresのほうが◎

Slide 11

Slide 11 text

抽象的でなく、具体的な名前を使って、物事を詳細に説明する ● Googleでは使ってはいけないコンストラクタを使えなくするためのマ クロを、DISALLOW_EVIL_CONSTRUCTORS(♰許されざるコン ストラクタ♰)と名付けていた。 これでは、許可しないコンストラクタが具体的に分からないので、コ ピーとアサインを許可しないのであれば、 DISALLOW_COPY_AND_ASSIGNのように許可されないコンスト ラクタを示すために具体的に書く。

Slide 12

Slide 12 text

変数名に大切な情報を追加する ● ms,mbなどの単位や、セキュリティに気を付ける必要がある plaintext_passwordなど、重要な属性は変数名に記録する

Slide 13

Slide 13 text

スコープの大きな変数には長い名前をつける ● 名前に必要な情報を追加していく中で、名前が長くなってしまっても タブで補完できるので躊躇しない。 ● 短いスコープでは短い名前をつけてもOK

Slide 14

Slide 14 text

大文字やアンダースコアなどに意味を含める ● クラス名はCamelCase、変数名はlower_separatedなど、名前のフォーマットに意 味を持たせる

Slide 15

Slide 15 text

変数や関数などは名前を見ただけで情報 が分かるように命名する!!!

Slide 16

Slide 16 text

3章 誤解されない名前

Slide 17

Slide 17 text

誤解されない名前をつけるためのTips ● filiter ● Clip ● minとmax ● 範囲にはfirstとlast ● 包括 / 排他的範囲にはbeginとend ● ブール値の名前 ● ユーザの期待に合わせる ● 複数の名前を検討する

Slide 18

Slide 18 text

filter ● データベースの問い合わせ結果を処理するコードを書いているとし て、filterという名前より、選択するならselect()、除外するなら exclude()とするなどの工夫をする

Slide 19

Slide 19 text

Clip(text,length) ● テキストを切り取って「...」をつける関数で、上記のままだとlengthが 最後から切り取る文字数なのか最大文字数なのか分からないの で、max_charsなどの名前にする

Slide 20

Slide 20 text

限界値にはminとmax ● 限界値には、TOO_BIG_LIMITなどより、minとmaxを使う

Slide 21

Slide 21 text

包括的範囲の指定にはfirstとlast ● start,stopだとどこで終了するのかわからないので、包括的範囲(最 初から最後までを含む)を表す際はfirstとlastを使う

Slide 22

Slide 22 text

包含 / 排他的範囲にはbeginとend ● 包含 / 排他的範囲(最初は含むが、最後は含まない場合)はbegin とendを使う

Slide 23

Slide 23 text

ブール値の名前はtrueとfalseの意味を明確にする ● read_passwordだと曖昧、need_passwordや user_is_authenticatedなどの名前にしたほうが良い。 ● ×disable_ssl ◎use_ssl のほうがいい。

Slide 24

Slide 24 text

ユーザーの期待に合わせる ● 一般的な関数名や変数名の使い方に従う。 ● 例えば、get() や size() には軽量なメソッドが期待されている。

Slide 25

Slide 25 text

複数の名前を検討する ● 自分で名前を決定する前に「本当に大丈夫か?」と問う。そして、誤 解されない名前かどうかを想像してから、名前を決定する

Slide 26

Slide 26 text

誤解されないような名前をつける。 批判的になって考える。