タスクの追加
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 21/68。
チャレンジ
簡単タスク管理の基礎を基に、システムに新しいタスクを追加するためのコア機能を実装します。このチャレンジでは、既存のスライスに新しいタスクを追加することでタスクリストを拡張する関数の作成に焦点を当てます。
重要な注意点: タスク名にはスペースが含まれる可能性があるため(例: "Buy groceries")、入力行全体を読み取るために bufio.Scanner を使用する必要があります。fmt.Scanln 関数は最初のスペースで読み取りを停止するため、スペースを含むタスク名が途切れてしまいます。bufio.NewScanner(os.Stdin) を使用し、scanner.Scan() に続いて scanner.Text() を呼び出すことで、完全な行を読み取ってください。
2つの入力を受け取ります:
- 既存のタスク数を表す文字列(例:
"2") - カンマで区切られたタスク名を含む文字列(例:
"Buy groceries,Call dentist,Finish project")
あなたのタスクは以下の通りです:
- 前回のチャレンジと同じ
Task構造体を、Name(string) とCompleted(bool) フィールドで定義します Task構造体のスライスとタスク名 (string) をパラメータとして受け取るaddTaskという名前の関数を作成しますaddTask関数は、追加されたタスクを含む新しいスライスを返す必要があります(新しいタスクのCompletedはfalseに設定してください)- スペースを含むタスク名を適切に処理するために、
bufio.Scannerを使用して入力行を読み取ります - 最初の入力で指定された既存のタスク数に基づいて、タスクの初期スライスを作成します:
- 数値が
"0"の場合は、空のスライスから開始します - 数値が
"0"より大きい場合は、"Existing Task 1"、"Existing Task 2"などの名前を持つプレースホルダータスクをその数だけ作成し、すべて未完了としてマークします
- 数値が
- 2番目の入力からカンマ区切りのタスク名を解析します
addTask関数を使用して、各新しいタスクをスライスに追加します- 最終的なスライス内の各タスクを次の形式で出力します:
"Task: [name], Completed: [true/false]" - タスクの総数を次の形式で出力します:
"Total tasks: [count]"
例えば、既存のタスクが1つあり、"Buy groceries,Call dentist" を追加したい場合、出力には最初に既存のタスクが表示され、次に2つの新しいタスクが表示され、最後に合計数が表示される必要があります。このチャレンジでは、append 関数を使用したスライス操作を練習し、データ構造を拡張する機能を構築する方法を学びます。
自分で試してみよう
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: ここにaddTask関数を作成します
func main() {
// 入力行を読み取るためのスキャナーを作成します
scanner := bufio.NewScanner(os.Stdin)
// 既存のタスク数を読み取ります
scanner.Scan()
existingTasksStr := scanner.Text()
// タスク名を読み取ります
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: 実装を完了させてください
// 1. existingTasksStrを整数に変換します
// 2. 既存のタスクを含む初期スライスを作成します
// 3. taskNamesStrを解析し、新しいタスクを追加します
// 4. すべてのタスクと合計数を表示します
}