関連サイト
本書の関連ページが用意されています。
内容紹介
プロと呼ばれるプログラマになるためには、洗練されたコード(クリーンコード)を書くことが必須といえます。本書を通して、クリーンコードを書くための原則、パターン、実践について学んでください。
クリーンコードを書くための「心地よい」原則を書き並べ、あなたがうまくやるだろうと信じることは可能です(言い換えれば、あなたを自転車に乗せ、転ばせるということです)。このようなやり方をとったら、我々はどんな先生となり、あなたはどんな生徒になるのでしょう?
いえいえ。この本でやろうとしている方法はこうではありません。
クリーンコードを書くことを身につけるには努力が必要です。原則とかパターンといった知識を身につけるだけではだめなのです。実際に汗をかかなければならないのです。自分自身で実践してみて、そして失敗してみなければならないのです。また、他の人が実践しているのを、また失敗しているのを見なければならないのです。彼らがつまづき、やり直すのを観察しなければならないのです。彼らが判断に苦しむのを見て、間違った判断の結果として、彼らが支払うはめになった代償を見なければならないのです。
この本を読む間は、いつでも一所懸命に作業ができるように準備しておいてください。この本は飛行機の中で読み、到着するまでに読み終わってしまうような「心地よい」本ではありません。この本はあなたに作業をさせます。しかも激しくです。どんな作業をすることになるのでしょうか?大量のコードを読むことになります。そして、どんなコードが正しくて、どんなコードが間違っているかについて考えなければなりません。モジュールを切り離したり、ふたたび元どおりにしたりすることも要求されます。これには、時間と努力を要しますが、我々はこの作業に意味があると考えています。
(「序論」より)
書誌情報
- 著者: Robert C. Martin(著), 花井志生(訳)
- 発行日: 2017-12-18 (紙書籍版発行日: 2017-12-18)
- 最終更新日: 2017-12-18
- バージョン: 1.0.0
- ページ数: 529ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: アスキードワンゴ
対象読者
著者について
Robert C. Martin
Robert Cecil Martin (ボブおじさんとも知られている) はアメリカのソフトウェアエンジニア兼著者であり、アジャイルマニフェストの起草者の一人でもある。コンサルティングファームUncle Bob Consulting LLCと、書籍や経験を元にした動画サービスClean Codersを経営している(Wikipediaより)。
目次
前書き
序論
- 謝辞
カバーの絵について
第1章 クリーンコード
- そこにコードありき
- 粗悪なコード
- 混乱のために支払う総コスト
- 道場
- 我々が著者です
- ボーイスカウトの規則
- 続編と原則
- 結論
- 参考文献
第2章 意味のある名前
- 序文
- 意図が明確な名前にする
- 偽情報を避ける
- 意味のある対比を行う
- 発音可能な名前を使用する
- 検索可能な名前を用いる
- エンコーディングを避ける
- ハンガリアン記法
- メンバープレフィクス
- インターフェイスと実装
- メンタルマッピングを避ける
- クラス名
- メソッド名
- 気取らない
- 1つのコンセプトには1つの単語
- ごろ合わせをしない
- 解決領域の用語の使用
- 問題領域の用語の使用
- 意味のある文脈を加える
- 根拠のない文脈を与えない
- 最後に
第3章 関数
- 小さいこと!
- 1つのことを行う
- 1つの関数に1つの抽象レベル
- switch文
- 内容をよく表す名前を使う
- 関数の引数
- 副作用を避ける
- コマンド・照会の分離原則
- 戻りコードよりも例外を好む
- DRY(Don't Repeat Yourself)原則
- 構造化プログラミング
- なぜ関数をこのように書くのでしょう?
- 結論
- SetupTeardownIncluder
- 参考文献
第4章 コメント
- コメントで、ダメなコードを取り繕うことはできない
- 自分自身をコードの中で説明する
- よいコメント
- よくないコメント
- 参考文献
第5章 書式化
- 書式化の目的
- 縦方向の書式化
- 横方向の書式化
- チームの規則
- アンクルボブの書式化規則
第6章 オブジェクトとデータ構造
- データ抽象化
- データ/オブジェクトの非対称性
- デメテルの法則
- データ転送オブジェクト
- 結論
- 参考文献
第7章 エラー処理
- リターンコードではなく、例外を使用する
- 最初にtry-catch-finally文を書く
- 非チェック例外を使用する
- 例外で状況を伝える
- 呼び出し元が必要とする例外クラスを定義する
- 正常ケースのフローを定義する
- nullを返さない
- nullを渡さない
- 結論
- 参考文献
第8章 境界
- サードパーティーのコードを使用する
- 境界の調査と学習
- log4jを学習する
- 学習テストは、タダ以上のものである
- まだ存在しないコードを使用する
- きれいな境界
- 参考文献
第9章 単体テスト
- TDD三原則
- テストをきれいに保つ
- クリーンテスト
- 1つのテストに1つのアサート
- F.I.R.S.T.
- 結論
- 参考文献
第10章 クラス
- クラスの構成
- クラスは小さくしなければならない!
- 変更のために最適化する
- 参考文献
第11章 システム
- あなたは、街をどうやって造りますか?
- システムを使うことと、構築することとを分離する
- スケールアップ
- 横断的関心事
- Javaプロキシ
- Pure JavaのAOPフレームワーク
- AspectJアスペクト
- システムアーキテクチャのテスト実行
- 意思決定を最適化する
- 論証可能な価値を追加する際には、標準を賢く使用する
- システムはドメイン特化言語を必要とする
- 結論
- 参考文献
第12章 創発
- 創発的設計を通して、洗練する
- 単純な設計への規則1:全テストを実行する
- 単純な設計への規則2~4:リファクタリング
- 重複の排除
- 表現に富む
- クラスとメソッドを最小限に
- 結論
- 参考文献
第13章 同時並行性
- なぜ同時並行性が必要なのか?
- 難問
- 同時並行性防御原則
- 使用しているライブラリを知る
- スレッドセーフなコレクション
- 実行モデルを見分ける
- 同期化メソッド間の依存関係に注意
- 同期化セクションを小さくする
- 正確な終了処理コードを書くのは難しい
- スレッド化されたコードのテスト
- 結論
- 参考文献
第14章 継続的改良
- Argsの実装
- Argsクラス。大雑把な下書き
- 文字列引数
- 結論
第15章 JUnitの内部
- JUnitフレームワーク
- 結論
第16章 SerialDateのリファクタリング
- まずは、動作するようにする
- そして正しく直した
- 結論
- 参考文献
第17章 においと経験則
- コメント
- 環境
- 関数
- 一般
- Java
- 名前
- テスト
- 結論
- 参考文献
付録A 同時並行性II
- クライアント/サーバーの例
- 結論
- 実行経路候補
- さらに深層へ
- ライブラリを知る
- メソッド間の依存性が同時並行コードを破壊する
- スループットを高める
- デッドロック
- マルチスレッドコードをテストする
- マルチスレッドコードのテストのツールによるサポート
- チュートリアル:コードサンプルの全体