Haskell やその他の関数型言語をいじってみると、一般的な用語で問題を記述することによる設計の単純さに感謝するようになりました。テンプレート プログラミングの多くの側面は決して単純ではありませんが、一部の使用法は十分に一般的であるため、明確化の妨げにはならないと思います (特に関数テンプレート)。テンプレートを使用すると、現在のデザインを単純化しながら、将来への抵抗を自動的に追加できることがよくあります。それらの機能をライブラリの作成者に委ねる必要があるのはなぜですか?
一方で、疫病のようにテンプレートを避ける人もいるようです。ジェネリック型の概念そのものがプログラミング コミュニティの多くにとってなじみのないものであった 10 年前に、私はこれを理解することができました。しかし現在、一般的な静的型付けオブジェクト指向言語はすべて、何らかの形式のジェネリックをサポートしています。親しみやすさが増したことで、保守的な態度を調整する必要があるようです。
そのような保守的な態度の 1 つが、最近私に表明されました。
必要以上に一般化してはいけません - ソフトウェア開発の基本ルール。
これが自明であるべきかのように否定的に述べられているのを見て、私は非常に正直に驚いた. 個人的には、特に指定しない限り、すべてがジェネリックである Haskell のような言語では、自明とはほど遠いと思います。そうは言っても、私はこの視点がどこから来ているのか理解していると思います。
心の奥底では、そのようなルールがぐるぐる回っています。それが最前線にある今、私は常に全体的なアーキテクチャに照らしてそれを解釈してきたことに気づきました. たとえば、クラスがある場合、いつか使用する可能性のある大量の機能をクラスにロードしたくありません。具体的なバージョンが 1 つだけ必要な場合は、わざわざインターフェイスを作成しないでください (ただし、モック可能性はこれに対する反論になる可能性があります)。そういうもの...
ただし、私はこの原則をミクロレベルで適用することはしません。特定の型に依存する理由のない小さなユーティリティ関数がある場合は、テンプレートを作成します。
それで、あなたはどう思いますか?何を過度に一般化していると思いますか? この規則は、文脈によって適用可能性が異なりますか? これが規則であることに同意しますか?