自分も似たような経験あります。型の安全性を重視して、ジェネリック型の制約をきっちり定義したコードを書いたことあるんですけど、後々呼び出し側がすごく複雑になってしまった。具体的には、extends句で上限型を厳しく指定しすぎて、いざ使う側になると「あ、これ入らないのか」ってなることが多くて。 そのときは、制約を緩和する方向で改善したんですが、やっぱり最初から「どこまで厳しくするか」を呼び出し側の気持ちになって考えるべきだったと思う。型安全性って確かに大事なんだけど、実装の柔軟性とのバランスが難しいですよね。 特に実感したのが、後から「あ、このケースも対応させたい」って話が出たときに、型の制約が壁になっちゃう。結果的に制約を全部外し直すハメになったりして、それなら最初からもう少し緩くしておけばよかったのに…みたいな。 今は「必要な安全性は守りつつ、でも使う人のストレスを減らす」くらいの塩梅で考えるようにしてます。完璧な型定義より、実用性も大事だなって学びました。
続きを読む