100番煎じぐらいだが自分なりにまとめてみる。
1章 理解しやすいコード
理解しやすいコードとは?
- 優れたコード:他の人が読んで「意味を理解するまでの時間が短い」コード
- コードは、他の人が最短時間で理解できることが大切
- 「短い」コードよりも「読みやすい」コードを目指そう
リーダブルコードの基本姿勢
- コードを短く書くことも大事だけど、理解しやすさのほうがもっと大事
- 他の人が読んだとき、理解に時間がかかるようなコードは避ける
- 三項演算子も、使い方によっては読みづらくなることがある
具体例:リーダブルでない三項演算子の使い方(VB.NET)
- 三項演算子の使い方によっては、理解しづらくなることもある
' 見にくい例:三項演算子を多重に使い、意味が分かりにくい
Dim accessLevel As String = If(user.IsAdmin, "Admin", If(user.IsMember, "Member", "Guest"))
' 見やすい例:分かりやすくコードを分ける
Dim accessLevel As String = "Guest"
If user.IsAdmin Then
accessLevel = "Admin"
ElseIf user.IsMember Then
accessLevel = "Member"
End If
まとめ:心がけたいポイント
🎯 最優先は「理解のしやすさ」
短いコードよりも、分かりやすいコードを目指そう
👥 チームのことを考えよう
自分だけでなく、他の人が読むことを意識しよう
3ヶ月後の自分はまるで他の人だよ
2章 名前で伝えるコードの意図
名前付けの基本
- 名前は明確で正確に、必要な情報を含めよう
- tmpやretvalなどの汎用的すぎる名前は避け、意味が伝わる名前を心がけよう
- 「なぜこの名前なのか」を自問してみよう
具体例:名前に情報を含める(VB.NET)
- 意味が分かりづらい名前は誤解を招く可能性がある
' 良くない例:汎用的すぎる名前
Dim tmp As String = user.Name & user.PhoneNumber
' 改善例:名前に情報を含め、役割が分かりやすい
Dim userContact As String = user.Name & user.PhoneNumber
避けたい命名パターン
' あまり良くない例
Dim tmp As String = user.Name & user.PhoneNumber
Dim i, j, k As Integer ' 複数のループで使用
Dim retval As Boolean
For i = 0 To items.Count - 1
For j = 0 To subItems.Count - 1
' ネストしたループの中身
Next
Next
このコードの問題点:
-
tmp
から値の意図が読み取れない -
i
,j
,k
では何のイテレーターか分からない -
retval
が何の結果なのか不明
👍 改善例:意図を込めた命名
' 改善後の例
Dim userContactInfo As String = user.Name & user.PhoneNumber
Dim productIndex As Integer
Dim categoryIndex As Integer
For productIndex = 0 To products.Count - 1
For categoryIndex = 0 To categories.Count - 1
' ループの目的が明確になった
Next
Next
改善のポイント:
-
userContactInfo
- 保持している情報の内容が明確 -
productIndex
,categoryIndex
- 何のループカウンターか分かる - イテレーター名から処理の意図が読み取れる
まとめ:心がけたいポイント
🎯 名前で意図を伝えよう
- 汎用的な名前(tmp, flag)を避けよう
- 変数の目的や内容が伝わる具体的な名前を選ぼう
- 単位や状態など、必要な情報は名前に含めよう
👥 チームの視点で考えよう
- 他のメンバーが読んだとき、すぐに理解できる名前を選ぼう
- 数ヶ月後の自分が見ても分かる名前にしよう
3章 誤解を防ぐ命名のコツ
名前による誤解を防ごう
- プログラミングでは、名前の付け方一つで意図が正確に伝わるか、誤解を招くかが変わってきます。
具体例を見ながら、誤解を防ぐ命名のテクニックを学んでいきましょう。
実践例:より明確な命名
限界値を扱う場合
' あいまいな命名
Dim limit As Integer = 100
Dim items As Integer = 50
Dim range As Integer = 30
' 👍 明確な命名
Dim maxItems As Integer = 100
Dim currentItems As Integer = 50
Dim minRequiredItems As Integer = 30
ブーリアン値の命名
' 意図が分かりにくい
Dim active As Boolean = True
' 👍 状態が明確な命名
Dim isActive As Boolean = True
範囲を示す場合
' 境界があいまい
Dim start As Integer = 0
' 👍 範囲が明確
Dim firstIndex As Integer = 0
よく使う接頭辞/接尾辞
用途 | 接頭辞/接尾辞 | 例 |
---|---|---|
限界値 | max_, min_ | maxConnections, minBalance |
範囲 | first_, last_ | firstElement, lastRecord |
真偽値 | is_, has_, can_ | isEnabled, hasPermission, canEdit |
数 | num_, count_ | numErrors, countUsers |
平均 | avg_ | avgScore |
合計 | total_ | totalAmount |
まとめ:心がけたいポイント
🎯 あいまいさを排除しよう
- 限界値には max/min を使おう
- 真偽値には is/has を使おう
- 範囲を示すなら first/last を使おう
💭 説明する気持ちで名付けよう
- 他人に説明できる名前を心がけよう
- コメント無しでも理解できる名前を目指そう
4章 美しさ
読みやすさは「見た目」から
- 適切に整理されたコードは、ロジックの理解を助け、バグの発見も容易に
実践例:見やすいコードの書き方
読みづらい例
' 複雑な処理が一行に詰め込まれている
Dim report As String = user.Name & ", " & user.PhoneNumber & " | " & CalcOrderSummary(order.Id, CalcDiscount(order.Total))
👍改善例:適切に分割して整理
' 処理を分かりやすく分割
Dim userContact As String = user.Name & ", " & user.PhoneNumber
Dim orderSummary As String = CalcOrderSummary(
order.Id,
CalcDiscount(order.Total)
)
Dim report As String = userContact & " | " & orderSummary
👍インデント
For Each order In orders
If order.IsActive Then
For Each item In order.Items
' ネストが視覚的に分かる
Next
End If
Next
👍空白行による区切り
' ユーザー情報の取得
Dim user = GetUser(userId)
' 注文情報の処理
Dim order = GetOrder(orderId)
Dim orderItems = GetOrderItems(order)
👍整列
※わたしは、これは採用しないことが多い
Dim firstName As String = "John"
Dim lastName As String = "Doe"
Dim age As Integer = 30
Dim isActive As Boolean = True
まとめ:心がけたいポイント
👀 視覚的な整理を意識しよう
インデントで階層を表現、空白行で区切りをつける
📋 一貫性を保とう
チーム全体で同じスタイルを使う
1~4章まとめ:より良いコードを目指して 📚
1. 理解しやすいコード 🎯
- 他の人が最短で理解できることを最優先に
- 短いコードより読みやすいコードを意識しよう
- チーム全体の生産性向上につながる
2. 名前に情報を詰め込む 💡
- 名前は明確で正確に、必要な情報を含めよう
- 「なぜこの名前なのか」を自問してみよう
- シンプルさと正確さのバランスを大切に
3. 誤解されない名前 🤝
- 読む人に誤解されない名前をつけよう
- max/min、is/hasなど、意図が伝わる接頭辞を活用
- 他人に説明できる名前を心がけよう
4. 美しさ ✨
- インデントや改行、スペースでコードを整えよう
- 視覚的な美しさは読みやすさにつながる
- チーム全体のコード品質向上に貢献
ポイントを意識して、明日から少しずつ改善していきましょう! 💪