【リーダブルコード】初心者エンジニアが読み解く「変数」を扱う際のヒント - 第9章

こんばんは。マル太です！

前回は、リーダブルコードの第8章「巨大な式を分割する」についてまとめました。
今回は、第9章「変数と読みやすさ」について、Qiita1にアウトプットしていきます。


# 良い変数名って、どんな名前？
変数名は、プログラミングにおいてとても重要です。
分かりやすい変数名をつけることで、コードが読みやすくなり、バグを減らすことにもつながります。

例えば、`int a = 10;`と書かれていても、`a`が何を表しているのか分かりません。
しかし、`int age = 10;`と書かれていれば、`age`が年齢を表す変数であることがすぐに分かります。

このように、変数名は「何を表しているのか」が一目でわかるように、具体的で分かりやすい名前をつけることが大切です。
<br>

# 変数の使い方を工夫して、コードを読みやすくしよう！
**1. 変数は必要な時にだけ使う**

変数は、本当に必要な場合にだけ使いましょう。
不要な変数は、コードを複雑にしてしまい、悪影響です。

例えば、
```ruby:【分割前】Python
bento_price = 500  
discount_coupon = 0.2  # 20%割引

# お弁当の値段に変数名をつける
total_bento_price = bento_price  

# 割引後の金額を計算する
discounted_price = total_bento_price * (1 - discount_coupon)
```

```ruby:【分割後】Python
bento_price = 500  
discount_coupon = 0.2  # 20%割引

# 割引後の金額を直接計算する
discounted_price = bento_price * (1 - discount_coupon)  
```

のように、`total_bento_price`という変数を使わずに、直接計算式を記述した方が、コードがスッキリします。
<br>


**2. 変数のスコープは狭く！**
変数のスコープ（有効範囲）とは、その変数が使える範囲のことです。
スコープをできるだけ狭くすることで、コードが読みやすくなります。

例えば、ループの中で使う変数は、ループの外で宣言するのではなく、ループの中で宣言しましょう。
そうすることで、その変数がループの中だけで使われることが明確になり、コードが理解しやすくなります。

```ruby:Python
# 良い例
for i in range(10):
    # ループ内で使う変数jを宣言
    j = i * 2 
    print(j)
    

# 悪い例
j = 0 # ループの外で変数jを宣言
for i in range(10):
    j = i * 2
    print(j)
```

※スコープについてより詳しく解説
スコープは、プログラミングにおいて、変数や関数などの名前が有効な範囲を指します。つまり、ある変数や関数をどこから参照できるのか、その範囲を定めるものです。
<br>

**スコープの縮め方例その①**

【C++のif文】
C++では、if文の中で変数を宣言すると、その変数の有効範囲はif文の中だけに限定されます。
→変数のスコープがif文のブロック内に限定されることで、変数の影響範囲が分かりやすくなります。


```ruby:C++

if (condition) {
  int value = 10; // value は if文の中だけで使える
  // value を使う処理
}
// ここでは value は使えない
```
<br>

**スコープの縮め方例その②**

【JavaScriptの関数】
JavaScriptでは、関数の中で変数を宣言することで、「プライベート」変数を作ることができます。
プライベート変数は、関数の中でのみアクセス可能で、外部からはアクセスできません。
→関数の外から変数にアクセスできないようにすることで、意図しない変更を防ぎ、コードの安全性を高めます。


```ruby:JavaScript
function myFunction() {
  let privateVariable = 10; // privateVariable は関数の中だけで使える
  // privateVariable を使う処理
}
// ここでは privateVariable は使えない
```
<br>

**スコープの縮め方例その③**

【JavaScriptのグローバル変数】
JavaScriptでは、関数の中で`var`を使って変数を宣言すると、グローバル変数になります。
グローバル変数は、プログラムのどこからでもアクセスできますが、使いすぎるとコードが分かりにくくなるので注意が必要です。
→グローバル変数の使用を控え、関数内で変数を宣言することで、スコープを縮小し、コードの可読性を高めます。

```ruby:JavaScript
function myFunction() {
  var globalVariable = 10; // globalVariable はグローバル変数になる
}
// ここでは globalVariable は使える
```
<br>

**スコープの縮め方例その④**

【PythonとJavaScriptのネスト】
PythonやJavaScriptでは、if文やfor文の中で変数を宣言しても、その変数の有効範囲はif文やfor文の中だけに限定されません。
変数の有効範囲は、その変数が宣言された関数全体になります。
→変数を宣言する位置を、実際に使用する場所に近づけることで、スコープを縮小し、コードの意図を明確にします。

```ruby:Python
def my_function():
  if condition:
    value = 10  # value は if文の外でも使える
  # ここでは value は使える
```
<br>

**スコープの縮め方例その⑤**
定義の位置を下げる
変数は、できるだけ使う場所の近くで宣言しましょう。
そうすることで、変数の有効範囲が小さくなり、コードが読みやすくなります。

```ruby:Python

# 悪い例
value = 10

# 処理

print(value)

# 良い例
# 処理

value = 10  # value を使う直前で宣言
print(value)
```

<br>


**3. 1つの変数には1つの役割**
1つの変数を複数の目的で使い回すのはやめましょう。
変数ごとに役割を明確にすることで、コードが理解しやすくなります。
<br>

**4. 変数の値は変えない！**
変数の値を途中で変更すると、コードの流れが分かりにくくなることがあります。
変数の値は、できるだけ変更しないようにしましょう。
<br>

**5. グローバル変数は使わない**
グローバル変数とは、プログラムのどこからでもアクセスできる変数のことです。
グローバル変数は便利ですが、使いすぎるとコードが分かりにくくなるので、できるだけ使わないようにしましょう。
<br>

# まとめ
変数の使い方を工夫することで、コードを読みやすくすることができます。
分かりやすい変数名をつけて、変数の使い方にも気を配れば、より良いコードを書くことができます。

次回は、第10章「無関係の下位問題を抽出する」についてまとめます。
お楽しみに！