2

متغیرها، val و var؛ دعوای ثبات و شیطنت

اینجا یاد می‌گیری چی ثابت بمونه و چی اجازه داره هی رنگ عوض کنه.

درس 2 از 20

val یعنی سنگین و رنگین

وقتی مقدار قرار نیست عوض بشه از `val` استفاده کن. کاتلین خوشش میاد کدت قابل پیش‌بینی باشه؛ هرچی کمتر بی‌خودی تغییر بدی، باگ کمتر مثل جن از دیوار میاد تو.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

متغیر ثابت
fun main() {
    val language = "Kotlin"
    val year = 2026

    println("داریم $language یاد می‌گیریم؛ نسخه ذهنی: $year")
}
خروجی یا نتیجه اجرا
داریم Kotlin یاد می‌گیریم؛ نسخه ذهنی: 2026
نکته کاربردی: این بخش اسکلت ذهنی درس را می‌سازد. وقتی بدانی این قطعه دقیقاً چه مسئله‌ای را حل می‌کند، بعداً موقع پروژه فقط syntax حفظی تحویل نمی‌دهی؛ تصمیم درست می‌گیری. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

var یعنی قابل تغییر

اگر مقدار واقعاً باید عوض بشه، `var` بگذار. ولی بی‌خودی همه‌چی رو var نکن؛ کد شلخته می‌شه مثل کشوی کابل‌های قدیمی.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

متغیر قابل تغییر
fun main() {
    var score = 10
    score += 5
    println("امتیاز جدید: $score")
}
خروجی یا نتیجه اجرا
امتیاز جدید: 15
نکته کاربردی: اینجا باید به رفتار کد نگاه کنی، نه فقط ظاهرش. مقدارها را عوض کن و دوباره اجرا بگیر تا دستت بفهمد برنامه چطور واکنش نشان می‌دهد. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

نوع داده‌ها

کاتلین معمولاً نوع رو حدس می‌زنه، ولی می‌تونی واضح هم بنویسی. انواع مهم: `String`, `Int`, `Double`, `Boolean`, `Char`. اگر تیمی کار می‌کنی، واضح‌نویسی بعضی جاها نونت رو آجر نمی‌کنه؛ برعکس، نجاتت می‌ده.

مثال را با چند مقدار دیگر هم امتحان کن؛ چون برنامه‌نویسی با نگاه کردن یاد گرفته نمی‌شود، با خراب کردن و درست کردن جا می‌افتد.

Type inference و نوع صریح
val name: String = "Nika"
val age: Int = 22
val price = 149.99
val isActive = true
خروجی یا نتیجه اجرا
این قطعه فقط مقدارها را تعریف می‌کند؛ اگر چاپشان کنی، name=Nika، age=22، price=149.99 و isActive=true می‌بینی.
نکته کاربردی: این الگو در پروژه واقعی زیاد تکرار می‌شود. از همین حالا تمیز و خوانا بنویس تا بعداً موقع دیباگ، خودت به خودت فحش ندهی. اگر خروجی با چیزی که انتظار داشتی فرق کرد، اول مقدار متغیرها و مسیر اجرا را چک کن؛ ۹۰٪ باگ‌های اول راه همین‌جا قایم شده‌اند.

نتیجه این درس 🎯

فرق val و var را اگر همین اول درست بفهمی، نصف شلختگی‌های آینده را نمی‌سازی. قاعده مردونه‌اش: پیش‌فرض val، فقط وقتی واقعاً لازم شد var.

تمرین! 🧠

سه متغیر برای نام محصول، قیمت و موجود بودن تعریف کن و جمله‌ای با string template چاپ کن.

جواب تمرین
fun main() {
    val product = "کیبورد مکانیکال"
    val price = 3200000
    val inStock = true

    println("محصول $product با قیمت $price تومان موجوده؟ $inStock")
}
خروجی جواب
محصول کیبورد مکانیکال با قیمت 3200000 تومان موجوده؟ true