— 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 dari n, yang dimulai pada 0 dan secara bertahap bertambah menjadi n - 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.

Fungsi `pipa`

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.