DanLevy.net

Programmation d'ordre supérieur

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

Hero image for Programmation d'ordre supérieur

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