読みやすいコードとは

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 145

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)