Challenge BAB 10
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah menyelesaikan challenge ini, kamu diharapkan dapat:
- Merancang dan memotong program menjadi beberapa file module secara mandiri.
- Mengatasi Callback Hell menggunakan Promise atau Async/Await.
- Melakukan pengambilan data API dan menangani error secara modular.
Aturan Pengerjaan
Section titled “Aturan Pengerjaan”Challenge 1 — Jeda Waktu (setTimeout)
Section titled “Challenge 1 — Jeda Waktu (setTimeout)”Tingkat: Mudah
Buatlah program yang mencetak pesan "1. Mulai", lalu setelah jeda 3 detik (3000 ms) mencetak "2. Tengah", dan langsung mencetak "3. Selesai" secara non-blocking (asynchronous). Amati urutan keluarnya di terminal.
Challenge 2 — Callback Penghitung Diskon
Section titled “Challenge 2 — Callback Penghitung Diskon”Tingkat: Mudah
Buat fungsi hitungHargaDiskonAsync(harga: number, callback: (hasil: number) => void): void dengan jeda 2 detik.
- Fungsi menghitung harga setelah diskon 15%.
- Setelah 2 detik, panggil fungsi
callbackdengan mengirimkan hasil hitungan. Panggil fungsi tersebut untuk harga100000.
Challenge 3 — Janji Siswa Lulus (Promise)
Section titled “Challenge 3 — Janji Siswa Lulus (Promise)”Tingkat: Mudah
Buat fungsi apakahSiswaLulus(nilai: number): Promise<string> yang mengembalikan Promise:
- Jika nilai >= 75, panggil
resolve("Siswa Lulus"). - Jika nilai < 75, panggil
reject("Siswa Remedial"). Konsumsi Promise tersebut menggunakan.then(),.catch(), dan.finally().
Challenge 4 — Pemuatan Data Guru (Async/Await)
Section titled “Challenge 4 — Pemuatan Data Guru (Async/Await)”Tingkat: Mudah
Buat fungsi async ambilNamaGuru(): Promise<string> yang mengembalikan nama "Pak Budi" setelah jeda 2 detik. Buat fungsi async kedua tampilkanGuru() yang menggunakan await untuk mengambil nama tersebut lalu mencetaknya.
Challenge 5 — Pengaman Ujian (Try…Catch Async)
Section titled “Challenge 5 — Pengaman Ujian (Try…Catch Async)”Tingkat: Mudah
Buat fungsi async bacaNilaiDatabase(): Promise<number> yang melemparkan error throw new Error("Koneksi Database Putus"). Buat fungsi async kedua yang memanggilnya dan mengamankan error tersebut menggunakan try...catch agar program tidak crash.
Challenge 6 — Ambil Pengguna (Fetch API)
Section titled “Challenge 6 — Ambil Pengguna (Fetch API)”Tingkat: Menengah
Lakukan fetch data pengguna internet menggunakan Fetch API ke URL:
https://jsonplaceholder.typicode.com/users/3
Buat interface User (id, name, email, phone). Konversi respon menjadi JSON, lalu tampilkan nama dan email pengguna nomor 3 tersebut secara aman.
Challenge 7 — Module Matematika
Section titled “Challenge 7 — Module Matematika”Tingkat: Menengah
- Buat file
src/bab10/challenge/matematika.ts. Eksport secara bernama (Named Export) konstantaPI = 3.14dan fungsihitungLuasLingkaran(r). - Buat file
src/bab10/challenge/main-soal7.ts, import kedua komponen tersebut, hitung luas lingkaran jari-jari 7, lalu tampilkan.
Challenge 8 — Default Export Kelas Siswa
Section titled “Challenge 8 — Default Export Kelas Siswa”Tingkat: Menengah
- Buat file
src/bab10/challenge/siswa.ts. Eksport default classSiswa(nama, kelas). - Buat file
src/bab10/challenge/main-soal8.ts, import class tersebut tanpa tanda kurung kurawal{ }dengan nama aliasSiswaRPL, lalu instansiasi objeknya.
Challenge 9 — Re-export Modul Koperasi
Section titled “Challenge 9 — Re-export Modul Koperasi”Tingkat: Menengah
- Buat file
barang.ts(export interface Barang) danjual.ts(export fungsi hitungTotal). - Buat file
index.tsdi folder yang sama untuk me-reexport keduanya. - Import keduanya di file utama luar dalam satu baris impor terpadu, lalu jalankan.
Challenge 10 — Namespace Kalkulator Fisika
Section titled “Challenge 10 — Namespace Kalkulator Fisika”Tingkat: Menengah
Buat dua namespace: Fisika (export fungsi hitungKecepatan(jarak, waktu)) dan Matematika (export fungsi hitungKecepatan - simulasi kecepatan belajar). Panggil kedua fungsi tersebut dari luar namespace menggunakan dot notation.
Latihan
Section titled “Latihan”Pilih satu challenge di atas yang menurutmu paling sulit. Buat coretan alur logikanya di atas kertas, kemudian ketik ulang solusinya dari nol tanpa melihat materi pemandu.
Ringkasan
Section titled “Ringkasan”- Ada 10 challenge dari mudah ke menengah.
- Kerjakan satu per satu, jalankan setiap file dengan TSX.
- Jika buntu, rancang logika dahulu baru tulis kode.