하나로 합치기
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 50번째.
챌린지
중급에디터에는 이미 완전한 툴킷이 포함되어 있습니다: Task type, tasks array (초기 작업 3개), addTask, completeTask, filterTasks, printSummary.
io.read()로 한 line씩 지속적으로 읽어 들여 다음 command들을 처리하는 Command loop를 Write하세요:
add— 한line을 더 읽어title로 사용하고,addTask를 호출한 뒤 정확히 다음과 같이Print합니다:Added task {id}: {title}(반환된task의 필드 사용)done— 한line을 더 읽어tonumber(...) or 0으로 변환한 뒤completeTask를 호출합니다. 반환값이true이면Task {id} completed를, 그렇지 않으면No task with id {id}를print합니다.list—everytask에 대해done상태이면[x] {title}을, 그렇지 않으면[ ] {title}을print합니다(공백 주의).pending—filterTasks를 사용하여 완료되지 않은everytask의title을print합니다.summary—printSummary(tasks)를 호출합니다.quit—loop를 중지합니다 (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
-- 한 줄짜리 진행 요약을 출력한다
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 (제목 읽기 -> `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
프로젝트: 태스크 형태 정의하기태스크 추가 함수