Hallo
Fragen wollte ich das schon länger. Der Anlass, dass ich es jetzt tue, war Icare3D Blog: The vicious circle of generalization @AltDevBlogADay bzw. Vicious circle of generalization #AltDevBlogADay - das heißt ja zumindest dass ich nicht der einzige bin
Fast alles was man schreibt könnte noch allgemeiner geschrieben werden. Irgendwann merkt man dann, dass eigentlich alles, was man macht, nur Funktionen sind, und man ertappt sich dabei, nur noch einen Haufen
-artige Implementierungen zu schreiben :autsch: Und dabei geht es nicht um Featuritis oder mißachtetes "YAGNI", sondern nur um eine immer weiter gehende Abstraktion der Beschreibung - schon fast im mathematisch-pursitischen Sinn: Man braucht eigentlich nur Mengen, der Bequemlichkeit halber nimmt man vielleicht noch Tupel/Listen und Funktionen dazu, aber das reicht dann auch. Gerade Java macht es einem da ja auch schrecklich einfach: Man kann wo immer man will schnell eine { Implementierung() } in Form einer anonymen Klasse reinschreiben, und theoretisch könnte man ja das meiste mit einer [c]class Function<S,T> {T evaluate(S s)};[/c] abbilden. Für alles weitere kämen dann die funktionalen Aspekte höherer Ordnung hinzu, und man landet bei Methodensignaturen wie
public static <A,B,C,D,E,F$,G,H,I> F<A,F<B,F<C,F<D,F<E,F<F$,F<G,I>>>>>>> partialApply8(F<A,F<B,F<C,F<D,F<E,F<F$,F<G,F<H,I>>>>>>>> f, H h). Toll, mächtig, aber für die public API einer Bibliothek vielleicht nicht sooo perfekt geeignet.
Man könnte das abwertend als Symptom für "Over-Engineering" bezeichnen, aber nachdem es keine harten Kriterien gibt, wann etwas Over- Under- oder einfach nur Engineered ist, wäre das doch eher subjektiv. Vielleicht gibt es ja ein paar Gedanken dazu, wie man einen objektiv sinnvollen "Jetzt ist aber auch mal gut"-Punkt verläßlich erkennt...?
Fragen wollte ich das schon länger. Der Anlass, dass ich es jetzt tue, war Icare3D Blog: The vicious circle of generalization @AltDevBlogADay bzw. Vicious circle of generalization #AltDevBlogADay - das heißt ja zumindest dass ich nicht der einzige bin
Fast alles was man schreibt könnte noch allgemeiner geschrieben werden. Irgendwann merkt man dann, dass eigentlich alles, was man macht, nur Funktionen sind, und man ertappt sich dabei, nur noch einen Haufen
Java:
class SpecialFunction implements Function<Input,Output> { Output execute(Input input) { ... } }
public static <A,B,C,D,E,F$,G,H,I> F<A,F<B,F<C,F<D,F<E,F<F$,F<G,I>>>>>>> partialApply8(F<A,F<B,F<C,F<D,F<E,F<F$,F<G,F<H,I>>>>>>>> f, H h). Toll, mächtig, aber für die public API einer Bibliothek vielleicht nicht sooo perfekt geeignet.
Man könnte das abwertend als Symptom für "Over-Engineering" bezeichnen, aber nachdem es keine harten Kriterien gibt, wann etwas Over- Under- oder einfach nur Engineered ist, wäre das doch eher subjektiv. Vielleicht gibt es ja ein paar Gedanken dazu, wie man einen objektiv sinnvollen "Jetzt ist aber auch mal gut"-Punkt verläßlich erkennt...?