Oeuvre : https://code-art.pictures/
Imaginez une bibliothèque qui :
Je n'en ai pas trouvé une qui réponde à tous ces besoins, alors j'ai créé ma petite bibliothèque — fluent-streams.
const words = ['Lorem', 'ipsum', /* ... */] stream(words) .groupBy(word => word.toLowerCase()) .map(([word, list]) => [word, list.length]) .sortBy(([, length]) => -length) .take(3) .toArray() // => ['ut', 3], ['in', 3], ['dolor', 2]
// Endless stream of 2..999 integers const randomInts = continually(() => 2 + Math.floor(Math.random() * 998) ) randomInts .zip(randomInts) .filter(([a, b]) => gcd(a, b) === 1) .distinctBy(pair => stream(pair).sortBy(i => i).join()) .take(10) // => [804, 835], [589, 642], [96, 145], ...
const deck = streamOf('♠', '♥', '♣', '♦') .flatMap(suit => streamOf<string | number>( 'A', ...range(2, 11), 'J', 'Q', 'K' ).map(rank => `${rank}${suit}`) ) // => 'A♠', '2♠', '3♠', ...
const playersNum = 2 const [flop, turn, river, ...hands] = deck .takeRandom(3 + 1 + 1 + playersNum * 2) .zipWithIndex() .splitWhen((_, [, j]) => j === 3 // flop || j === 4 // turn || j >= 5 // river && j % 2 === 1 // ...players' hands ) .map(chunk => // Unzip index chunk.map(([card]) => card) ) // flop = ['3♦', '9♣', 'J♦'] // turn = ['4♣'] // river = ['7♦'] // hands = ['J♠', '4♥'], ['10♠', '8♥']
Le premier joueur a une paire de valets au flop, tandis que le deuxième joueur obtient une quinte, mais uniquement sur la rivière. Qui va gagner ?
Tout ce qui précède peut être réalisé avec uniquement des structures de données natives. Cependant, le code écrit avec Fluent Streams se lit mieux. Bien que rendre le code plus lisible soit un objectif parfaitement valable, le coût pour y parvenir devrait être faible en termes de charge cognitive, de taille de bundle et de performances.
Et c’est exactement le cas avec Fluent Streams ! Voici pourquoi :
La bibliothèque est expédiée non transpilée vers ES5. Cette décision est motivée par le désir de conserver une petite taille de bundle, obtenue en tirant parti des fonctionnalités d'ES6 qui permettent des itérations avec un code très concis, notamment des générateurs. Cependant, seules les fonctionnalités linguistiques largement prises en charge sont utilisées.
Si vous êtes toujours en train de transpiler vers ES5, vous pouvez utiliser la bibliothèque en la transpilant vous-même et en ajoutant des polyfills. Sachez cependant que cela augmentera la taille du bundle, ce n’est donc pas recommandé. Au lieu de cela, cela pourrait être l'occasion idéale pour revoir la configuration de votre build et adopter les fonctionnalités JavaScript modernes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!