タスク一覧の表示
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 22/68。
チャレンジ
簡単タスク管理システムの構築を続け、今回はすべてのタスクをユーザーフレンドリーな形式で表示する機能を実装します。このチャレンジでは、タスクのコレクションを反復処理し、明確な視覚的インジケーターを使用して各タスクの完了ステータスを提示することに焦点を当てます。
2つの入力を受け取ります:
- タスクの数を表す文字列(例:
"4") - 次の形式のタスクデータを含む文字列:
"name1:status1,name2:status2,name3:status3"。ここで、statusは"true"または"false"のいずれかです(例:"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
あなたのタスクは以下の通りです:
- 以前のチャレンジと同じ
Task構造体を、Name(string) フィールドとCompleted(bool) フィールドで定義します。 Task構造体のスライスをパラメータとして受け取るviewAllTasksという名前の関数を作成します。viewAllTasks関数内で、スライスを反復処理し、各タスクを次の形式で出力します:- 完了したタスクの場合:
"[x] [task_name]" - 未完了のタスクの場合:
"[ ] [task_name]"
- 完了したタスクの場合:
- 2番目の入力からタスクデータを解析して、タスクのスライスを作成します:
- 入力をカンマで分割して、個々のタスクエントリを取得します。
- 各エントリについて、コロンで分割して名前とステータスを分離します。
- ステータス文字列をブール値に変換します(
"true"はtrueに、"false"はfalseになります)。
- 作成したスライスを使用して
viewAllTasks関数を呼び出します。 - すべてのタスクを表示した後、次の形式でサマリーを出力します:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
例えば、タスクが "Buy groceries:false,Call dentist:true,Finish project:false" の場合、出力には適切なチェックボックスとともに各タスクが表示され、その後に合計数と完了統計を含むサマリーが表示される必要があります。このチャレンジでは、スライスの反復処理、if 文による条件付きフォーマットを練習し、ユーザーにタスクの進捗状況を明確に提示する方法を学びます。
自分で試してみよう
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func viewAllTasks(tasks []Task) {
// TODO: すべてのタスクを表示する機能を実装する
// 完了したタスクの場合: "[x] [task_name]"
// 未完了のタスクの場合: "[ ] [task_name]"
}
func main() {
var numTasksStr string
fmt.Scanln(&numTasksStr)
numTasks, _ := strconv.Atoi(numTasksStr)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
taskData := scanner.Text()
var tasks []Task
// TODO: taskData 文字列からタスクデータを解析する
// カンマで分割して個々のタスクエントリを取得する
taskEntries := strings.Split(taskData, ",")
_ = taskEntries
// 各エントリについて、コロンで分割して名前とステータスを分ける
// ステータス文字列をブール値に変換し、Task 構造体を作成する
// TODO: 作成したスライスを使用して viewAllTasks 関数を呼び出す
// TODO: サマリーを計算して出力する
// フォーマット: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
_ = tasks
_ = numTasks
}