Program yang bermakna menerima masukan dan menghasilkan keluaran, dan itulah inti dari I/O, singkatan dari input/output. JavaScript menyediakan perkakas yang berbeda untuk setiap tempat berjalannya. Di browser, fungsi prompt() dan alert() menampilkan kotak dialog kepada pengguna, sedangkan di Node.js masukan dibaca dari terminal lewat modul readline. Topik ini mengenalkan keduanya, lengkap dengan demo halaman untuk fungsi browser dan pola terminal yang dapat dieksekusi ulang.
Dialog browser: prompt dan alert#
prompt() dan alert() adalah dua fungsi yang hanya ada di browser. alert() menampilkan kotak pesan dengan satu tombol penutup, sedangkan prompt() menampilkan kotak teks, menunggu pengguna menulis sesuatu, lalu mengembalikan isinya sebagai string. Jika kotak prompt ditutup tanpa mengisi, nilai kembaliannya adalah null. Keduanya jarang dipakai pada aplikasi nyata, tetapi sangat praktis untuk mengenal alur masukan dan keluaran pada halaman.
// tidak-dijalankan
const nama = prompt("Siapa nama panggilan?");
alert(`Halo, ${nama}!`);Dua baris di atas hanya dapat berjalan di browser, karena Node.js tidak memiliki prompt maupun alert, dan memanggilnya di Node berakhir dengan pesan ReferenceError. Demo berikut memperagakan keduanya di dalam halaman. Tekan tombolnya, isi nama pada kotak yang muncul, lalu perhatikan pesan alert yang menyusul.
Di dalam demo, nilai kembalian prompt() diperiksa terlebih dahulu, karena penutupan kotak tanpa mengisi menghasilkan null. Pemeriksaan sederhana ini menghindarkan pesan Halo, null! yang mengganggu. Pola menunggu masukan, memeriksa, lalu merespons adalah pola dasar I/O di browser, dan pada aplikasi nyata perannya digantikan oleh form HTML yang dibahas pada modul DOM dan event.
Membaca masukan di Node.js dengan readline#
Node.js tidak punya kotak dialog, dan masukannya dibaca dari standard input, yaitu aliran teks yang masuk ke program dari terminal. Perkakasnya adalah modul node:readline/promises yang menyiapkan antarmuka pembacaan baris demi baris. Versi promises membuat pembacaan dapat ditunggu dengan await, sehingga kode mengikuti urutan tulisannya. Programnya interaktif, sehingga pengujian pada bagian akhir mengirimkan masukan langsung lewat terminal, bukan mengeksekusi program tanpa masukan. Berkas berikut adalah program pembaca nama panggilan yang lengkap.
// tidak-dijalankan
// tanya.js: membaca masukan dari terminal dengan readline
const readline = require("node:readline/promises");
const { stdin: input, stdout: output } = require("node:process");
async function main() {
const rl = readline.createInterface({ input, output });
const nama = await rl.question("Tulis nama panggilan: ");
console.log(`Halo, ${nama}! Selamat belajar JavaScript.`);
rl.close(); // antarmuka ditutup agar proses berakhir
}
main();Program di atas membuat antarmuka readline yang terhubung ke stdin dan stdout, lalu rl.question() menampilkan pertanyaan dan menunggu satu baris masukan. Nilai kembaliannya adalah string apa adanya, termasuk spasi di ujungnya bila ada. Baris rl.close() wajib dipanggil setelah pembacaan selesai, karena antarmuka yang masih terbuka membuat proses Node tetap menunggu masukan berikutnya.
Menjalankan dan memberi masukan lewat terminal#
Cara paling langsung mencoba tanya.js adalah menjalankannya lalu mengetik jawaban di terminal. Untuk pengujian tanpa interaksi, masukan dapat disalurkan lewat pipe, yaitu menghubungkan keluaran satu perintah menjadi masukan perintah lain dengan tanda |. Perintah berikut mengirim teks Budi ke program.
# kirim teks Budi sebagai masukan untuk tanya.js
echo "Budi" | node tanya.jsTulis nama panggilan: Halo, Budi! Selamat belajar JavaScript.Keluarannya satu baris karena pertanyaan dari rl.question() ditulis tanpa baris baru, sehingga sapaan yang menyusul menempel di belakangnya. Teks Budi tidak tercetak, karena teks itu berasal dari pipe dan langsung dikonsumsi program, bukan diketik manusia di terminal. Pola echo | node inilah yang dipakai untuk memverifikasi program berbasis readline tanpa interaksi manual. Ganti Budi dengan teks lain, dan keluarannya akan mengikuti.
Ringkasan#
prompt()danalert()hanya ada di browser, danprompt()mengembalikan isi teks ataunullketika kotaknya ditutup kosong.- Node.js membaca masukan dari standard input lewat modul
node:readline/promisesyang ditunggu denganawait. rl.close()wajib dipanggil agar proses Node berakhir setelah pembacaan selesai.- Masukan uji dapat disalurkan lewat pipe, misalnya
echo "Budi" | node tanya.js.
Referensi#
- Readline — Node.js — Dokumentasi resmi modul readline beserta varian promises-nya.
- Node.js API — Node.js — Indeks seluruh API bawaan Node.js.