リーダブルコード(1-4章)

100番煎じぐらいだが自分なりにまとめてみる。

---
## 1章 理解しやすいコード
---
### 理解しやすいコードとは？
- 優れたコード：他の人が読んで「意味を理解するまでの時間が短い」コード
- コードは、他の人が最短時間で理解できることが大切
- 「短い」コードよりも「読みやすい」コードを目指そう

---
### リーダブルコードの基本姿勢
- コードを短く書くことも大事だけど、理解しやすさのほうがもっと大事
- 他の人が読んだとき、理解に時間がかかるようなコードは避ける
- 三項演算子も、使い方によっては**読みづらくなる**ことがある

---
### 具体例：リーダブルでない三項演算子の使い方（VB.NET）
- 三項演算子の使い方によっては、**理解しづらくなる**こともある

```vb
' 見にくい例：三項演算子を多重に使い、意味が分かりにくい
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）
- 意味が分かりづらい名前は誤解を招く可能性がある

```vb
' 良くない例：汎用的すぎる名前
Dim tmp As String = user.Name & user.PhoneNumber

' 改善例：名前に情報を含め、役割が分かりやすい
Dim userContact As String = user.Name & user.PhoneNumber
```
---

### 避けたい命名パターン

```vb
' あまり良くない例
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`が何の結果なのか不明
---
### 👍 改善例：意図を込めた命名

```vb
' 改善後の例
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章 誤解を防ぐ命名のコツ
---
### 名前による誤解を防ごう
- プログラミングでは、名前の付け方一つで意図が正確に伝わるか、誤解を招くかが変わってきます。  
**具体例を見ながら**、誤解を防ぐ命名のテクニックを学んでいきましょう。

---
### 実践例：より明確な命名
#### 限界値を扱う場合
```vb
' あいまいな命名
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
```

---
### ブーリアン値の命名
```vb
' 意図が分かりにくい
Dim active As Boolean = True

' 👍 状態が明確な命名
Dim isActive As Boolean = True
```

---
### 範囲を示す場合
```vb
' 境界があいまい
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章 美しさ
### 読みやすさは「見た目」から
- **適切に整理されたコード**は、ロジックの理解を助け、バグの発見も容易に

---
### 実践例：見やすいコードの書き方
#### 読みづらい例
```vb
' 複雑な処理が一行に詰め込まれている
Dim report As String = user.Name & ", " & user.PhoneNumber & " | " & CalcOrderSummary(order.Id, CalcDiscount(order.Total))
```

---
### 👍改善例：適切に分割して整理
```vb
' 処理を分かりやすく分割
Dim userContact As String = user.Name & ", " & user.PhoneNumber
Dim orderSummary As String = CalcOrderSummary(
    order.Id, 
    CalcDiscount(order.Total)
)
Dim report As String = userContact & " | " & orderSummary
```

---
### 👍インデント
   ```vb
   For Each order In orders
       If order.IsActive Then
           For Each item In order.Items
               ' ネストが視覚的に分かる
           Next
       End If
   Next
   ```

---
### 👍空白行による区切り
```vb
' ユーザー情報の取得
Dim user = GetUser(userId)

' 注文情報の処理
Dim order = GetOrder(orderId)
Dim orderItems = GetOrderItems(order)
```

---
### 👍整列
※わたしは、これは採用しないことが多い

```vb
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. 美しさ ✨
- **インデント**や**改行**、**スペース**でコードを整えよう
- 視覚的な美しさは**読みやすさ**につながる
- チーム全体の**コード品質**向上に貢献

ポイントを意識して、明日から少しずつ改善していきましょう！ 💪