コードの読みやすさを向上させるために、コードの行数を最小限に抑えることが重要だと考えがちです。
しかし、行数を減らすことが常に最善の選択とは限りません。
本記事では、コードの行数にこだわらずに、読みやすさを優先することの重要性について解説します。
簡潔だが理解しづらいコードの問題点
以下のコードは、与えられた文字列が有効なEmailアドレスであるかを判定する関数です。
def is_valid_email(email): return re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email)
このコードは一行で書かれており、非常に簡潔です。
しかし、正規表現の意味を理解するのは容易ではありません。
他のエンジニアがこのコードを読んだ際、Emailアドレスの有効性を判定するための条件を即座に理解することは難しいでしょう。
また、正規表現のパターンが変更された場合、このコードを修正するのは骨の折れる作業になります。
正規表現のパターンは複雑で、一箇所の変更が他の部分に影響を与える可能性があるためです。
読みやすさを優先したコード例
次のコードは、先ほどの例を読みやすく改善したものです。
import re def is_valid_email(email): if not email: return False parts = email.split('@') if len(parts) != 2: return False local_part, domain_part = parts if not local_part or not domain_part: return False if not re.match(r'^[a-zA-Z0-9._%+-]+$', local_part): return False domain_parts = domain_part.split('.') if len(domain_parts) < 2: return False for part in domain_parts: if not re.match(r'^[a-zA-Z0-9-]+$', part): return False return True
このコードは、以下のようにEmailアドレスの有効性を判定しています。
- Emailアドレスが空でないことを確認する
- ‘@’で分割し、ローカルパートとドメインパートの2つに分ける
- ローカルパートとドメインパートが空でないことを確認する
- ローカルパートが有効な文字のみを含むことを確認する
- ドメインパートが’.’で分割され、少なくとも2つのパートに分かれることを確認する
- ドメインパートの各パートが有効な文字のみを含むことを確認する
コードの行数は増えましたが、各ステップが明確に分かれており、理解しやすくなっています。
また、正規表現のパターンも単純化され、修正が容易になっています。
まとめ
コードの行数を減らすことが常に最善の選択とは限りません。
むしろ、コードの読みやすさを優先し、他のエンジニアが理解しやすいコードを書くことが重要です。
簡潔さを追求するあまり、かえってコードの理解が難しくなることがあります。
適切な名前付け、コメント、ロジックの分割などを行うことで、コードの意図を明確に伝えましょう。
行数が増えたとしても、読みやすく保守性の高いコードを書くことが、長期的なコードの品質向上につながります。