📌 قراردادها یا «Contracts» در «Kotlin»
✨ یکی از ویژگیهای پیشرفته «Kotlin» که کامپایلر رو از اهداف کد شما مطلع میکنه.
🧠 مشکل: گاهی تابعی را مینویسید که یک مقدار رو بررسی و در صورت معتبر نبودن، «throw» میکنه.
❌ کامپایلر نمیدونه بعد از اون تابع، متغیر حتماً مقدار معتبر داره، پس «smart cast» کار نمیکنه.
✅ راهحل: «Contract» به کامپایلر میگه: «اگر تابع بهصورت عادی برگردد، شرایط خاصی برقرار است.»
💻 مثال واقعی: تابعی که یک رشته رو به عنوان «ID» از کاربر میگیره و اگر «null» یا خالی باشه، خطا میده.
🔍 توضیح:
در خط
✅ نتیجه: بعد از فراخوانی،
🎯 نکته کاربردی:
از «Contract» فقط برای توابعی استفاده کنید که منطق شرطی شفاف دارند.
⚠️ «Contracts» هنوز آزمایشی هستند (با
🌟 خلاصه:
«Contracts» به کامپایلر اعتماد کافی میدهد تا «smart cast» و تحلیل کد را بهبود بخشد.
#Codeit #Android #Kotlin #Jetpack #Contracts #SmartCast #CompilerOptimization #AdvancedKotlin
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
✨ یکی از ویژگیهای پیشرفته «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