DanLevy.net

Höhere Ordnung Programmierung

Untersuchung von Array- und Set-basierten Pipeline-Techniken

Hero image for Höhere Ordnung Programmierung

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:

  1. Alle Eingaben sind array-ähnlich. Selbst wenn es sich um ein Array mit nur einem Element handelt.

  2. Höhere Funktionen sollten generell Arrays akzeptieren und zurückgeben. (Ausgenommen Callback-Methoden für Schleifen: map/reduce/each/filter)

  3. 99 von 100 Entwicklern leiden unter dem, was ich akutes Schema-Überfluss-Syndrom nenne.

  4. Vorsicht vor aufgeblähten klassenbasierten Modellen – mit all den vorhersehbaren Begleiterscheinungen: fragilen Instanzzuständen mit so vielen Hebeln und Drehknöpfen, die man versehentlich verstellen kann, Datenbanktransaktionen, SQL-Sperren, asynchroner/mutexierter Programmierung (die immer beim ersten Mal funktioniert), Verwendung idiomatischer Property-Getter/Setter und Ihre Anwendung von public/private/final/etc ist doch sicherlich sinnvoll, oder?

  5. Lassen Sie mich ein gängiges Problem nehmen und ~~~hinzufügen~~~ ein wenig mengenbasierte Überlegungen einfügen.

  6. Eine hypothetische Blog-Website hat viele Artikel und noch mehr Beiträge (Kommentare).

  7. 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.