Pengelola Tugas
Bangun sendiri dari brief di bawah. Semua pemeriksaan lolos berarti proyekmu selesai, salah satu syarat sertifikat JavaScript.
Brief
Bangun Pengelola Tugas: sebuah class DaftarTugas untuk mencatat to-do harianmu, lengkap dengan prioritas, filter, ringkasan, simpan-muat JSON, dan penyimpanan asynchronous. Kodenya murni logika JavaScript: tanpa DOM, tanpa fetch, tanpa console.log wajib.
Pakai fitur ES6+ yang sudah kamu pelajari: class, private field #berikutnyaId, default parameter, destructuring di parameter, spread, ??, dan async/await.
Bentuk satu tugas
tenggat hanya ada bila diberikan. Prioritas yang dikenal: "tinggi", "sedang", "rendah" (sudah ada di konstanta URUTAN).
Method wajib
| Method | Tugas |
|---|---|
constructor(tugas = []) | Simpan salinan data di this.tugas. #berikutnyaId lanjut dari id terbesar + 1 (mulai 1 bila kosong). Satu-satunya properti publik instance adalah tugas. |
tambah(judul, { prioritas = "sedang", tenggat } = {}) | Rapikan judul dengan trim(). Judul kosong: throw new Error("Judul wajib diisi"). Prioritas di luar tiga pilihan: throw new Error("Prioritas tidak dikenal"). Simpan dan kembalikan tugas baru dengan selesai: false. |
selesaikan(id) | Tandai selesai: true; true bila tugasnya ada, false bila tidak. |
hapus(id) | Buang tugas; true bila ada yang terhapus, false bila tidak. |
filter({ selesai, prioritas } = {}) | Array tugas yang cocok. Kriteria yang tidak diisi diabaikan, jadi filter() mengembalikan semua. |
urutkan() | Array baru: tinggi > sedang > rendah, prioritas sama diurutkan id kecil dulu. this.tugas tidak berubah. |
ringkasan() | { total, selesai, sisa } |
toJSON() | Data yang ditulis JSON.stringify(daftar): array salinan tugas. |
static dariJSON(teks) | JSON.parse di dalam try/catch. Teks rusak atau hasil yang bukan array: throw new Error("JSON tidak valid"). Kembalikan new DaftarTugas(data). |
async simpan(storage) | await storage.setItem("tugas", JSON.stringify(this)), lalu kembalikan jumlah tugas. |
Contoh hasil
Pemeriksa sudah menyiapkan contoh() (empat tugas di atas, sebelum selesaikan), buatStorage() (storage palsu dengan async setItem), dan gagal(fn) (pesan error dari fn).
Latihan kode: Pengelola Tugas
Lengkapi class DaftarTugas agar bisa menambah tugas dengan prioritas dan tenggat, menandai selesai, menghapus, menyaring, mengurutkan berdasarkan prioritas, merangkum jumlah tugas, menyimpan dan memuat ulang data lewat JSON dengan penanganan error, serta menyimpan ke storage asynchronous dengan async/await.