Menu
Coddy logo textTech

タスク一覧の表示

CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 22/68。

challenge icon

チャレンジ

簡単

タスク管理システムの構築を続け、今回はすべてのタスクをユーザーフレンドリーな形式で表示する機能を実装します。このチャレンジでは、タスクのコレクションを反復処理し、明確な視覚的インジケーターを使用して各タスクの完了ステータスを提示することに焦点を当てます。

2つの入力を受け取ります:

  • タスクの数を表す文字列(例:"4"
  • 次の形式のタスクデータを含む文字列:"name1:status1,name2:status2,name3:status3"。ここで、statusは "true" または "false" のいずれかです(例:"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true"

あなたのタスクは以下の通りです:

  1. 以前のチャレンジと同じ Task 構造体を、Name (string) フィールドと Completed (bool) フィールドで定義します。
  2. Task 構造体のスライスをパラメータとして受け取る viewAllTasks という名前の関数を作成します。
  3. viewAllTasks 関数内で、スライスを反復処理し、各タスクを次の形式で出力します:
    • 完了したタスクの場合:"[x] [task_name]"
    • 未完了のタスクの場合:"[ ] [task_name]"
  4. 2番目の入力からタスクデータを解析して、タスクのスライスを作成します:
    • 入力をカンマで分割して、個々のタスクエントリを取得します。
    • 各エントリについて、コロンで分割して名前とステータスを分離します。
    • ステータス文字列をブール値に変換します("true"true に、"false"false になります)。
  5. 作成したスライスを使用して viewAllTasks 関数を呼び出します。
  6. すべてのタスクを表示した後、次の形式でサマリーを出力します:"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
}

論理とフローのすべてのレッスン