Karya seni: https://code-art.pictures/
Bayangkan perpustakaan yang:
Saya tidak menemui satu yang memenuhi semua keperluan ini, jadi saya mencipta perpustakaan kecil saya — aliran lancar.
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♥']
Pemain pertama mempunyai sepasang Jack pada kegagalan, manakala pemain kedua mendapat lurus, tetapi hanya di sungai. Siapa yang akan menang?
Semua perkara di atas boleh dicapai dengan hanya struktur data asli. Walau bagaimanapun, kod yang ditulis dengan Fluent Streams berbunyi lebih bagus. Walaupun menjadikan kod lebih mudah dibaca ialah matlamat yang betul-betul sah, kos untuk mencapainya hendaklah rendah dari segi beban kognitif, saiz berkas dan prestasi.
Dan begitulah keadaannya dengan Aliran Fasih! Inilah sebabnya:
Pustaka dihantar tidak dialihkan ke ES5. Keputusan ini didorong oleh keinginan untuk mengekalkan saiz berkas kecil, yang dicapai dengan memanfaatkan ciri ES6 yang membolehkan lelaran dengan kod yang sangat ringkas — terutamanya penjana. Walau bagaimanapun, hanya ciri bahasa yang disokong secara meluas digunakan.
Jika anda masih mengalihkan ke ES5, anda boleh menggunakan pustaka dengan mengalihkannya sendiri dan menambah poliisi. Walau bagaimanapun, ambil perhatian bahawa ini akan meningkatkan saiz berkas, jadi ia tidak disyorkan. Sebaliknya, ini mungkin masa yang sesuai untuk menyemak semula konfigurasi binaan anda dan menerima ciri JavaScript moden.
Atas ialah kandungan terperinci Aliran Fasih: Perpustakaan untuk Manipulasi Kaya Iterables. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!