— Seri tentang penggunaan Ramda.js dalam produksi dunia nyata. Ini adalah artikel pertama dari seri ini.
Kita harus membuat opsi untuk bidang `bulan` dan bidang `tahun`.
Untuk kolom `bulan`, harus ada 01, 02, 03, 04, …, 11, 12. Perhatikan bahwa 1 ~ 9 harus diformat sebagai 01, 02, …, 09.
Untuk kolom `tahun`, pilihannya harus dimulai dari tahun ini, hingga 10 tahun ke depan. Dan mereka harus dikonversi dari 4 digit menjadi 2 digit.
Saat pengguna mengirimkan, kita harus menggabungkan dua string.
Percobaan pertama
Mari kita mulai membuat opsi bulan.
Saya teringat akan fungsi `waktu` Lodash. Untungnya, Ramda juga memiliki fungsi `waktu` sendiri.
(Angka → a) → Angka → [a]
Memanggil fungsi input
n
kali, mengembalikan array yang berisi hasil pemanggilan fungsi tersebut.
fn
dilewatkan satu argumen: Nilai saat ini darin
, yang dimulai pada0
dan secara bertahap bertambah menjadin - 1
.
Contoh:
R.times(R.identity, 5); //=>[0,1,2,3,4]
Besar! Itu pasti yang kita inginkan!
R.times(R.identity, 12);
Ini menghasilkan [0, 1, 2, ..., 10, 11]
.
Kita harus menambahkan semua item dalam daftar dengan 1.
Maka contoh fungsi yang paling sederhana dan paling umum untuk pengenalan FP hadir untuk menyelamatkan. “Ini adalah fungsi `tambah`.”
R.times(R.add(1), 12);
Sekarang daftar kita menjadi [1, 2, 3, ..., 11, 12]
. Besar.
R.pipa
Kami sekarang ingin menyembunyikan [1, 2, 3, ..., 11, 12]
, daftar angka, menjadi ["01", "02", ..., "11", "12"]
, daftar string.
Melakukan komposisi fungsi kiri ke kanan. Fungsi paling kiri mungkin memiliki arity apa pun; fungsi lainnya harus unary.
Di beberapa perpustakaan fungsi ini diberi nama
sequence
.
Jadi, bagaimana kita menerapkan fungsi ini?
tambahkan(1) ==› toString ==› format
menjadi
R.pipe(R.add(1), R.toString, format)
.
Tulis fungsi format
sederhana :
Menerapkan fungsi tersusun ini ke fungsi times
:
R.times(R.pipe(R.add(1), R.toString, format), 12);
Akhirnya, kita mendapatkan ["01", "02", ..., "11", "12"]
! Sempurna!
Untuk Bidang Tahun
Kelihatannya mirip. Ini cukup sederhana setelah kita mempelajari cara mendapatkan opsi bidang bulan.
Kita dapat menggabungkan dua nilai yang dipilih, dan mengirimkannya ke backend sekarang.
{ "pan": "...", "cvv": "123", "expiry": month.concat(year) }
Terima kasih telah membaca. Saya akan menulis lebih banyak tentang Ramda.js karena sangat membantu dan dapat diterapkan dalam produksi dunia nyata.
Saya mendiskusikan Ramda.js dengan rekan-rekan saya.
Pak N (terobsesi dengan FP dan Ramda): format
seharusnya ditulis seperti ini:
R.ifElse(R.equals(str.length, 1), `0${str}`, str)
Saya: Terkadang kita sebaiknya menggunakan vanilla.js saja.
Pak R : … Ini adalah teks pidato.