پروژه عملی: Todo CLI کوچیک اما با شخصیت
تا پروژه نزنی، دانشت مثل کفش نوئه؛ قشنگه ولی هنوز راه نرفته.
مدل داده
اول مدل میسازیم. هر Todo یک شناسه، عنوان و وضعیت انجامشدن دارد. ساده، مشخص، بیادا.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
data class Todo(
val id: Int,
val title: String,
var done: Boolean = false
)
خروجی مستقیم ندارد؛ این مدل داده پایهی Todoهاست.
مدیریت لیست
برای نمونه آموزشی از `MutableList` استفاده میکنیم. در پروژه واقعی ممکنه دیتابیس، فایل یا API داشته باشی؛ ولی اول مغز منطق رو بفهم.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
class TodoManager {
private val todos = mutableListOf<Todo>()
private var nextId = 1
fun add(title: String) {
todos.add(Todo(nextId++, title))
}
fun complete(id: Int) {
todos.find { it.id == id }?.done = true
}
fun list(): List<Todo> = todos
}
خروجی مستقیم ندارد؛ TodoManager عملیات add، complete و list را آماده میکند.
اجرای ساده
حالا چند کار اضافه میکنیم و خروجی میگیریم. این پروژه کوچیکه ولی مفاهیم مهمی مثل data class، mutable list، تابع و encapsulation رو واقعی تمرین میکنی.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
fun main() {
val manager = TodoManager()
manager.add("یادگیری Kotlin")
manager.add("زدن پروژه واقعی")
manager.complete(1)
manager.list().forEach { println(it) }
}
Todo(id=1, title=یادگیری Kotlin, done=true) Todo(id=2, title=زدن پروژه واقعی, done=false)
چطور حرفهایترش کنیم؟
ورودی کاربر اضافه کن، ذخیره در فایل بگذار، دستور delete بساز، تست بنویس و بعد نسخه API با Ktor بده. کمکم همین پروژه ریز میتونه رزومهای بشه؛ فقط تنبلبازی درنیار.
مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامهنویسی با نگاه کردن یاد گرفته نمیشود، با خراب کردن و درست کردن جا میافتد.
نتیجه این درس 🎯
پروژه Todo کوچک است، ولی همه چیز را به هم وصل میکند: مدل، مدیریت لیست، تغییر وضعیت و نمایش خروجی. همین مدل را میتوانی کمکم فایلدار، دیتابیسی یا APIدار کنی.
تمرین! 🧠
تابع delete(id) را به TodoManager اضافه کن.
class TodoManager {
private val todos = mutableListOf<Todo>()
private var nextId = 1
fun add(title: String) {
todos.add(Todo(nextId++, title))
}
fun delete(id: Int): Boolean {
return todos.removeIf { it.id == id }
}
fun list(): List<Todo> = todos
}
خروجی مستقیم ندارد؛ این جواب قابلیت delete را به TodoManager اضافه میکند.