Codeit Mobile
94 subscribers
3 photos
1 video
243 links
📱 آموزش برنامه‌نویسی موبایل

Kotlin • Android

🚀 آموزش ساده، کاربردی و پروژه‌محور
💡 مخصوص توسعه‌دهندگان موبایل
Download Telegram
📌 قراردادها یا «Contracts» در «Kotlin»
یکی از ویژگی‌های پیشرفته «Kotlin» که کامپایلر رو از اهداف کد شما مطلع می‌کنه.

🧠 مشکل: گاهی تابعی را می‌نویسید که یک مقدار رو بررسی و در صورت معتبر نبودن، «throw» می‌کنه.
کامپایلر نمی‌دونه بعد از اون تابع، متغیر حتماً مقدار معتبر داره، پس «smart cast» کار نمی‌کنه.

راه‌حل: «Contract» به کامپایلر می‌گه: «اگر تابع به‌صورت عادی برگردد، شرایط خاصی برقرار است.»

💻 مثال واقعی: تابعی که یک رشته رو به عنوان «ID» از کاربر می‌گیره و اگر «null» یا خالی باشه، خطا می‌ده.

import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract

@OptIn(ExperimentalContracts::class)
fun requireValidId(id: String?): String {
contract {
returns() implies (id != null)
}
requireNotNull(id) { "ID must not be null" }
require(id.isNotBlank()) { "ID must not be blank" }
return id
}

fun main() {
val userInput: String? = getUserInput()
val validId = requireValidId(userInput)
// بدون Contract اینجا نمی‌توان از `validId` به‌عنوان غیرنال استفاده کرد
println("Valid ID length: ${validId.length}")
}


🔍 توضیح:
در خط contract { returns() implies (id != null) } به کامپایلر می‌گوییم اگر تابع بدون خطا برگردد، آنگاه id حتماً نال نیست.
نتیجه: بعد از فراخوانی، validId به‌طور خودکار «smart cast» شده و نیازی به بررسی مجدد نیست.

🎯 نکته کاربردی:
از «Contract» فقط برای توابعی استفاده کنید که منطق شرطی شفاف دارند.
⚠️ «Contracts» هنوز آزمایشی هستند (با @OptIn فعال می‌شوند).

🌟 خلاصه:
«Contracts» به کامپایلر اعتماد کافی می‌دهد تا «smart cast» و تحلیل کد را بهبود بخشد.

#Codeit #Android #Kotlin #Jetpack #Contracts #SmartCast #CompilerOptimization #AdvancedKotlin
🌐 Codeit → https://code-it.ir

━━━━━━━━━━━━━━━
@CodeitMobile
1🔥1