すべてを組み合わせる
CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 50/73。
チャレンジ
中級エディタにはすでに完全なツールキットが含まれています: Task 型、tasks 配列 (3つの初期タスク)、addTask、completeTask、filterTasks、そして printSummary。
io.read() で行を読み続け、以下のコマンドを処理するコマンドループを記述してください:
add— もう 1 行をタイトルとして読み込み、addTaskを呼び出し、次のように正確に出力します:Added task {id}: {title}(返されたタスクのフィールドを使用)done— もう 1 行読み込み、tonumber(...) or 0で変換してcompleteTaskを呼び出します。返り値がtrueの場合はTask {id} completedを出力し、それ以外の場合はNo task with id {id}を出力しますlist— すべてのタスクについて、完了している場合は[x] {title}を出力し、それ以外の場合は[ ] {title}を出力します (スペースに注意)pending—filterTasksを使用して、未完了のすべてのタスクのタイトルを出力しますsummary—printSummary(tasks)を呼び出しますquit— ループを停止します (io.read()がnilを返した場合も停止します)
自分で試してみよう
-- マネージャー内のすべてのタスクが従わなければならない形状
type Task = {
id: number,
title: string,
done: boolean,
}
-- タスクリスト: Task形状の型付き配列
local tasks: {Task} = {
{id = 1, title = "Learn Luau types", done = false},
{id = 2, title = "Build a task manager", done = false},
{id = 3, title = "Write tests", done = true},
}
-- 次の空きidで型付きタスクを作成して挿入する
local function addTask(list: {Task}, title: string): Task
local newTask: Task = {
id = #list + 1,
title = title,
done = false,
}
table.insert(list, newTask)
return newTask
end
-- 指定されたidのタスクを完了としてマークし、成功を報告する
local function completeTask(list: {Task}, id: number): boolean
for _, t in ipairs(list) do
if t.id == id then
t.done = true
return true
end
end
return false
end
-- doneフラグが一致するタスクを新しい{Task}に収集する
local function filterTasks(list: {Task}, done: boolean): {Task}
local result: {Task} = {}
for _, t in ipairs(list) do
if t.done == done then
table.insert(result, t)
end
end
return result
end
-- 1行の進捗サマリーを表示する
local function printSummary(list: {Task}): ()
local total = #list
local doneCount = 0
for _, t in ipairs(list) do
if t.done then
doneCount = doneCount + 1
end
end
print(`{doneCount}/{total} tasks done`)
end
-- ここにコードを書く
-- コマンドループ: io.read()で行を読み取り、"quit"(またはnil)まで。
-- 処理: add(titleを読み取り -> `Added task {id}: {title}`)、
-- done (read id -> `Task {id} completed` / `No task with id {id}`),
-- list(`[x] {title}` / `[ ] {title}`)、
-- pending(filterTasks経由の未完了タスクのタイトル)、
-- summary(printSummary)
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数