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 status selesai,
  • 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:

bash
echo "1
Belajar Python dasar
1
Beli susu
2
3
2
2
5" | python3 main.py

Output yang Dihasilkan:

text
=== 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:

  1. Bagian 1: Struktur Program — kerangka loop menu, bentuk data tugas, serta perintah tambah dan daftar.
  2. Bagian 2: Operasi Tugas — perintah selesai dan hapus beserta kehati-hatian membaca nomor.
  3. Bagian 3: Menyimpan Data ke File — module storage.py dan penyimpanan JSON pada setiap perubahan.
  4. Bagian 4: Memuat dan Memvalidasi Data — pemuatan defensif terhadap berkas hilang, JSON rusak, dan record tidak sah.
  5. 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.