دوره‌ها / Kotlin / Type Inference (Type Inference)

Type Inference (Type Inference)

15 دقیقه Article

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

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.