こんばんは!マル太です。
前回は、リーダブルコードの第10章「無関係の下位問題を抽出する」についてまとめました。
今回は、第11章「一度にひとつのこと」について、自分なりにまとめていきます。
なぜ「一度にひとつのこと」が大切なの?
プログラムを書くとき、つい一つの関数にたくさんの処理を詰め込んでしまいがちですよね。
でも、これは実は良くないことだと著者は述べています。
なぜなら、、、
■コードが分かりにくくなる
一つの関数にたくさんの処理が詰め込まれていると、その関数が一体何をやっているのか、パッと見て理解することが難しくなります。
■バグを見つけにくくなる
もしバグがあった場合、どこが原因なのかを特定するのが大変になります。
■コードを修正するのが難しくなる
ある部分を修正したいときに、他の部分にも影響を与えてしまう可能性があります。
といった悪影響出てきてしまうためです。
「一度にひとつのこと」を実現するための具体的な手法
1. 関数の粒度を細かくする
・関数の役割を明確にする
・各関数は、できる限り一つの処理に特化させましょう。
例:
ユーザー認証処理を、
1.ログイン認証
2.権限チェック
3.セッション管理
といった複数の関数に分割する。
2. オブジェクトから値を抽出する際には、一つのメソッドで一つの値を返す
・オブジェクトの責務を明確にする
・オブジェクトは、特定のデータと、そのデータに対する操作をカプセル化します。
例:
ユーザーを表すオブジェクトから、
1.ユーザー名を取得するメソッド
2.メールアドレスを取得するメソッド
などを用意する。
3. その他のテクニック
・ガード節
条件によって処理を分岐させる場合、条件が合わない場合は早期に処理を終了させるガード節を活用しましょう。
・フラグ変数の使用を避ける
フラグ変数を使用すると、コードの意図が分かりにくくなるため、できるだけ避けるようにしましょう。
・コメント
関数の意図や処理内容を分かりやすく説明するコメントを記述しましょう。
より大きな例で考える
実際のコードを例に、どのように「一度にひとつのこと」の原則を適用していくのかを、コード例を使って説明します。
例:Pythonを使ったユーザー登録処理
def register_user(username, password, email):
# ユーザー名、パスワード、メールアドレスの入力チェック
if not username or not password or not email:
return "入力エラー"
# データベースにユーザー情報を登録
# ... (データベース接続、SQL実行など)
# 歓迎メールを送信
# ... (メール送信処理)
return "登録完了"
上記のコードは、ユーザー登録の処理を一つの関数にまとめています。
しかし、この場合、
・どの部分が何をしているのか分かりにくい
・バグがあった場合、原因を特定するのが難しい
・機能を追加したい場合、既存のコードを大幅に修正する必要がある
といった問題があります。
そこで、リファクタリングを活用してコードを読みやすくしてみましょう。
※リファクタリングとは?
リファクタリングとは、コードの外部から見た機能を変えずに、内部の構造を改善することです。
例えば、古い建物を取り壊さずに、内部の配線をやり替えたり、間取りを変えたりするようなイメージです。
例:Pythonを使ったユーザー登録処理(リファクタリング後)
def validate_user_data(username, password, email):
# 入力チェックの処理
# ...
def save_user_to_database(user_data):
# データベースへの登録処理
# ...
def send_welcome_email(email):
# メール送信処理
# ...
def register_user(username, password, email):
if validate_user_data(username, password, email):
user_data = {'username': username, 'password': password, 'email': email}
save_user_to_database(user_data)
send_welcome_email(email)
return "登録完了"
else:
return "入力エラー"
改善後では、
・入力チェック
・データベースへの登録
・メール送信
といった処理をそれぞれ別の関数に分けています。
これにより、
・各関数の役割が明確になり、コードが読みやすくなった
・バグが発生した場合、原因を特定しやすくなった
・新しい機能を追加したい場合、影響範囲が限定される
といったメリットがあります。
改善前後の比較
項目 | 改善前 | 改善後 |
---|---|---|
可読性 | 低い | 高い |
保守性 | 低い | 高い |
再利用性 | 低い | 高い |
テストのしやすさ | 低い | 高い |
まとめ
「一度にひとつのこと」という原則は、プログラミングの基礎となる考え方です。
この原則を守ることで、よりシンプルで、分かりやすく、そして保守しやすいコードを作成することができそうですね!
次回は、第12章「コードに思いを込める」についてまとめます。