Höhere Ordnung Programmierung
Untersuchung von Array- und Set-basierten Pipeline-Techniken
Untersuchung von array- und mengenbasierten Pipeline-Techniken
Ein Anti-Muster?
Dies ist eine Untersuchung der Vorteile, die entstehen, wenn Sie alles als Array programmieren. (Mit Jedi-Konzepten aus SmallTalk)
Hier sind einige Leitlinien:
-
Alle Eingaben sind array-ähnlich. Selbst wenn es sich um ein Array mit nur einem Element handelt.
-
Höhere Funktionen sollten generell Arrays akzeptieren und zurückgeben. (Ausgenommen Callback-Methoden für Schleifen: map/reduce/each/filter)
-
99 von 100 Entwicklern leiden unter dem, was ich
akutes Schema-Überfluss-Syndromnenne. -
Vorsicht vor aufgeblähten
klassenbasierten Modellen– mit all den vorhersehbaren Begleiterscheinungen: fragilenInstanzzuständenmit so vielen Hebeln und Drehknöpfen, die man versehentlich verstellen kann, Datenbanktransaktionen, SQL-Sperren, asynchroner/mutexierter Programmierung (die immer beim ersten Mal funktioniert), Verwendung idiomatischerProperty-Getter/Setterund Ihre Anwendung vonpublic/private/final/etcist doch sicherlich sinnvoll, oder? -
Lassen Sie mich ein gängiges Problem nehmen und ~~~hinzufügen~~~ ein wenig mengenbasierte Überlegungen einfügen.
-
Eine hypothetische Blog-Website hat viele Artikel und noch mehr Beiträge (Kommentare).
-
Fügen wir eine
delete-Methode hinzu (siehe unten) – mit Unterstützung für Einzelobjekte oder Arrays.
package net.danlevy.why.java___why.you.got.all.the.dots____it.must.be.all.the.factories;
public class Post { public String title; public Date created; public String message;
public Post(String title, String message) { this.title = title; this.message = message; this.created = new Date(); }
public Date isArchived() { return this.created < new Date(2015, 0, 1); }
// Post.delete` kann mit einem einzelnen Post oder einem Array von Post[] aufgerufen werden public static int delete(Post post) { List<Post> posts = new List<Post>(post); return delete(posts) }
public static int delete(List<Post> posts) { return posts.map(Dao.remove); }}Verzeihen Sie mir, wenn meine Java-Kenntnisse etwas rostig sind.