概要
APIのpathのバリデーション処理のリファクタリングを行った際の学びを共有いたします!
🐛 修正前コード
var path = endpoint.path;
if (state.needParameter) {
final parameter = textEditingControllers.text;
if (parameter == null || parameter.isEmpty) return ResultType.emptyParameter;
path = route.replaceFirst(RegExp(r'{.*?}'), parameter);
}
❌ 問題点
-
path
がvar
かつ再代入されるため、可変であることが前提の設計になってしまう - 初期化と条件分岐の関係で
final
が使えず、意図が不明瞭 - 型情報が省略されており、読み手にとって理解しづらい
✅ 修正後コード
final String path;
if (state.needParameter) {
final parameter = textEditingControllers.text;
if (parameter == null || parameter.isEmpty) return RegistrationResultStatus.emptyParameter;
path = endpoint.path.replaceFirst(RegExp(r'{.*?}'), parameter);
} else {
path = endpoint.path;
}
✔ 改善点
-
path
にfinal
を付けられる構造に変更 → Immutable化 -
String
型を明示 → 型安全かつ明快 - 条件に応じた代入ロジックを明示的に記述 → 保守性・読みやすさ向上
🧾 まとめ
修正により、path
変数に final
を付与できるようになり、Immutable な状態が保たれるようになりました。
さらに、
- 定義と初期化を分離したことで変数のスコープが明確に
- 型を明示したことで読み手への意図が伝わりやすくなり
➡ 全体として可読性が向上しました 🙌
可読性、大事ですね!
ご覧いただきありがとうございました