現在の現場でコードレビューをしてもらう機会が増え、自分が弱かった型の意識について。
現在ではPHPでも型を記述してコーディングすることが一般的なため、静的言語と同じように型を意識することが増えてきたかと思います。
型を意識することのメリットとして
- プログラム実行前に型が正しいかをエディタで検知できる
- 制限をつけることができ、正常な値を担保できる
- nullの可能性があるかどうかがコードからわかるため、型と合わせて仕様書がわりになる。
- といってもstringやintなどだけだと(特にstring)広すぎるので、コード系の値(会員番号、メールアドレス、コード系)や金額、日付など業務上意味のあるデータに関してはValueObjectとして持たせればこれも仕様書がわりになる
- 基本的なPrimitive以外に 日付ならCarbonなどのオブジェクトを使う
- 値自体にメソッドを持たせることができ、応用範囲が広い(Priceオブジェクトに税率計算を持たせるなど)
- 定数なども直打ちよりはEnumなどで意味を持たせた値にする(後でコードを読んだときにこれが何かわかるため)
自分が見た中でのデメリットなど(基本的には導入した方が良いのですが、プロジェクトの途中移行だったり不徹底だと結果的にプロジェクトの遅延になります。)
- null、”などを当然全て切り分けて判定する必要があるのでemptyなどを使っていたプログラマにとってはコードがやや冗長になる
- ===で書くことが必須になるので型不一致でエラーで落ちることが増える
- 中途半端なプロジェクトの場合、かえってバグを頻発する(stringとintの不一致やnull関連の処理が適当なことが一番の原因)
- 3項演算子はもとより、??や$foo = $a?->b();などの記法を知っておかないと表現が冗長になる
- HTMLの場合送った文字列は全て文字列になること、Laravelなどのフレームワークは空の場合、nullになるなどの仕様に注意。