DanLevy.net

Programmazione ad Ordine Superiore

Esplorare tecniche di pipeline basate su array e set

Hero image for Programmazione ad Ordine Superiore

Esplorazione di tecniche di pipeline basate su array e insiemi

Un anti-pattern?

Questa è un’esplorazione dei vantaggi che si ottengono quando si scrive tutto come un array. (Utilizzando concetti Jedi da SmallTalk)

Ecco alcuni principi guida:

  1. Tutti gli input sono simili a array. Anche se l’array ha un solo elemento.

  2. Le funzioni di alto livello dovrebbero generalmente accettare E restituire array. (Eccezioni per i metodi callback per i cicli: map/reduce/each/filter)

  3. Il 99 su 100 del codice scritto dagli sviluppatori soffre di ciò che chiamo sindrome di acute schema surplusage.

  4. Fate attenzione ai modelli basati su classi ingombranti - con tutti i tratti prevedibili: stato dell’istanza fragile con tanti levettoni da rompere, transazioni DB, lock SQL, sincronizzazione asincrona/mutex (che funzionano sempre al primo colpo), utilizzo di getter/setter proprietà idiomatici, e il vostro uso di public/private/final/etc è impeccabile, giusto?

  5. Quindi permettetemi di prendere un problema comune e forzarci ~~~aggiungere~~~ alcuni ragionamenti basati su insiemi.

  6. Un sito blog ipotetico ha molti Articoli, e ha ancora di più i Post (Commenti).

  7. Aggiungiamo un metodo delete (sotto) - ma con supporto per entrambi il singolare e gli 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);
}
}

Scusate se il mio Java è un po’ arrugginito.