Hepsini Bir Araya Getirme
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası — ders 50 / 73.
Görev
OrtaDüzenleyiciniz zaten eksiksiz araç kitini içermektedir: Task türü, tasks dizisi (üç başlangıç görevi), addTask, completeTask, filterTasks ve printSummary.
io.read() ile sürekli bir satır okuyan ve şu komutları işleyen bir komut döngüsü yazın:
add— başlık olarak bir satır daha okuyun,addTaskişlevini çağırın ve aynen şunu yazdırın:Added task {id}: {title}(döndürülen görevin alanlarını kullanarak)done— bir satır daha okuyun, bunutonumber(...) or 0ile dönüştürün,completeTaskişlevini çağırın; eğertruedöndürdüyseTask {id} completed, aksi takdirdeNo task with id {id}yazdırınlist— her görev için, eğer tamamlandıysa[x] {title}, aksi takdirde[ ] {title}yazdırın (boşluğa dikkat edin)pending—filterTaskskullanarak tamamlanmamış her görevin başlığını yazdırınsummary—printSummary(tasks)işlevini çağırınquit— döngüyü durdurun (ayrıcaio.read()nildöndürürse de durdurun)
Kendin dene
-- Yöneticideki her görevin uyması gereken şekil
type Task = {
id: number,
title: string,
done: boolean,
}
-- Görev listesi: Task şekillerinden oluşan tipli bir dizi
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},
}
-- Sonraki boş id ile tipli bir görev oluştur ve ekle
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
-- Verilen id'ye sahip görevi tamamlandı olarak işaretle; başarıyı bildir
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 bayrağı eşleşen görevleri yeni bir {Task} içine topla
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
-- Tek satırlık bir ilerleme özeti yazdır
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
-- Kodu buraya yaz
-- Komut döngüsü: io.read() ile satırları "quit" (veya nil) olana kadar oku.
-- İşle: add (başlığı oku -> `Added task {id}: {title}`),
-- done (read id -> `Task {id} completed` / `No task with id {id}`),
-- list (`[x] {title}` / `[ ] {title}`),
-- pending (filterTasks ile bitmemiş görevlerin başlıkları),
-- summary (printSummary)
Luau'ya Giriş bölümündeki tüm dersler
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışmak
Parametreleri ve Geri Dönüş Değerlerini TiplendirmeAnonim Fonksiyonları TiplendirmeHiçbir Şey Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriDeğişken Sayıda Parametre Alan Fonksiyonlar (Variadic)Fonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar7Proje: Tiplenmiş Görev Yöneticisi
Proje: Görev YapısıGörev Ekleme Fonksiyonu2Temel Tipler
Temel Tipler: num, str, bool'any' Tipi: Kaçış Yolu'unknown' TipiNil ve İsteğe Bağlı (Optional) TiplerUygulamada Tip ÇıkarımıAçık Tip BelirteçleriÖzet: Temel Tipler Pratiği5Diğer Adlar (Aliases), Birleşimler, Kesişimler
İlkel Tipler için Tip Diğer Adları (Type Aliases)Birleşim Tipleri (Union Types)Birleşim Tipleri ile ÇalışmakLiteral (Sabit) TiplerKesişim Tipleri (Intersection Types)Tip Diğer Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları3Tipli Tablolar: Diziler ve Map'ler
Tipli DizilerEleman Ekleme ve OkumaMap Tipi Nedir?Map Bildirimi ve Map'lere ErişimTablolar Üzerinde YinelemeKarma Biçimli TablolarÇok Boyutlu Tipli Dizilertable.unpack ve VarargsÖzet: Diziler ve Map'ler