Function: Print Task Summary
Part of the Introduction To Luau section of Coddy's Lua journey. Lesson 49 of 73.
Challenge
EasyYour editor already contains the Task type, the tasks array, addTask, completeTask and filterTasks from the previous lessons.
Create a function named printSummary that takes one parameter, list of type {Task}, returns nothing (return type ()), and prints one line in the exact format:
{doneCount}/{total} tasks donewhere total is #list and doneCount is how many tasks have done == true (count with a loop).
Then exercise the whole toolkit, in this order:
- call
printSummary(tasks) - call
completeTask(tasks, 2) - call
printSummary(tasks) - call
addTask(tasks, "Take a break") - call
printSummary(tasks)
Try it yourself
-- The shape every task in the manager must follow
type Task = {
id: number,
title: string,
done: boolean,
}
-- The task list: a typed array of Task shapes
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},
}
-- Build a typed task with the next free id and insert it
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
-- Mark the task with the given id as done; report success
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
-- Collect the tasks whose done flag matches into a new {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
-- Split the list into pending and finished views
local pending: {Task} = filterTasks(tasks, false)
local finished: {Task} = filterTasks(tasks, true)
print(#pending)
for _, t in ipairs(pending) do
print(t.title)
end
print(#finished)
for _, t in ipairs(finished) do
print(t.title)
end
All lessons in Introduction To Luau
1Getting Started with Luau
What Is Luau?Why Use Luau?Your First Luau CodeType Checking & Error ModesRecap: Introduction to Luau4Working with Functions
Typing Params & Return ValuesTyping Anonymous FunctionsFunctions Returning NothingOptional ParametersDefault Parameter ValuesVariadic FunctionsDefining Function TypesRecap: Typed Functions7Project: Typed Task Manager
Project: The Task ShapeFunction to Add a Task2Core Types
Basic Types: num, str, boolThe 'any' Type: Escape HatchThe 'unknown' TypeNil & Optional TypesType Inference in ActionExplicit Type AnnotationsRecap: Core Types Practice5Aliases, Unions, Intersections
Type Aliases for PrimitivesUnion TypesWorking with Union TypesLiteral TypesIntersection TypesCombining Type AliasesRecap: Advanced Type Combos3Typed Tables: Arrays & Maps
Typed ArraysAdding and Reading ElementsWhat is a Map Type?Declaring and Accessing MapsIterating TablesMixed-Shape TablesMulti-dimensional Typed Arraystable.unpack and VarargsRecap: Arrays and MapsPractice on your own: Online Lua compiler