Book description
美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ。(本書「はじめに」より)
コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。日本語版ではRubyやgroongaのコミッタとしても著名な須藤功平氏による解説を収録。
Table of contents
- 大扉
- 原書大扉
- クレジット
- 訳者まえがき
- 面白いと、読みやすいは、違うんだよ?
- やらんもんは…勝たれへん!!
- 謝辞
- はじめに
- 本書について
- 本書の読み方
- ライセンスについて
- サンプルコードの使用
- 謝辞
- 1章 理解しやすいコード
- 1.1 「優れた」コードって何?
- 1.2 読みやすさの基本定理
- 1.3 小さなことは絶対にいいこと?
- 1.4 「理解するまでにかかる時間」は競合する?
- 1.5 でもやるんだよ
- 第I部 表面上の改善
- 2章 名前に情報を詰め込む
- 2.1 明確な単語を選ぶ
- もっと「カラフル」な単語を探す
- 2.2 tmpやretvalなどの汎用的な名前を避ける
- tmp
- ループイテレータ
- 汎用的な名前のまとめ
- 2.3 抽象的な名前よりも具体的な名前を使う
- 例:DISALLOW_EVIL_CONSTRUCTORS
- 例:--run_locally
- 2.4 名前に情報を追加する
- 値の単位
- その他の重要な属性を追加する
- 2.5 名前の長さを決める
- スコープが小さければ短い名前でもいい
- 長い名前を入力するのは問題じゃない
- 頭文字と省略形
- 不要な単語を投げ捨てる
- 2.6 名前のフォーマットで情報を伝える
- その他のフォーマット規約
- 2.7 まとめ
- 3章 誤解されない名前
- 3.1 例:filter()
- 3.2 例:Clip(text, length)
- 3.3 限界値を含めるときはminとmaxを使う
- 3.4 範囲を指定するときはfirstとlastを使う
- 3.5 包含/排他的範囲にはbeginとendを使う
- 3.6 ブール値の名前
- 3.7 ユーザの期待に合わせる
- 例:get*()
- 例:list::size()
- 3.8 例:複数の名前を検討する
- 3.9 まとめ
- 4章 美しさ
- 4.1 なぜ美しさが大切なのか?
- 4.2 一貫性のある簡潔な改行位置
- 4.3 メソッドを使った整列
- 4.4 縦の線をまっすぐにする
- 整列すべきなのか?
- 4.5 一貫性と意味のある並び
- 4.6 宣言をブロックにまとめる
- 4.7 コードを「段落」に分割する
- 4.8 個人的な好みと一貫性
- 4.9 まとめ
- 5章 コメントすべきことを知る
- 5.1 コメントするべきでは「ない」こと
- コメントのためのコメントをしない
- ひどい名前はコメントをつけずに名前を変える
- 5.2 自分の考えを記録する
- 「監督のコメンタリー」を入れる
- コードの欠陥にコメントをつける
- 定数にコメントをつける
- 5.3 読み手の立場になって考える
- 質問されそうなことを想像する
- ハマりそうな罠を告知する
- 「全体像」のコメント
- 要約コメント
- 5.4 ライターズブロックを乗り越える
- 5.5 まとめ
- 6章 コメントは正確で簡潔に
- 6.1 コメントを簡潔にしておく
- 6.2 あいまいな代名詞を避ける
- 6.3 歯切れの悪い文章を磨く
- 6.4 関数の動作を正確に記述する
- 6.5 入出力のコーナーケースに実例を使う
- 6.6 コードの意図を書く
- 6.7 「名前付き引数」コメント
- 6.8 情報密度の高い言葉を使う
- 6.9 まとめ
- 第II部 ループとロジックの単純化
- 7章 制御フローを読みやすくする
- 7.1 条件式の引数の並び順
- 7.2 if/elseブロックの並び順
- 7.3 三項演算子
- 7.4 do/whileループを避ける
- 7.5 関数から早く返す
- 7.6 悪名高きgoto
- 7.7 ネストを浅くする
- ネストが増える仕組み
- 早めに返してネストを削除する
- ループ内部のネストを削除する
- 7.8 実行の流れを追えるかい?
- 7.9 まとめ
- 8章 巨大な式を分割する
- 8.1 説明変数
- 8.2 要約変数
- 8.3 ド・モルガンの法則を使う
- 8.4 短絡評価の悪用
- 8.5 例:複雑なロジックと格闘する
- より優雅な手法を見つける
- 8.6 巨大な文を分割する
- 8.7 式を簡潔にするもう1つの創造的な方法
- 8.8 まとめ
- 9章 変数と読みやすさ
- 9.1 変数を削除する
- 役に立たない一時変数
- 中間結果を削除する
- 制御フロー変数を削除する
- 9.2 変数のスコープを縮める
- C++のif文のスコープ
- JavaScriptで「プライベート」変数を作る
- JavaScriptのグローバルスコープ
- PythonとJavaScriptのネストしないスコープ
- 定義の位置を下げる
- 9.3 変数は一度だけ書き込む
- 9.4 最後の例
- 9.5 まとめ
- 第III部 コードの再構成
- 10章 無関係の下位問題を抽出する
- 10.1 入門的な例:findClosestLocation()
- 10.2 純粋なユーティリティコード
- 10.3 その他の汎用コード
- 思いも寄らない恩恵
- 10.4 汎用コードをたくさん作る
- 10.5 プロジェクトに特化した機能
- 10.6 既存のインタフェースを簡潔にする
- 10.7 必要に応じてインタフェースを整える
- 10.8 やりすぎ
- 10.9 まとめ
- 11章 一度に1つのことを
- 11.1 タスクは小さくできる
- 11.2 オブジェクトから値を抽出する
- 「一度に1つのタスク」を適用する
- その他の手法
- 11.3 もっと大きな例
- さらなる改善
- 11.4 まとめ
- 12章 コードに思いを込める
- 12.1 ロジックを明確に説明する
- 12.2 ライブラリを知る
- 12.3 この手法を大きな問題に適用する
- 解決策を言葉で説明する
- 手法を再帰的に適用する
- 12.4 まとめ
- 13章 短いコードを書く
- 13.1 その機能の実装について悩まないで——きっと必要ないから
- 13.2 質問と要求の分割
- 例:店舗検索システム
- 例:キャッシュを追加する
- 13.3 コードを小さく保つ
- 13.4 身近なライブラリに親しむ
- 例:Pythonのリストとセット
- ライブラリの再利用はなぜいいことなのか
- 13.5 例:コーディングするよりもUnixツールボックスを使う
- 13.6 まとめ
- 第IV部 選抜テーマ
- 14章 テストと読みやすさ
- 14.1 テストを読みやすくて保守しやすいものにする
- 14.2 このテストのどこがダメなの?
- 14.3 テストを読みやすくする
- 最小のテストを作る
- 独自の「ミニ言語」を実装する
- 14.4 エラーメッセージを読みやすくする
- もっといいassert()を使う
- 手作りのエラーメッセージ
- 14.5 テストの適切な入力値を選択する
- 入力値を単純化する
- 1つの機能に複数のテスト
- 14.6 テストの機能に名前をつける
- 14.7 このテストのどこがダメだったのか?
- 14.8 テストに優しい開発
- 14.9 やりすぎ
- 14.10 まとめ
- 15章 「分/時間カウンタ」を設計・実装する
- 15.1 問題点
- 15.2 クラスのインタフェースを定義する
- 名前を改善する
- コメントを改善する
- 15.3 試案1:素朴な解決策
- このコードは理解しやすいか?
- 読みやすいバージョン
- パフォーマンスの問題
- 15.4 試案2:ベルトコンベヤー設計
- 二段階ベルトコンベヤーの実装
- これで終わり?
- 15.5 試案3:時間バケツの設計
- 時間バケツの実装
- TrailingBucketCounterを実装する
- ConveyorQueueの実装
- 15.6 3つの解決策を比較する
- 15.7 まとめ
- 付録 あわせて読みたい
- 高品質のコードを書くための書籍
- プログラミングに関する書籍
- 歴史的記録
- 解説 須藤 功平
- 実際にやる
- 実際にやるとぶつかること
- 他の人に読んでもらう
- おさらい
- 当たり前にする
- 既存のコードを読みやすくする前にやること
- 続けることが大事
- コードで伝える
- 読みやすいコードがもっと当たり前であり続けるために
- コミットメールのススメ
- まずはあなたが読む
- 添削コミット
- おさらい
- 最後に
- 著者・訳者紹介
- 奥付
Product information
- Title: リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
- Author(s):
- Release date: June 2012
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873115658
You might also like
book
初めてのSQL 第3版
SQL言語に初めて触れるプログラマを対象に、SQL言語の基本を解説します。データベースの歴史、概念などの基礎知識から、データベースの作成、クエリの基本、フィルタリング、トランザクションなどまで、実践に必要なポイントを過不足なくコンパクトにまとめ、理解を深められるよう練習問題を用意しています。改訂にあたり、「ビュー」「メタデータ」「解析関数」「大規模なデータベースの操作」「SQLとビッグデータ」の章が追加され、さらに充実しました。SQLを学び始めるのに最適の一冊です。
book
Designing Data-Intensive Applications
Data is at the center of many challenges in system design today. Difficult issues need to …
book
Clean Code: A Handbook of Agile Software Craftsmanship
Even bad code can function. But if code isn’t clean, it can bring a development organization …
book
The Rules of Programming
This philosophy-of-programming guide presents a unique and entertaining take on how to think about programming. A …