Kita telah mengenal list, dictionary, function, module, exception, dan pembacaan-tulisan berkas JSON. Sekarang saatnya merangkai seluruh materi tersebut menjadi satu program yang benar-benar dipakai: pengelola daftar tugas berbasis terminal. Program ini menampilkan menu, menunggu perintah pengguna, dan menyimpan setiap perubahan ke berkas tugas.json sehingga data bertahan antar eksekusi.
Empat operasi inti yang kita bangun:
- tambah — menyimpan tugas baru berisi
id,judul, dan statusselesai, - daftar — menampilkan seluruh tugas dengan penanda
[ ]dan[x], - selesai — menandai satu tugas sebagai sudah dikerjakan,
- hapus — menghapus satu tugas dari daftar.
Seluruh kode sumber setiap tahap tersedia pada bagian Berkas Sumber di bawah halaman setiap bagian.
Perilaku yang Diharapkan #
Sebelum menulis kode, mari kita tetapkan perilaku akhir program. Sesi berikut menambah dua tugas, menampilkan daftar, menandai tugas kedua selesai, lalu keluar:
echo "1
Belajar Python dasar
1
Beli susu
2
3
2
2
5" | python3 main.pyOutput yang Dihasilkan:
=== Pengelola Daftar Tugas ===
1. Tambah tugas
2. Daftar tugas
3. Tandai selesai
4. Hapus tugas
5. Keluar
Pilihan: Judul tugas: Tugas "Belajar Python dasar" tersimpan dengan id 1.
=== Pengelola Daftar Tugas ===
1. Tambah tugas
2. Daftar tugas
3. Tandai selesai
4. Hapus tugas
5. Keluar
Pilihan: Judul tugas: Tugas "Beli susu" tersimpan dengan id 2.
=== Pengelola Daftar Tugas ===
1. Tambah tugas
2. Daftar tugas
3. Tandai selesai
4. Hapus tugas
5. Keluar
Pilihan: [ ] 1. Belajar Python dasar
[ ] 2. Beli susu
=== Pengelola Daftar Tugas ===
1. Tambah tugas
2. Daftar tugas
3. Tandai selesai
4. Hapus tugas
5. Keluar
Pilihan: Nomor tugas: Tugas 2 ditandai selesai.
=== Pengelola Daftar Tugas ===
1. Tambah tugas
2. Daftar tugas
3. Tandai selesai
4. Hapus tugas
5. Keluar
Pilihan: [ ] 1. Belajar Python dasar
[x] 2. Beli susu
=== Pengelola Daftar Tugas ===
1. Tambah tugas
2. Daftar tugas
3. Tandai selesai
4. Hapus tugas
5. Keluar
Pilihan: Sampai jumpa!Perintah echo di atas meniru ketikan pengguna: setiap baris di dalam tanda kutip mewakili satu masukan yang diakhiri tombol Enter. Setelah program berakhir, berkas tugas.json berisi kedua tugas tersebut, dan eksekusi berikutnya memuatnya kembali.
Tujuan Pembelajaran #
- Mengelola state program yang bertahan di dalam loop menu.
- Melakukan operasi list dengan aman: mencari, menandai, dan menghapus elemen.
- Memisahkan tanggung jawab ke dalam module tersendiri (
storage.py). - Menyimpan dan memuat data dengan module
json. - Menulis pemuatan data defensif yang bertahan dari berkas rusak.
- Melakukan refactoring menjadi fungsi kecil lalu mengujinya dengan pytest.
Prasyarat #
Materi berikut perlu dikuasai sebelum memulai proyek ini:
- List, Dictionary, serta Menambah, Mengubah, dan Menghapus Elemen dari section Struktur Data Dasar
- while Loops dari section Control Flow
- Mendefinisikan Fungsi dari section Fungsi
- Membuat Module Sendiri dan Main Module dan name dari section Modules dan Packages
- try dan except dari section Exception Handling
- Membaca dan Menulis JSON dari section File Handling
- Type Hints pada Fungsi dari section Type Hints dan Static Analysis
- Menulis Test dengan pytest dari section Testing dan Code Quality
Tahapan Pengerjaan #
Proyek dikerjakan dalam lima bagian berurutan. Setiap bagian menghasilkan program yang dapat dijalankan penuh pada tahapnya:
- Bagian 1: Struktur Program — kerangka loop menu, bentuk data tugas, serta perintah tambah dan daftar.
- Bagian 2: Operasi Tugas — perintah selesai dan hapus beserta kehati-hatian membaca nomor.
- Bagian 3: Menyimpan Data ke File — module
storage.pydan penyimpanan JSON pada setiap perubahan. - Bagian 4: Memuat dan Memvalidasi Data — pemuatan defensif terhadap berkas hilang, JSON rusak, dan record tidak sah.
- Bagian 5: Refactoring dan Testing — fungsi murni, type hints, dan test pytest yang semuanya wajib lulus.
Mulailah dari Bagian 1 dan ikuti urutannya karena setiap bagian dibangun di atas kode bagian sebelumnya.
Bangun kerangka program: loop menu, state daftar tugas, dispatch pilihan, serta perintah tambah dan daftar.
Buka → # Bagian 2: Operasi TugasLengkapi operasi tandai selesai dan hapus dengan penanganan nomor serta tampilan daftar berpenanda.
Buka → # Bagian 3: Menyimpan Data ke FilePisahkan modul storage dan simpan daftar tugas ke berkas JSON pada setiap perubahan data.
Buka → # Bagian 4: Memuat dan Memvalidasi DataMuat data secara defensif: tangani berkas hilang, JSON rusak, dan record yang tidak sah.
Buka → # Bagian 5: Refactoring dan TestingRefactoring menjadi fungsi teruji dengan type hints lalu verifikasi modul storage menggunakan pytest.
Buka →