Function JavaScript: Membuat Kode Lebih Rapi dan Bisa Digunakan Ulang
Halo, Gabuters!
Pada artikel sebelumnya, kita sudah belajar perulangan JavaScript menggunakan for, while, dan do…while.
Dengan perulangan, kita tidak perlu menulis instruksi yang sama berkali-kali ketika ingin menjalankan suatu pekerjaan secara berulang.
Namun, sekarang bayangkan kita membuat website yang perlu menampilkan pesan sambutan di beberapa bagian program.
Kita mungkin menulis kode seperti ini:
console.log("Halo, Gabuters!");console.log("Selamat datang di BapakGabut.");Kemudian, ketika membutuhkan pesan yang sama di bagian lain, kita menyalin kedua baris tersebut.
Kalau hanya dua kali, mungkin belum terasa masalahnya.
Tetapi bagaimana jika kode yang sama digunakan di sepuluh tempat?
Ketika ingin mengubah pesannya, kita harus mencari dan memperbaiki semuanya.
Di sinilah function menjadi sangat berguna.
Dengan function, kita bisa mengelompokkan instruksi menjadi satu bagian kode yang dapat dipanggil kembali.
Pada artikel ini, kita akan belajar membuat function, memberikan input, mengembalikan hasil, dan memahami beberapa bentuk function dalam JavaScript.
1. Apa Itu Function?
Function adalah blok kode yang dirancang untuk menjalankan tugas tertentu.
Kita dapat membuat function satu kali, kemudian memanggilnya ketika diperlukan.
Contohnya:
function tampilkanSalam() { console.log("Halo, Gabuters!"); console.log("Selamat datang di BapakGabut.");}Kode tersebut membuat function bernama tampilkanSalam.
Namun, ketika kode itu dijalankan, pesan belum otomatis muncul.
Kenapa?
Karena kita baru mendefinisikan function, belum memanggilnya.
Untuk menjalankannya, gunakan:
tampilkanSalam();Hasilnya:
Halo, Gabuters!Selamat datang di BapakGabut.Kita bisa memanggil function yang sama beberapa kali:
tampilkanSalam();tampilkanSalam();Hasilnya:
Halo, Gabuters!Selamat datang di BapakGabut.Halo, Gabuters!Selamat datang di BapakGabut.Jadi, kita tidak perlu menyalin isi function setiap kali ingin menjalankannya.
2. Struktur Dasar Function
Mari perhatikan bentuk function declaration berikut:
function namaFunction() { // Instruksi yang dijalankan}Ada beberapa bagian penting:
functionmerupakan kata kunci untuk mendeklarasikan function.namaFunctionadalah nama yang kita berikan.()digunakan untuk menempatkan parameter jika diperlukan.{}membungkus blok kode function.
Contohnya:
function tampilkanJudul() { console.log("Belajar JavaScript");}Untuk menjalankannya:
tampilkanJudul();Perhatikan perbedaan antara:
tampilkanJudulDan:
tampilkanJudul()Penulisan pertama merujuk pada function tersebut tanpa langsung menjalankannya.
Sedangkan penulisan kedua memanggil function.
Perbedaan ini akan semakin penting ketika kita mulai menggunakan event pada browser.
3. Function dengan Parameter
Function menjadi lebih berguna ketika dapat menerima input.
Bayangkan kita ingin menampilkan pesan sambutan untuk beberapa pengunjung.
Kalau tanpa parameter, kita mungkin membuat function berbeda untuk setiap nama.
function salamBudi() { console.log("Halo, Budi!");}
function salamAni() { console.log("Halo, Ani!");}Cara tersebut tidak praktis.
Kita bisa membuat satu function yang menerima nama sebagai parameter.
function tampilkanSalam(nama) { console.log(`Halo, ${nama}!`);}Kemudian memanggilnya:
tampilkanSalam("Budi");tampilkanSalam("Ani");tampilkanSalam("Gabuters");Hasilnya:
Halo, Budi!Halo, Ani!Halo, Gabuters!Pada contoh tersebut, nama adalah parameter.
Parameter merupakan nama variabel yang didefinisikan dalam deklarasi function untuk menerima input.
Sedangkan "Budi", "Ani", dan "Gabuters" adalah argument.
Argument merupakan nilai yang kita berikan ketika memanggil function.
Mudahnya:
- Parameter disiapkan ketika function dibuat.
- Argument diberikan ketika function dipanggil.
4. Function dengan Beberapa Parameter
Sebuah function dapat memiliki lebih dari satu parameter.
Contohnya, kita ingin menghitung total artikel dari dua kategori.
function hitungTotalArtikel(html, css) { const total = html + css;
console.log(`Total artikel: ${total}`);}Pemanggilannya:
hitungTotalArtikel(5, 6);Hasilnya:
Total artikel: 11Kita juga bisa menggunakan nilai yang berbeda:
hitungTotalArtikel(10, 8);Hasilnya:
Total artikel: 18Perhatikan urutan argument.
Ketika kita memanggil:
hitungTotalArtikel(5, 6);Nilai 5 diberikan kepada parameter html, sedangkan 6 diberikan kepada css.
Karena itu, urutan argument perlu diperhatikan.
Parameter default
JavaScript juga mendukung nilai default pada parameter.
Contohnya:
function tampilkanSalam(nama = "Gabuters") { console.log(`Halo, ${nama}!`);}Sekarang kita bisa memanggil:
tampilkanSalam();tampilkanSalam("Budi");Hasilnya:
Halo, Gabuters!Halo, Budi!Ketika argument tidak diberikan atau bernilai undefined, nilai default digunakan.
Namun, jika kita memberikan null, nilai default tidak otomatis digunakan.
Contohnya:
tampilkanSalam(null);Hasilnya:
Halo, null!Ini berkaitan dengan perbedaan null dan undefined yang sudah kita pelajari pada artikel tipe data.
5. Mengenal return
Sejauh ini, function kita langsung menampilkan hasil menggunakan console.log().
Tetapi bagaimana jika hasil perhitungannya ingin digunakan lagi?
Misalnya, kita ingin menghitung total artikel, kemudian menggunakan hasilnya untuk perhitungan lain.
Untuk itu, kita membutuhkan return.
Contohnya:
function hitungTotalArtikel(html, css) { return html + css;}Sekarang kita bisa menyimpan hasil function ke dalam variabel.
const total = hitungTotalArtikel(5, 6);
console.log(total);Hasilnya:
11Perhatikan bahwa function tidak langsung mencetak hasil.
Function mengembalikan nilai kepada kode yang memanggilnya.
Nilai tersebut kemudian dapat digunakan untuk kebutuhan lain.
Contohnya:
function hitungTotalArtikel(html, css) { return html + css;}
const totalArtikel = hitungTotalArtikel(5, 6);const targetArtikel = 20;
const sisaTarget = targetArtikel - totalArtikel;
console.log(`Total artikel: ${totalArtikel}`);console.log(`Sisa target: ${sisaTarget}`);Hasilnya:
Total artikel: 11Sisa target: 9Dengan return, function menjadi lebih fleksibel karena hasilnya tidak hanya digunakan untuk ditampilkan.
6. Perbedaan console.log dan return
Ini salah satu hal yang sering membingungkan ketika pertama belajar function.
Perhatikan:
function tambah(a, b) { console.log(a + b);}Kemudian:
const hasil = tambah(5, 3);
console.log(hasil);Hasilnya:
8undefinedKenapa muncul undefined?
Karena function tambah() hanya menampilkan hasil menggunakan console.log().
Function tersebut tidak mengembalikan nilai secara eksplisit.
Dalam JavaScript, function yang selesai tanpa mengembalikan nilai akan menghasilkan undefined.
Sekarang bandingkan:
function tambah(a, b) { return a + b;}
const hasil = tambah(5, 3);
console.log(hasil);Hasilnya:
8Perbedaannya:
console.log() | return |
|---|---|
| Menampilkan informasi di Console | Mengembalikan nilai dari function |
| Cocok untuk melihat hasil atau debugging | Cocok ketika hasil perlu digunakan kembali |
| Tidak otomatis menjadi nilai hasil function | Menentukan nilai yang diterima pemanggil |
Sebuah function juga boleh menggunakan keduanya jika memang diperlukan.
Namun, untuk function yang tugas utamanya menghitung atau menghasilkan nilai, penggunaan return biasanya lebih fleksibel.
7. return Juga Menghentikan Eksekusi Function
Selain mengembalikan nilai, return menghentikan eksekusi function saat itu.
Contohnya:
function periksaNilai(nilai) { if (nilai < 0) { return "Nilai tidak boleh negatif"; }
return "Nilai diterima";}Pemanggilannya:
console.log(periksaNilai(-5));console.log(periksaNilai(80));Hasilnya:
Nilai tidak boleh negatifNilai diterimaKetika nilai kurang dari 0, function langsung mengembalikan pesan kesalahan.
Instruksi setelah return tidak dijalankan pada pemanggilan tersebut.
Pola seperti ini sering disebut early return.
Early return dapat membantu menyederhanakan function ketika kita perlu memeriksa kondisi yang membuat proses tidak bisa dilanjutkan.
8. Mengenal Scope Variabel
Sekarang kita bahas konsep penting lainnya, yaitu scope.
Scope menentukan di bagian mana sebuah variabel dapat diakses.
Perhatikan contoh berikut:
function tampilkanArtikel() { const judul = "Belajar JavaScript";
console.log(judul);}
tampilkanArtikel();Hasilnya:
Belajar JavaScriptVariabel judul dibuat di dalam function.
Sekarang coba mengaksesnya dari luar function:
console.log(judul);Kode tersebut menghasilkan ReferenceError karena judul tidak tersedia di luar scope function.
Variabel di luar function
Contoh berikut berbeda:
const namaWebsite = "BapakGabut";
function tampilkanWebsite() { console.log(namaWebsite);}
tampilkanWebsite();Hasilnya:
BapakGabutFunction dapat membaca variabel yang tersedia dari scope luarnya sesuai aturan lexical scope JavaScript.
Namun, kita sebaiknya tidak membuat semua data sebagai variabel global.
Terlalu banyak ketergantungan pada variabel global dapat membuat kode lebih sulit diuji dan dipelihara.
Block scope dengan let dan const
Variabel yang dibuat menggunakan let dan const juga mengikuti block scope.
Contohnya:
if (true) { const status = "published";
console.log(status);}Kode di atas dapat menampilkan "published".
Tetapi jika kita mencoba mengakses status di luar blok if, akan muncul ReferenceError.
Karena itu, perhatikan di mana sebuah variabel dideklarasikan.
9. Function Declaration dan Function Expression
Sampai sekarang, kita membuat function menggunakan bentuk berikut:
function tampilkanSalam() { console.log("Halo, Gabuters!");}Bentuk ini disebut function declaration.
JavaScript juga mendukung function expression, yaitu function yang digunakan sebagai bagian dari sebuah ekspresi.
Contohnya:
const tampilkanSalam = function () { console.log("Halo, Gabuters!");};Pemanggilannya tetap sama:
tampilkanSalam();Hasilnya:
Halo, Gabuters!Apa perbedaannya?
Salah satu perbedaan penting berkaitan dengan hoisting.
Function declaration dapat dipanggil sebelum posisi deklarasinya dalam scope yang sama.
Contohnya:
tampilkanSalam();
function tampilkanSalam() { console.log("Halo, Gabuters!");}Kode tersebut dapat dijalankan.
Sedangkan function expression yang disimpan dalam variabel const tidak dapat dipanggil sebelum deklarasi variabelnya selesai dieksekusi.
Contohnya:
tampilkanSalam();
const tampilkanSalam = function () { console.log("Halo, Gabuters!");};Kode tersebut menghasilkan ReferenceError.
Untuk pemula, kita tidak perlu terlalu bergantung pada hoisting.
Menuliskan function sebelum digunakan sering membantu menjaga alur kode tetap mudah dibaca.
10. Mengenal Arrow Function
JavaScript modern menyediakan cara lain untuk menulis function, yaitu arrow function.
Contohnya:
const tampilkanSalam = (nama) => { console.log(`Halo, ${nama}!`);};Pemanggilannya:
tampilkanSalam("Gabuters");Hasilnya:
Halo, Gabuters!Sekilas, arrow function mirip dengan function expression.
Namun, cara penulisannya lebih ringkas.
Bandingkan:
const tambah = function (a, b) { return a + b;};Dengan:
const tambah = (a, b) => { return a + b;};Keduanya menghasilkan nilai yang sama ketika dipanggil dengan argument yang sama.
Arrow function dengan implicit return
Jika arrow function hanya berisi satu ekspresi yang ingin dikembalikan, kita bisa menulisnya lebih singkat.
const tambah = (a, b) => a + b;
console.log(tambah(5, 3));Hasilnya:
8Pada bentuk tersebut, hasil ekspresi a + b dikembalikan secara otomatis.
Namun, jika menggunakan blok {}, kita tetap perlu menuliskan return ketika ingin mengembalikan nilai.
Contohnya:
const tambah = (a, b) => { return a + b;};Apakah arrow function selalu lebih baik?
Tidak selalu.
Arrow function memiliki perbedaan perilaku dibanding function biasa, terutama terkait this, arguments, dan penggunaannya sebagai constructor.
Karena itu, arrow function bukan sekadar function biasa dengan penulisan lebih pendek.
Untuk tahap awal, kita bisa menggunakan function declaration untuk function bernama yang jelas, dan mengenal arrow function sebagai bentuk yang sering ditemui pada JavaScript modern.
Nanti, ketika mempelajari array dan event, kita akan melihat penggunaan arrow function dalam konteks yang lebih nyata.
11. Function sebagai Nilai
Ada satu karakteristik JavaScript yang menarik.
Function dapat disimpan dalam variabel dan diberikan sebagai argument kepada function lain.
Contohnya:
function tampilkanPesan() { console.log("Halo, Gabuters!");}
const jalankan = tampilkanPesan;
jalankan();Hasilnya:
Halo, Gabuters!Perhatikan bahwa kita menulis:
const jalankan = tampilkanPesan;Bukan:
const jalankan = tampilkanPesan();Penulisan pertama menyimpan referensi function ke dalam variabel jalankan.
Sedangkan penulisan kedua menjalankan function terlebih dahulu, lalu menyimpan nilai hasilnya.
Konsep function sebagai nilai akan sangat berguna ketika kita mempelajari callback, metode array, dan event.
12. Praktik: Membuat Function Pengelola Artikel
Sekarang kita gabungkan materi function dengan variabel, percabangan, dan perulangan yang sudah dipelajari.
Bayangkan kita ingin membuat beberapa function sederhana untuk membantu mengelola informasi artikel BapakGabut.
Kita mulai dengan function untuk menghitung total artikel.
function hitungTotalArtikel(terbit, draft) { return terbit + draft;}Kemudian kita buat function untuk menentukan status artikel.
function tentukanStatusArtikel(sudahTerbit) { if (sudahTerbit) { return "Published"; }
return "Draft";}Selanjutnya, buat function untuk menampilkan ringkasan.
function tampilkanRingkasan(terbit, draft) { const total = hitungTotalArtikel(terbit, draft);
console.log("=== Ringkasan Artikel BapakGabut ==="); console.log(`Artikel terbit: ${terbit}`); console.log(`Artikel draft: ${draft}`); console.log(`Total artikel: ${total}`);}Sekarang gabungkan semuanya dalam satu file script.js:
function hitungTotalArtikel(terbit, draft) { return terbit + draft;}
function tentukanStatusArtikel(sudahTerbit) { if (sudahTerbit) { return "Published"; }
return "Draft";}
function tampilkanRingkasan(terbit, draft) { const total = hitungTotalArtikel(terbit, draft);
console.log("=== Ringkasan Artikel BapakGabut ==="); console.log(`Artikel terbit: ${terbit}`); console.log(`Artikel draft: ${draft}`); console.log(`Total artikel: ${total}`);}
const jumlahTerbit = 8;const jumlahDraft = 3;
tampilkanRingkasan(jumlahTerbit, jumlahDraft);
console.log( `Status artikel baru: ${tentukanStatusArtikel(false)}`);Hasilnya:
=== Ringkasan Artikel BapakGabut ===Artikel terbit: 8Artikel draft: 3Total artikel: 11Status artikel baru: DraftDari contoh ini, kita mulai melihat manfaat memecah program menjadi beberapa function.
Setiap function memiliki tanggung jawab yang jelas.
hitungTotalArtikel() bertugas menghitung total.
tentukanStatusArtikel() menentukan label status.
tampilkanRingkasan() menyusun informasi yang ditampilkan.
Jika suatu saat aturan status berubah, kita bisa memperbaiki function yang berkaitan tanpa harus menulis ulang seluruh program.
Perlu diingat bahwa angka pada contoh tersebut hanya data latihan.
13. Kesalahan Umum Saat Menggunakan Function
Membuat function tetapi lupa memanggilnya
function tampilkanSalam() { console.log("Halo!");}Kode tersebut hanya mendefinisikan function.
Agar pesannya muncul, kita harus memanggil:
tampilkanSalam();Menganggap console.log sama dengan return
function tambah(a, b) { console.log(a + b);}
const hasil = tambah(2, 3);Nilai hasil adalah undefined, karena function tidak mengembalikan nilai secara eksplisit.
Jika hasilnya ingin digunakan kembali, gunakan return.
Lupa memberikan argument
function tambah(a, b) { return a + b;}
console.log(tambah(5));Hasilnya:
NaNKenapa?
Karena parameter b menerima nilai undefined ketika argument kedua tidak diberikan.
Operasi 5 + undefined menghasilkan NaN.
Untuk kebutuhan tertentu, kita bisa menggunakan parameter default atau memvalidasi input.
Salah memahami scope
Variabel yang dibuat di dalam function tidak otomatis dapat digunakan di luar function.
function contoh() { const pesan = "Halo!";}
console.log(pesan);Kode tersebut menghasilkan ReferenceError.
Function terlalu banyak melakukan pekerjaan
Bayangkan sebuah function bertugas membaca input, memvalidasi data, menghitung total, mengubah HTML, dan mengirim data ke server sekaligus.
Function seperti itu bisa menjadi sulit dipahami dan diuji.
Jika memungkinkan, pisahkan pekerjaan menjadi beberapa function dengan tanggung jawab yang jelas.
Namun, jangan juga memecah setiap satu baris kode menjadi function tanpa alasan.
Tujuannya adalah membuat kode lebih mudah dibaca dan dipelihara.
14. Latihan Mandiri
Sekarang giliran Gabuters mencoba.
Latihan 1: Function salam
Buat function bernama sapaPengunjung() yang menerima parameter nama.
Function tersebut harus mengembalikan pesan:
Halo, Budi! Selamat datang di BapakGabut.Gunakan return, kemudian tampilkan hasilnya melalui console.log().
Latihan 2: Menghitung total artikel
Buat function bernama hitungTotal() dengan tiga parameter:
- Jumlah artikel HTML.
- Jumlah artikel CSS.
- Jumlah artikel JavaScript.
Function harus mengembalikan total seluruh artikel.
Latihan 3: Menentukan kategori nilai
Buat function kategoriNilai(nilai).
Aturannya:
- Nilai 90 ke atas:
"Sangat Baik". - Nilai 75 sampai 89:
"Baik". - Nilai 60 sampai 74:
"Cukup". - Nilai di bawah 60:
"Perlu Belajar Lagi".
Gunakan if, else if, dan return.
Latihan 4: Menggunakan arrow function
Ubah function berikut menjadi arrow function:
function kali(a, b) { return a * b;}Kemudian panggil dengan argument 4 dan 5.
Tantangan tambahan
Buat function tampilkanNomorArtikel(jumlah).
Function tersebut menerima jumlah artikel, kemudian menggunakan perulangan for untuk menampilkan:
Artikel #1Artikel #2Artikel #3Jika dipanggil dengan:
tampilkanNomorArtikel(3);Coba juga panggil menggunakan nilai 5 dan lihat hasilnya.
15. Penutup
Pada artikel ini, kita sudah belajar membuat dan menggunakan function dalam JavaScript.
Kita memahami perbedaan parameter dan argument, menggunakan return untuk mengembalikan nilai, serta mengenal scope variabel.
Kita juga mempelajari function declaration, function expression, dan arrow function.
Yang paling penting, kita mulai memahami bahwa function membantu mengorganisasi kode menjadi bagian-bagian yang dapat digunakan kembali.
Namun, sejauh ini contoh kita masih banyak menggunakan variabel terpisah.
Bagaimana jika kita mempunyai puluhan artikel dengan judul, kategori, dan status masing-masing?
Apakah kita harus membuat variabel berbeda untuk setiap artikel?
Tentu ada cara yang lebih praktis.
Pada artikel berikutnya, kita akan membahas Array dan Object JavaScript: Mengelola Sekumpulan Data.
Kita akan belajar menyimpan kumpulan data, mengaksesnya, dan mengolahnya menggunakan metode seperti forEach(), map(), dan filter().
Sampai jumpa di artikel berikutnya, Gabuters!
JavaScript
SelesaiBagikan Artikel
Buat poster berbagi atau salin tautan artikel ini.
Lanjut membaca
Coba jalur lain
Pilihan konsisten dari artikel lain
Terakhir diperbarui pada , 21 hari yang lalu
Sebagian konten mungkin sudah tidak berlaku