今回は、Pythonの一番基本的なリファクタリングについて書いた。
リファクタリングとは、コードの構造やデザインを改善するプロセスで、コードの可読性、保守性、拡張性も向上させる。一番、初歩的なリファクタリングには、次のようなところを気をつけると良い。
超初歩的なリファクタリング
以下は、チーム開発ならば、最低限できていなければできない内容だなと思う。
2. コードの重複を避けるために関数化する
3. コメントを追加してコードの目的を明確にする
4. 不要なコードを削除する
次に、サンプルコードについて記述する。
- 修正前のコード
return a * a + b * b
x = 3
y = 4
ans = calc(x, y)
print(ans)
上のコードでは、関数がわかりにくい、変数名がわかりにくい、コメントがなくわかりにくいなどの問題があります。
これを、以下のように修正しましょう。
- 修正後のコード
"""
この関数では、2つの変数の2乗を足し合わせます
:param x_coordinate: 1つ目の数字
:param y_coordinate: 2つ目の数字
:return: 引数の2乗の足し合わせを返す
"""
return x_coordinate * x_coordinate + y_coordinate * y_coordinate
x_coordinate = 3
y_coordinate = 4
result = calculate_sum_of_squares(x_coordinate, y_coordinate)
print("The sum of the squares is:", result)
上の例では、関数名を具体的にして、変数名をわかりやすくあした。さらに、コメントを追加して第三者にもわかりやすくしている。
条件分岐のリファクタリング
条件分岐は、簡単なリファクタリングの例として、条件分岐の簡素化や早期リターンの利用が挙げられる。コードの可読性が向上し、ネストが深くなるのを防ぐ。
ネストが深くなればなるほど、わかりにくくなるため、最初にリターンをしてわかりやすくすることが大事だ。
- 修正前のコード
if age >= 0:
if age < 18:
print("You are a minor.")
else:
print("You are an adult.")
else:
print("Invalid age.")
check_age(25)
上の例では、ネストが2つ続いている。
一般的には、ネストは3つまでと言われているが、少ないに越したことはないため、以下のように修正しよう。
- 修正後のコード
if age < 0:
print("Invalid age.")
return
if age < 18:
print("You are a minor.")
else:
print("You are an adult.")
check_age(25)
修正後は、age<0に対して早期リターンを利用している。この結果、コードのネストが減り、可読性が向上してる。
処理の関数化をするリファクタリング
一部の処理を関数化すると、可読性が向上する。このさい、関数名や変数名をわかりやすくしよう。
- 修正前のコード
even_numbers = []
odd_numbers = []
for number in data:
if number % 2 == 0:
even_numbers.append(number)
else:
odd_numbers.append(number)
even_sum = 0
for even_number in even_numbers:
even_sum += even_number
odd_sum = 0
for odd_number in odd_numbers:
odd_sum += odd_number
print("Even numbers:", even_numbers)
print("Sum of even numbers:", even_sum)
print("Odd numbers:", odd_numbers)
print("Sum of odd numbers:", odd_sum)
上の例は非常にわかりにくく、コードが続いている。
一部を関数として、外だしすることでコードは改善するので、それを試してみる。
- 修正後のコード
even_numbers = []
odd_numbers = []
for number in numbers:
if number % 2 == 0:
even_numbers.append(number)
else:
odd_numbers.append(number)
return even_numbers, odd_numbers
def calculate_sum(numbers):
total = 0
for number in numbers:
total += number
return total
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers, odd_numbers = separate_even_odd(data)
even_sum = calculate_sum(even_numbers)
odd_sum = calculate_sum(odd_numbers)
print("Even numbers:", even_numbers)
print("Sum of even numbers:", even_sum)
print("Odd numbers:", odd_numbers)
print("Sum of odd numbers:", odd_sum)
関数化して、処理の内容をわかりやすくした。
この結果、コードが機能ごとに分かれているため、可読性が向上している。また、再利用性も向上し、同じ処理を繰り返し行う必要がなくなる。
以上、今回はリファクタリングについて説明した。
以下の本は、最近発売された本だが、コードの書き方に関して非常にわかりやすい本なので、ぜひ参考にしていただきたい。