Dan Levy

Programmation d'ordre supérieur

Exploration des techniques de pipeline basées sur les tableaux et les ensembles

Exploration des techniques de pipeline basées sur les tableaux et ensembles

Un anti-modèle ?

Cet article explore les avantages obtenus en programmant tout comme un tableau. (En utilisant des concepts Jedi de SmallTalk)

Voici quelques principes directeurs :

  1. Toute entrée est similaire à un tableau. Même un tableau de 1 élément.

  2. Les fonctions de niveau supérieur devraient généralement accepter ET retourner des tableaux. (À l’exception des méthodes de callback pour les boucles : map/reduce/each/filter)

  3. 99 développeurs sur 100 souffrent de ce que j’appelle le syndrome d’excès aigu de schéma.

  4. Faites attention aux modèles surchargés basés sur des classes - avec tous leurs effets prévisibles : état instable des instances avec trop de leviers et de molettes à manipuler, transactions de base de données, verrous SQL, synchronisation asynchrone/mutex (qui fonctionnent toujours parfaitement la première fois), utilisation systématique des accesseurs/mutateurs de propriétés, et votre usage de public/private/final/etc est irréprochable, n’est-ce pas ?

  5. Prenons donc un problème courant et forçons ~~~add~~~ quelques réflexions basées sur les ensembles.

  6. Un site de blog hypothétique possède de nombreux Articles, et encore plus de Posts (Commentaires).

  7. Ajoutons une méthode delete (ci-dessous) - mais avec un support pour les éléments singuliers ET les tableaux.

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` peut être appelé avec un seul Post ou un tableau de 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);
}
}

Pardonnez-moi si mon Java est un peu rouillé.