Programmazione di Ordine Superiore
Esplorazione di Tecniche di Pipeline Basate su Array e Insiemi
Esplorazione di Tecniche di Pipeline Basate su Array e Insiemi
Un Anti-Pattern?
Questa è un’esplorazione dei vantaggi che si ottengono quando si programma tutto come un array. (Usando concetti Jedi derivati da SmallTalk)
Ecco alcuni principi guida:
-
Tutto l’input è di tipo array. Anche se si tratta di un array di un solo elemento.
-
Le funzioni di livello superiore dovrebbero generalmente accettare E restituire array. (Eccezione fatta per i metodi di callback per i loop: map/reduce/each/filter)
-
99 sviluppatori su 100 soffrono di quella che chiamo sindrome da
surplus di schema acuto. -
Attenzione ai
modelli basati su classigonfiati — con tutte le conseguenze prevedibili:stato dell'istanzafragile con tante leve e manopole da sbagliare, transazioni DB, lock SQL, async/mutex (che funzionano sempre al primo colpo, vero?), uso idiomatico digetter/setter di proprietà, e il vostro utilizzo dipublic/private/final/ecc.è solido, giusto? -
Quindi lasciatemi prendere un problema comune e infilare ~~~aggiungere~~~ alcune riflessioni basate sugli insiemi.
-
Un ipotetico sito Blog ha molti Articoli, e ha ancora più Post (Commenti).
-
Aggiungiamo un metodo
delete(di seguito) — ma con supporto sia per singoli che per array.
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` può essere chiamato con un singolo Post o un array di Post[] 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); }}Perdonatemi se il mio Java è un po’ arrugginito.