Type Inference (Type Inference)
Type Inference: تشخیص خودکار نوع 🔍
یکی از بهترین ویژگیهای Kotlin اینه که کامپایلر خودش نوع متغیرها رو تشخیص میده! این کار کد رو کوتاهتر و خواناتر میکنه.
چطور کار میکنه؟
کامپایلر Kotlin از مقدار سمت راست برای تشخیص نوع استفاده میکنه:
// Type inference
val name = "Ali" // String (از "Ali" تشخیص داده شد)
val age = 25 // Int (از 25 تشخیص داده شد)
val price = 29.99 // Double (از 29.99 تشخیص داده شد)
val isActive = true // Boolean (از true تشخیص داده شد)
// Explicit type (وقتی نیاز دارید)
val count: Int = 10
val email: String = "ali@example.com"
کی type annotation بذاریم؟ وقتی type واضح نیست یا میخواید type خاصی رو enforce کنید، type annotation بذارید. در بقیه موارد، type inference کافیه!
Type Inference در Functions:
// Return type inferred
fun add(a: Int, b: Int) = a + b // Int inferred
fun getMessage() = "Hello" // String inferred
// یا explicit
fun multiply(a: Int, b: Int): Int {
return a * b
}
مثال: Type Inference در عمل
// کامپایلر میفهمه که numbers یک List<Int> است
val numbers = listOf(1, 2, 3)
// کامپایلر میفهمه که doubled یک List<Int> است
val doubled = numbers.map { it * 2 }
// کامپایلر میفهمه که result یک Int است
val result = doubled.sum()
// همه بدون type annotation!
println(result) // 12
محدودیتها: Type inference فقط برای local variables کار میکنه. برای properties کلاس یا function parameters باید type رو مشخص کنید (مگر اینکه از default value استفاده کنید).
مزایای Type Inference:
- کد کوتاهتر و خواناتر
- کمتر تایپ کردن
- کمتر خطا (type mismatch در compile time پیدا میشه)
- Refactoring راحتتر
Type Safety: Type inference type safety رو از بین نمیبره! کامپایلر همچنان type checking میکنه و خطاها رو پیدا میکنه.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
تمرین: Type Inference
Easy
سوال تمرین
🎯 تمرین: استفاده از Type Inference
متغیرهایی بدون type annotation تعریف کنید.
پاسخ تمرین
KOTLIN
// Type inference
val name = "Ali" // String
val age = 25 // Int
val price = 29.99 // Double
// Explicit type
val count: Int = 10
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.