オブジェクト指向の原則やデザインパターンを駆使して
実際一行一行のコードを書く際にどのような判断を下すべきか、
その職人芸とも呼べる技術を学べる良書です。
オブジェクト指向の原則(SRPやOCPなど)やデザインパターンの
知識をある程度前提としています。
著者も書いているように、「アジャイルソフトウェア開発の奥義」
の続編ととらえると良いです。
著者の経験から、理解・保守・拡張しやすいコードを書くための
ノウハウをコードをリファクタリングしながら一つ一つ解説しており、
非常にためになります。
この本の良い点は、著者の豊富な経験に基づいた考えを学びながら、
賛成したり反対したり深く考えさせられたり、、、
それを繰り返してコードのクオリティに関する哲学を磨けることです。
正直、コードは後に進むに従い膨れ上がって難易度も増すので大変です。
しかし、信じて読めば得るものは大きいです。
その点は前記「アジャイルソフトウェア開発の奥義」と同じです。
印象に残った考えをいくつか挙げておきます。
・関数は、何らかの処理を行うか、何らかの応答を返すかの
どちらかを行うべきで、両方を行ってはなりません。
・プログラマは基本的にコメントをメンテナンスする能力がありません。
コメントは長い時間を経て嘘になるため、コメントに時間を費やすより
解説的なコードを書くことに時間を費やしましょう。
・関数の第一規則は、小さくせよ。第二の規則は、さらに小さくせよ、です。
20行を超えるような関数はほとんどあってはなりません。

無料のKindleアプリをダウンロードして、スマートフォン、タブレット、またはコンピューターで今すぐKindle本を読むことができます。Kindleデバイスは必要ありません。
ウェブ版Kindleなら、お使いのブラウザですぐにお読みいただけます。
携帯電話のカメラを使用する - 以下のコードをスキャンし、Kindleアプリをダウンロードしてください。
Clean Code アジャイルソフトウェア達人の技 大型本 – 2009/5/28
Robert C. Martin
(著),
花井 志生
(翻訳)
- 本の長さ528ページ
- 言語日本語
- 出版社アスキー・メディアワークス
- 発売日2009/5/28
- ISBN-104048676881
- ISBN-13978-4048676885
この商品を買った人はこんな商品も買っています
ページ 1 以下のうち 1 最初から観るページ 1 以下のうち 1
登録情報
- 出版社 : アスキー・メディアワークス (2009/5/28)
- 発売日 : 2009/5/28
- 言語 : 日本語
- 大型本 : 528ページ
- ISBN-10 : 4048676881
- ISBN-13 : 978-4048676885
- Amazon 売れ筋ランキング: - 1,087,524位本 (本の売れ筋ランキングを見る)
- カスタマーレビュー:
著者について
著者をフォローして、新作のアップデートや改善されたおすすめを入手してください。

著者の本をもっと発見したり、よく似た著者を見つけたり、著者のブログを読んだりしましょう
カスタマーレビュー
星5つ中4.3つ
5つのうち4.3つ
2グローバルレーティング
評価はどのように計算されますか?
全体的な星の評価と星ごとの割合の内訳を計算するために、単純な平均は使用されません。その代わり、レビューの日時がどれだけ新しいかや、レビューアーがAmazonで商品を購入したかどうかなどが考慮されます。また、レビューを分析して信頼性が検証されます。
-
トップレビュー
上位レビュー、対象国: 日本
レビューのフィルタリング中に問題が発生しました。後でもう一度試してください。
2010年2月28日に日本でレビュー済み
Amazonで購入
2017年3月29日に日本でレビュー済み
きれいなコードを書くためにどうすればいいかということをテーマにした本。Javaをサンプルコードとして,汚い状態のコードからきれいな状態のコードにするにはどうすればいいか,けっこう具体的に書いてある。後半に行くにつれて,コードの量が増えるので,Javaに詳しくないとあまりおもしろくないと思う。
前書きのp. 14にかかれていた5S(整理,整頓,清掃,清潔,しつけ)や神は細部に宿る,p. 15「小さなことに忠実な人間とは,多くのことにも忠実なものです。」など,細かいことにこだわることは大きな成果をもたらすということをとても強く主張していたよかった。
個人的に特に興味を持ったのは,「第5章 書式化」と「第6章 オブジェクトとデータ構造」だ。
「第5章 書式化」ではコードの書き方の中で,配置について特に記述された章だ。垂直方向の配置(空行を入れるかどうか)や,水平方向の位置揃え(インデント,アライメント)など。この中で,p. 122-123の内容が印象に残った。
インスタンス変数をどこに置くかという議論で,クラスの頭で置くべきと主張されていた。これは,うまく設計されたクラスではインスタンス変数はひじょうに多くのメソッドで使用されるからとのこと。
その他,依存関数をどういう順番で記述するかというテーマでは,呼び出し側を呼び出される側の上に置くべきとあった。この理由は,上から下にコードを読む際に,自然な流れとなるからだった。新聞の見出しと同じように,大きな概要が上にあり,詳細が下の方に来ると呼びだされている関数を見つけるのが簡単になり,モジュール全体を読むのがはるかに簡単になるとのことだった。
p. 129では水平方向の位置揃えについての議論があった。例えば,以下のように変数の代入の羅列が合ったときに,空白の位置で揃えるかどうかという議論がある。
private Socket socket;
private InputStream input;
個人的には見やすいのでこの形式を採用しているのだが,筆者はこの欠点を指摘していた。
位置合わせをすると,間違ったことが強調され真の意図に目を向けることを妨げられてしまう。例えば,右端の列が強調され,左端の型を見逃してしまうといった具合に。
当初は著者も水平方向の位置揃えをしていたようだが,この欠点が気になりやめたようだ。位置揃えが必要になるということは,位置が揃っていないことが問題なのではなく,リストが長いことが問題だとも主張があった。
「第6章 オブジェクトとデータ構造」では,p. 141の内容が印象に残った。手続き型とオブジェクト型の双方の利点と欠点が指摘されていて参考になった。
手続き型:新たな関数を既存のデータ構造に影響を与えずに追加できるが,新たなデータ構造を追加するには既存の関数全ての変更が必要。
オブジェクト型:既存の関数を変えることなく,新たなデータ構造(クラス)を追加できるが,新たな関数を追加する場合には,全てのクラスの変更が必要。
後半はけっこう読み流してしまったが,上記の考え方が参考になった。
前書きのp. 14にかかれていた5S(整理,整頓,清掃,清潔,しつけ)や神は細部に宿る,p. 15「小さなことに忠実な人間とは,多くのことにも忠実なものです。」など,細かいことにこだわることは大きな成果をもたらすということをとても強く主張していたよかった。
個人的に特に興味を持ったのは,「第5章 書式化」と「第6章 オブジェクトとデータ構造」だ。
「第5章 書式化」ではコードの書き方の中で,配置について特に記述された章だ。垂直方向の配置(空行を入れるかどうか)や,水平方向の位置揃え(インデント,アライメント)など。この中で,p. 122-123の内容が印象に残った。
インスタンス変数をどこに置くかという議論で,クラスの頭で置くべきと主張されていた。これは,うまく設計されたクラスではインスタンス変数はひじょうに多くのメソッドで使用されるからとのこと。
その他,依存関数をどういう順番で記述するかというテーマでは,呼び出し側を呼び出される側の上に置くべきとあった。この理由は,上から下にコードを読む際に,自然な流れとなるからだった。新聞の見出しと同じように,大きな概要が上にあり,詳細が下の方に来ると呼びだされている関数を見つけるのが簡単になり,モジュール全体を読むのがはるかに簡単になるとのことだった。
p. 129では水平方向の位置揃えについての議論があった。例えば,以下のように変数の代入の羅列が合ったときに,空白の位置で揃えるかどうかという議論がある。
private Socket socket;
private InputStream input;
個人的には見やすいのでこの形式を採用しているのだが,筆者はこの欠点を指摘していた。
位置合わせをすると,間違ったことが強調され真の意図に目を向けることを妨げられてしまう。例えば,右端の列が強調され,左端の型を見逃してしまうといった具合に。
当初は著者も水平方向の位置揃えをしていたようだが,この欠点が気になりやめたようだ。位置揃えが必要になるということは,位置が揃っていないことが問題なのではなく,リストが長いことが問題だとも主張があった。
「第6章 オブジェクトとデータ構造」では,p. 141の内容が印象に残った。手続き型とオブジェクト型の双方の利点と欠点が指摘されていて参考になった。
手続き型:新たな関数を既存のデータ構造に影響を与えずに追加できるが,新たなデータ構造を追加するには既存の関数全ての変更が必要。
オブジェクト型:既存の関数を変えることなく,新たなデータ構造(クラス)を追加できるが,新たな関数を追加する場合には,全てのクラスの変更が必要。
後半はけっこう読み流してしまったが,上記の考え方が参考になった。