Dustin Boswell氏の著書
「The Art of Readable Code: Simple and Practical Techniques for Writing Better Code」
がとても参考になったのでメモしておきます。
以下の内容が書かれています。
プログラミングに携わる人は、読んで損はない内容です。
1 コードは理解しやすいべきです/CODE SHOULD BE EASY TO UNDERSTANDING
- 何がコードを "良くする"か?/What Makes Code “Better”?
- 可読性の基本定理/The Fundamental Theorem of Readability
- より小さなものはいつもより良いですか?/Is Smaller Always Better?
- 「理解するまでの時間」は他の目標と矛盾していますか?/Does Time-Till-Understanding Conflict with Other Goals?
- ハードパート/The Hard Part
Part1:表面レベルの改善/SURFACE-LEVEL IMPROVEMENTS
2 名前に情報をパッキングする/PACKING INFORMATION INTO NAMES
- 具体的な単語を選択する/Choose Specific Words
- tmpやretval のような一般的な名前を避ける/Avoid Generic Names Like tmp and retval
- 抽象的な名前よりも具体的な名前を優先する/Prefer Concrete Names over Abstract Names
- 名前に追加情報を添付する/Attaching Extra Information to a Name
- 名前はどのくらいの長さにするべきか?/How Long Should a Name Be?
- 名前の書式を使用して意味を伝える/Use Name Formatting to Convey Meaning
- サマリー/Summary
3 誤解されない名前/NAMES THAT CAN’T BE MISCONSTRUED
- 例:Filter()
- 例:Clip(text, length)
- 制限を含むminとmaxを選ぶ/Prefer min and max for (Inclusive) Limits
- 範囲を含むfirst とlastを選ぶ/Prefer first and last for Inclusive Ranges
- 含む-含まない範囲のbeginとendを選ぶ/Prefer begin and end for Inclusive-Exclusive Ranges
- ブール値の命名/Naming Booleans
- ユーザーの期待に一致する/Matching Expectations of Users
- 例:複数の名前候補の評価/Evaluating Multiple Name Candidates
- 要約/Summary
4 美学/AESTHETICS
- 美学はなぜ重要ですか?/Why Do Aesthetics Matter?
- 一貫性のあるコンパクトな改行の再配置/Rearrange Line Breaks to Be Consistent and Compact
- メソッドを使用して不規則性を整理する/Use Methods to Clean Up Irregularity
- 役立つ場合に列の整列を使用する/Use Column Alignment When Helpful
- 意味のある順序を選んで、それを一貫して使用する/Pick a Meaningful Order, and Use It Consistently
- 宣言をブロックに整理する/Organize Declarations into Blocks
- コードを「段落」に分割する/Break Code into “Paragraphs”
- 個人的なスタイルと一貫性/Personal Style versus Consistency
- 要約/Summary
5 コメントすることを知る/KNOWING WHAT TO COMMENT
- コメントしないもの/What NOT to Comment
- 思考を記録する/Recording Your Thoughts
- 読者の靴に身を置く/Put Yourself in the Reader’s Shoes
- 最終的な考え - ライターのブロックを乗り越える/Final Thoughts—Getting Over Writer’s Block
- 要約/Summary
6 コメントを精密かつコンパクトにする/MAKING COMMENTS PRECISE AND COMPACT
- コメントをコンパクトに保つ/Keep Comments Compact
- あいまいな代名詞を避ける/Avoid Ambiguous Pronouns
- ずさんな文章を磨く/Polish Sloppy Sentences
- 関数の振る舞いを正確に記述する/Describe Function Behavior Precisely
- コーナーケースを示す入出力の例を使用する/Use Input/Output Examples That Illustrate Corner Cases
- コードの意図を述べる/State the Intent of Your Code
- 「名前付き関数パラメータ」コメント/“Named Function Parameter” Comments
- 情報密な言葉を使う/Use Information-Dense Words
- 要約/Summary
Part2:ループとロジックの簡素化/SIMPLIFYING LOOPS AND LOGIC
7 読みやすい制御フローを作成する/MAKING CONTROL FLOW EASY TO READ
- 条件文中の引数の順序/The Order of Arguments in Conditionals
- ifーelseブロックの順序/The Order of if-else Blocks
- ?:条件式(a.k.a. "三項演算子")/ ?: Conditional Expression (a.k.a. “Ternary Operator”)
- do-whileループを避ける/Avoid do-while Loops
- ファンクションからの早期リターン/Returning Early from a Function
- 悪名高いGoto/The Infamous goto
- ネスティングの最小化/Minimize Nesting
- 実行の流れに従うことができますか?/Can You Follow the Flow of Execution?
- 要約/Summary
8 巨大な表現を分解する/BREAKING DOWN GIANT EXPRESSIONS
- 説明変数/Explaining Variables
- 要約変数/Summary Variables
- デ・モルガンの法則を使う/Using De Morgan’s Laws
- 短絡ロジックの悪用/Abusing Short-Circuit Logic
- 例:複雑なロジックとの闘い/Example: Wrestling with Complicated Logic
- 巨大なステートメントを分解する/Breaking Down Giant Statements
- 表現を簡素化する別の創造的方法/Another Creative Way to Simplify Expressions
- 要約/Summary
9 変数と読みやすさ/VARIABLES AND READABILITY
- 変数の排除/Eliminating Variables
- 変数の範囲を縮小する/Shrink the Scope of Your Variables
- 追記型変数の方が望ましい/Prefer Write-Once Variables
- 最終的な例/A Final Example
- 要約/Summary
Part3:コードを再編成する/REORGANIZING YOUR CODE
10 非関連除外項目/EXTRACTING UNRELATED SUBPROBLEMS
- 導入例:findClosestLocation()
- 純粋なユーティリティコード/Pure Utility Code
- その他の汎用コード/Other General-Purpose Code
- 多くの汎用コードを作成する/Create a Lot of General-Purpose Code
- プロジェクト特有の機能/Project-Specific Functionality
- 既存のインターフェイスの簡素化/Simplifying an Existing Interface
- 必要に応じたインタフェースの変更/Reshaping an Interface to Your Needs
- あまりにも遠いものを取る/Taking Things Too Far
- 要約/Summary
11 1度に1つのタスク/ONE TASK AT A TIME
- タスクは小さくなる/Tasks Can Be Small
- オブジェクトから値を抽出する/Extracting Values from an Object
- より大きい例/A Larger Example
- 要約/Summary
12 コードを考え直す/TURNING THOUGHTS INTO CODE
- ロジックの明確な記述/Describing Logic Clearly
- あなたのライブラリを知ることは助けになる/Knowing Your Libraries Helps
- この方法をより大きな問題に適用する/Applying This Method to Larger Problems
- 要約/Summary
13 少ないコードを書く/WRITING LESS CODE
- その機能を実装するのを煩わせないでください。それを必要としません。/Don’t Bother Implementing That Feature—You Won’t Need It
- 要件を質問し、打ち破りましょう。/Question and Break Down Your Requirements
- コードベースを小さくする/Keeping Your Codebase Small
- ライブラリをよく知る/Be Familiar with the Libraries Around You
- 例:コーディングの代わりにUnixツールを使用する/Example: Using Unix Tools Instead of Coding
- 要約/Summary
Part4:選択されたトピック/SELECTED TOPICS
14 テストと読取り可能性/TESTING AND READABILITY
- テストを読みやすく、維持しやすくする/Make Tests Easy to Read and Maintain
- このテストで何が間違っていますか?/What’s Wrong with This Test?
- このテストを読みやすくする/Making This Test More Readable
- エラーメッセージを読み取り可能にする/Making Error Messages Readable
- 良好なテスト入力の選択/Choosing Good Test Inputs
- テスト関数のネーミング/Naming Test Functions
- そのテストで何が間違っていたのですか?/What Was Wrong with That Test?
- テストフレンドリーな開発/Test-Friendly Development
- 遠すぎる/Going Too Far
- 要約/Summary
15「分-時カウンタ」の設計と実装/DESIGNING AND IMPLEMENTING A “MINUTE-HOUR COUNTER”
- クラスインタフェースの定義/Defining the Class Interface
- 問題/The Problem
- 試行1:ナイーブな解決策/Attempt 1: A Naive Solution
- 試み2:コンベヤーベルトの設計/Attempt 2: Conveyor Belt Design
- 試行3:タイムバケット設計/Attempt 3: A Time-Bucketed Design
- 3つのソリューションの比較/Comparing the Three Solutions
- 要約/Summary
- さらに読む/FURTHER READING
参考文献:
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
The Art of Readable Code: Simple and Practical Techniques for Writing Better Code (English Edition)
The Art of Readable Code: Simple and Practical Techniques for Writing Better Code Kindle (English Edition)