Menggabungkan Semuanya
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 25 dari 68.
Tantangan
MudahSaatnya menyelesaikan aplikasi daftar tugasmu. Pada langkah terakhir ini, kamu akan menggabungkan semua hal dari pelajaran sebelumnya: struct Task, addTask, viewAllTasks, completeTask, dan removeTask, yang dijalankan melalui serangkaian tindakan menu.
Kamu akan menerima tiga input:
- String berisi nama aplikasi dan nama pengguna yang dipisahkan dengan koma (misalnya,
"MyTasks,Alice") - String berisi tugas yang ada dalam daftar sejak awal, dengan format
"name1:status1,name2:status2", dengan status berupa"true"atau"false"(misalnya,"Write report:false,Call dentist:true"). Baris ini kosong jika daftar dimulai tanpa tugas. - String berisi tindakan dalam sesi, yang dipisahkan dengan koma. Tindakan bisa berupa namanya saja atau namanya beserta satu parameter yang digabungkan dengan
|(misalnya,"add|Buy groceries,view,complete|2,remove|0,exit"). Daftar tindakan selalu diakhiri dengan"exit".
Nama tugas dapat berisi spasi, jadi baca ketiga baris dengan bufio.Scanner, seperti dalam pelajaran sebelumnya.
Tugasmu adalah:
- Definisikan struct
Taskyang sama dengan fieldName(string) danCompleted(bool) - Gunakan kembali empat fungsi yang sudah kamu tulis, dengan signature yang sama:
addTask(tasks []Task, taskName string) []TaskviewAllTasks(tasks []Task), yang mencetak"[x] [task_name]"untuk tugas yang selesai dan"[ ] [task_name]"untuk tugas yang masih terbukacompleteTask(tasks *[]Task, index int)removeTask(tasks []Task, index int) []Task
- Buat daftar awal dari input kedua, ingat bahwa baris kosong berarti daftar kosong
- Cetak pesan sambutan dan menu, persis seperti pada langkah pertama proyek:
"Welcome to [app_name], [user_name]!""1. Add Task""2. View Tasks""3. Complete Task""4. Remove Task""5. Exit""Current tasks: [count]"
- Jalankan tindakan secara berurutan. Setiap tindakan mencetak header terlebih dahulu:
"add": cetak"--- ADD TASK ---", tambahkan tugas dengan nama yang ditentukan oleh parameter, lalu cetak"Task '[task_name]' added!""view": cetak"--- VIEW TASKS ---", tampilkan setiap tugas denganviewAllTasks, lalu cetak baris ringkasan"complete": cetak"--- COMPLETE TASK ---", tandai tugas pada indeks tersebut sebagai selesai, lalu cetak"Task '[task_name]' marked as completed!""remove": cetak"--- REMOVE TASK ---", hapus tugas pada indeks tersebut, lalu cetak"Task '[task_name]' removed successfully!""exit": cetak"--- EXIT ---", lalu"Final list:", kemudian seluruh daftar, lalu baris ringkasan, dan terakhir"Goodbye, [user_name]!". Tidak ada yang dijalankan setelah exit.
- Indeks dimulai dari 0, seperti dalam pelajaran sebelumnya. Jika indeks
"complete"atau"remove"berada di luar daftar, cetak"Invalid task number"sebagai gantinya dan biarkan daftar tetap tidak berubah. - Baris ringkasan adalah baris yang sudah kamu ketahui:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Gunakan package strings untuk memisahkan baris input dan package strconv untuk mengubah indeks menjadi angka. Langkah terakhir ini menunjukkan bagaimana fungsi-fungsi kecil yang kamu tulis satu per satu dapat membentuk program yang berfungsi.
Coba sendiri
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Hadirkan kembali addTask, viewAllTasks, completeTask, dan removeTask
// dari pelajaran sebelumnya dalam proyek ini
func main() {
// Buat scanner untuk membaca baris input
scanner := bufio.NewScanner(os.Stdin)
// Baca nama aplikasi dan nama pengguna
scanner.Scan()
names := scanner.Text()
// Baca tugas awal dalam list
scanner.Scan()
taskData := scanner.Text()
// Baca tindakan dalam sesi
scanner.Scan()
actionData := scanner.Text()
// TODO: Selesaikan implementasinya
// 1. Pisahkan names berdasarkan "," untuk mendapatkan nama aplikasi dan nama pengguna
// 2. Buat slice tugas awal dari taskData
// 3. Cetak pesan selamat datang, menu, dan jumlah tugas saat ini
// 4. Jalankan setiap tindakan dalam actionData secara berurutan, cetak judulnya terlebih dahulu
}
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online