Hepsini Bir Araya Getirme
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 25 / 68.
Görev
KolayGörev listesi uygulamanızı tamamlama zamanı. Bu son adımda önceki derslerdeki her şeyi bir araya getiriyorsunuz: Task yapısı, addTask, viewAllTasks, completeTask ve removeTask; bunların tümü bir menü eylemleri oturumu tarafından yönetiliyor.
Üç girdi alacaksınız:
- Uygulama adı ile kullanıcı adını virgülle ayıran bir dize (ör.
"MyTasks,Alice") - Listenin başlangıçta içerdiği görevleri içeren bir dize; biçimi
"name1:status1,name2:status2"şeklindedir ve status değeri"true"veya"false"olur (ör."Write report:false,Call dentist:true"). Liste başlangıçta boşsa bu satır boştur. - Virgüllerle ayrılmış oturum eylemlerini içeren bir dize. Bir eylem yalnızca kendi adından veya
|ile birleştirilmiş adı ve bir parametresinden oluşur (ör."add|Buy groceries,view,complete|2,remove|0,exit"). Eylem listesi her zaman"exit"ile biter.
Görev adları boşluk içerir; bu nedenle önceki derslerde olduğu gibi üç satırın tamamını bufio.Scanner ile okuyun.
Göreviniz:
Name(string) veCompleted(bool) alanlarına sahip aynıTaskyapısını tanımlamak- Daha önce yazdığınız dört işlevi aynı imzalarla geri getirmek:
addTask(tasks []Task, taskName string) []Task- Tamamlanmış bir görev için
"[x] [task_name]", hâlâ açık olan bir görev için"[ ] [task_name]"yazdıranviewAllTasks(tasks []Task) completeTask(tasks *[]Task, index int)removeTask(tasks []Task, index int) []Task
- Boş bir satırın boş bir liste anlamına geldiğini unutmadan başlangıç listesini ikinci girdiden oluşturmak
- Karşılama mesajını ve menüyü projenin ilk adımındakiyle tamamen aynı şekilde yazdırmak:
"Welcome to [app_name], [user_name]!""1. Add Task""2. View Tasks""3. Complete Task""4. Remove Task""5. Exit""Current tasks: [count]"
- Eylemleri sırayla çalıştırmak. Her eylem önce kendi başlığını yazdırır:
"add":"--- ADD TASK ---"yazdırın, parametrede belirtilen görevi ekleyin, ardından"Task '[task_name]' added!"yazdırın"view":"--- VIEW TASKS ---"yazdırın,viewAllTasksile her görevi listeleyin, ardından özet satırını yazdırın"complete":"--- COMPLETE TASK ---"yazdırın, ilgili dizindeki görevi tamamlandı olarak işaretleyin, ardından"Task '[task_name]' marked as completed!"yazdırın"remove":"--- REMOVE TASK ---"yazdırın, ilgili dizindeki görevi kaldırın, ardından"Task '[task_name]' removed successfully!"yazdırın"exit":"--- EXIT ---"yazdırın, ardından"Final list:", sonra listenin tamamını, ardından özet satırını ve son olarak"Goodbye, [user_name]!"yazdırın. exit işleminden sonra hiçbir şey çalışmaz.
- Dizinler, önceki derslerde olduğu gibi 0 tabanlıdır. Bir
"complete"veya"remove"dizini listenin dışındaysa bunun yerine"Invalid task number"yazdırın ve listeyi değiştirmeyin. - Özet satırı zaten bildiğiniz satırdır:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Girdi satırlarını bölmek için strings paketini, bir dizini sayıya dönüştürmek için strconv paketini kullanın. Bu son adım, teker teker yazdığınız küçük işlevlerin bir araya gelerek çalışan bir programı nasıl oluşturduğunu gösterir.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Bring back addTask, viewAllTasks, completeTask and removeTask
// bu projenin önceki derslerinden
func main() {
// Giriş satırlarını okumak için tarayıcı oluştur
scanner := bufio.NewScanner(os.Stdin)
// Uygulama adını ve kullanıcı adını oku
scanner.Scan()
names := scanner.Text()
// Listenin başlangıç görevlerini oku
scanner.Scan()
taskData := scanner.Text()
// Oturumun eylemlerini oku
scanner.Scan()
actionData := scanner.Text()
// TODO: Uygulamayı tamamla
// 1. Uygulama adını ve kullanıcı adını almak için names'i "," üzerinde böl
// 2. taskData'dan başlangıç görev dilimini oluştur
// 3. Hoş geldin mesajını, menüyü ve mevcut görev sayısını yazdır
// 4. actionData'daki her eylemi sırayla çalıştır, önce başlığını yazdırarak
}
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve DavranışlarKendi başına pratik yap: Online Go derleyicisi