Error Corner BAB 4
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah halaman ini, kamu dapat mengenali penyebab error function yang paling umum dan memperbaikinya dengan tepat.
Pendahuluan
Section titled “Pendahuluan”Error pada function sering mudah dideteksi oleh TypeScript, tapi ada juga bug logika yang tidak menghasilkan error merah namun membuat program berperilaku salah.
Error 1 — Function Didefinisikan tapi Tidak Pernah Dipanggil
Section titled “Error 1 — Function Didefinisikan tapi Tidak Pernah Dipanggil”function tampilkanSalam(): void { console.log("Halo!")}
// Tidak pernah dipanggil — tidak ada outputMengapa Terjadi?
Section titled “Mengapa Terjadi?”Mendefinisikan function hanya menyimpan “resep”. Program harus memanggilnya secara eksplisit.
Cara Memperbaiki
Section titled “Cara Memperbaiki”function tampilkanSalam(): void { console.log("Halo!")}
tampilkanSalam() // ← wajib dipanggilError 2 — Lupa return
Section titled “Error 2 — Lupa return”function hitungLuas(p: number, l: number): number { const luas = p * l // TypeScript Error: Function lacks ending return statement}Cara Memperbaiki
Section titled “Cara Memperbaiki”function hitungLuas(p: number, l: number): number { return p * l}Error 3 — Tipe Argument Salah
Section titled “Error 3 — Tipe Argument Salah”function sapa(nama: string): void { console.log(`Halo, ${nama}!`)}
sapa(123) // Error: Argument of type 'number' is not assignable to type 'string'Cara Memperbaiki
Section titled “Cara Memperbaiki”sapa("Andi")sapa(String(123)) // konversi jika memang diperlukanError 4 — Jumlah Argument Tidak Sesuai
Section titled “Error 4 — Jumlah Argument Tidak Sesuai”function hitung(a: number, b: number): number { return a + b}
hitung(5) // Error: Expected 2 arguments, but got 1hitung(5, 3, 7) // Error: Expected 2 arguments, but got 3Cara Memperbaiki
Section titled “Cara Memperbaiki”Kirim argument sesuai jumlah parameter. Gunakan optional atau rest parameter jika jumlahnya memang bervariasi.
Error 5 — Menggunakan Variabel Lokal di Luar Function
Section titled “Error 5 — Menggunakan Variabel Lokal di Luar Function”function hitungNilai(): void { const hasil = 90}
hitungNilai()console.log(hasil) // Error: Cannot find name 'hasil'Cara Memperbaiki
Section titled “Cara Memperbaiki”function hitungNilai(): number { return 90}
const hasil = hitungNilai()console.log(hasil)Error 6 — Optional Parameter di Depan Parameter Biasa
Section titled “Error 6 — Optional Parameter di Depan Parameter Biasa”// Error: A required parameter cannot follow an optional parameterfunction f(a?: string, b: string): void { }Cara Memperbaiki
Section titled “Cara Memperbaiki”function f(a: string, b?: string): void { }Parameter opsional harus selalu di belakang parameter wajib.
Error 7 — Tidak Menangani Parameter Opsional yang Mungkin Undefined
Section titled “Error 7 — Tidak Menangani Parameter Opsional yang Mungkin Undefined”function cetakEmail(nama: string, email?: string): void { console.log(email.toUpperCase()) // Error! email mungkin undefined}Cara Memperbaiki
Section titled “Cara Memperbaiki”function cetakEmail(nama: string, email?: string): void { if (email !== undefined) { console.log(email.toUpperCase()) } else { console.log("Email tidak tersedia") }}Error 8 — Memanggil Anonymous Function Sebelum Deklarasi
Section titled “Error 8 — Memanggil Anonymous Function Sebelum Deklarasi”console.log(hitung(5)) // Error! 'hitung' used before its initialization
const hitung = function(n: number): number { return n * 2}Cara Memperbaiki
Section titled “Cara Memperbaiki”Selalu deklarasikan variable function sebelum memanggilnya. Named function (function hitung(...)) bisa dipanggil sebelum dideklarasikan karena di-hoist, tapi const/let tidak.
Strategi Debug Function
Section titled “Strategi Debug Function”- Periksa apakah function sudah dipanggil.
- Periksa apakah tipe parameter dan argument cocok.
- Periksa apakah ada
returnuntuk setiap jalur kode. - Tambahkan
console.logdi dalam function untuk memantau nilai parameter. - Periksa apakah variabel lokal diakses dari luar function.
Latihan
Section titled “Latihan”Identifikasi dan perbaiki semua bug dalam kode berikut:
function hitungRataRata(a: number, b: number, c: number): number { const total = a + b + c}
function tampilkan(nama?: string, nilai: number): void { console.log(`${nama}: ${nilai}`)}
const kuadrat = function(n: number): number { return n * n}
console.log(kuadrat(4))tampilkan("Andi", 88)console.log(hitungRataRata(80, 90, 70))Ringkasan
Section titled “Ringkasan”- Function yang tidak dipanggil tidak menghasilkan apapun.
- Setiap jalur kode non-void wajib punya
return. - Tipe dan jumlah argument harus cocok dengan parameter.
- Variabel lokal tidak bisa diakses dari luar function.
- Optional parameter wajib di posisi terakhir.