🎯 مدیریت خطا توی کاتلین فقط
خیلیا فکر میکنن exception handling یعنی یه بلاک try بذارن و توش catch کنن. اما تو کاتلین راههای بهتری هم هست که کد رو خواناتر و امنتر میکنه.
🌀 با Result type میتونی خطا رو مثل یه مقدار برگردونی، نه اینکه throw کنی. اینطوری caller مجبور نیست همیشه منتظر unexpected exception باشه.
✅ مثال واقعی: فرض کن داری یه API call میکنی. نتیجه رو به جای اینکه throw کنی، با Result برمیگردونی تا هر کس هر جور خواست هندل کنه.
🧠 اینجا دیگه caller میتونه با when expression هر دو حالت رو مدیریت کنه بدون نیاز به try-catch توی UI.
📌 نکته: برای خطاهای قابل پیشبینی بهتره از Result یا sealed class استفاده کنی، برای خطاهای غیرمنتظره (مثل NullPointer) باز هم try-catch لازمه.
✨ بهترین تمرین: exception handling رو به لایههای پایین (مثل repository) ببر و توی UI فقط State مربوطه رو نشون بده.
#ExceptionHandling #Kotlin #SealedClass #ResultPattern #AndroidDev #Codeit #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
try-catch نیست!خیلیا فکر میکنن exception handling یعنی یه بلاک try بذارن و توش catch کنن. اما تو کاتلین راههای بهتری هم هست که کد رو خواناتر و امنتر میکنه.
🌀 با Result type میتونی خطا رو مثل یه مقدار برگردونی، نه اینکه throw کنی. اینطوری caller مجبور نیست همیشه منتظر unexpected exception باشه.
✅ مثال واقعی: فرض کن داری یه API call میکنی. نتیجه رو به جای اینکه throw کنی، با Result برمیگردونی تا هر کس هر جور خواست هندل کنه.
sealed class ApiResult<out T> {
data class Success<T>(val data: T) : ApiResult<T>()
data class Error(val message: String, val code: Int) : ApiResult<Nothing>()
}
suspend fun fetchUser(id: String): ApiResult<User> {
return try {
val user = apiService.getUser(id)
ApiResult.Success(user)
} catch (e: Exception) {
ApiResult.Error(e.message ?: "Unknown error", 500)
}
}
🧠 اینجا دیگه caller میتونه با when expression هر دو حالت رو مدیریت کنه بدون نیاز به try-catch توی UI.
📌 نکته: برای خطاهای قابل پیشبینی بهتره از Result یا sealed class استفاده کنی، برای خطاهای غیرمنتظره (مثل NullPointer) باز هم try-catch لازمه.
✨ بهترین تمرین: exception handling رو به لایههای پایین (مثل repository) ببر و توی UI فقط State مربوطه رو نشون بده.
#ExceptionHandling #Kotlin #SealedClass #ResultPattern #AndroidDev #Codeit #Android #Kotlin #Jetpack
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1
🎯 الگوی «Result» در «Kotlin» یکی از تمیزترین روشهای مدیریت خطاست
بدون نیاز به try-catchهای زنجیرهای و گیجکننده 🔁
🔥 چرا «Result Pattern»؟
- موفقیت یا شکست رو بهصورت صریح برمیگردونه
- کد خواناتر و قابل پیشبینیتر میشه
- ترکیبپذیری با «sealed class» و «when» بینظیره
📱 مثال واقعی: گرفتن اطلاعات کاربر از سرور با «Retrofit»
🧠 این کد چه میکند؟
- یک «sealed class» به نام «NetworkResult» تعریف میکند
- در صورت موفقیت شیء «Success» و در صورت خطا شیء «Error» برمیگرداند
- با «when» هر حالت رو جداگانه مدیریت میکنیم؛ هیچ خطایی از قلم نمیافته
💡 نکته عملی:
این الگو با «Coroutines» و «Flow» هم عالی کار میکنه
برای مدیریت خطاهای محلی و سراسری در «ViewModel» میتونی ازش استفاده کنی
📌 خلاصه: «Result Pattern» = کد مقاومتر + اشکالزدایی آسانتر
#Codeit #Android #Kotlin #Jetpack #ResultPattern #CleanArchitecture #SealedClass #ErrorHandling
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
بدون نیاز به try-catchهای زنجیرهای و گیجکننده 🔁
🔥 چرا «Result Pattern»؟
- موفقیت یا شکست رو بهصورت صریح برمیگردونه
- کد خواناتر و قابل پیشبینیتر میشه
- ترکیبپذیری با «sealed class» و «when» بینظیره
📱 مثال واقعی: گرفتن اطلاعات کاربر از سرور با «Retrofit»
sealed class NetworkResult<out T> {
data class Success<T>(val data: T) : NetworkResult<T>()
data class Error(val message: String, val exception: Throwable? = null) : NetworkResult<Nothing>()
}
suspend fun fetchUser(): NetworkResult<User> {
return try {
val user = api.getUser() // فراخوانی شبکه
NetworkResult.Success(user)
} catch (e: Exception) {
NetworkResult.Error("خطا در دریافت داده", e)
}
}
// استفاده
when (val result = fetchUser()) {
is NetworkResult.Success -> showUser(result.data)
is NetworkResult.Error -> showError(result.message)
}
🧠 این کد چه میکند؟
- یک «sealed class» به نام «NetworkResult» تعریف میکند
- در صورت موفقیت شیء «Success» و در صورت خطا شیء «Error» برمیگرداند
- با «when» هر حالت رو جداگانه مدیریت میکنیم؛ هیچ خطایی از قلم نمیافته
💡 نکته عملی:
این الگو با «Coroutines» و «Flow» هم عالی کار میکنه
برای مدیریت خطاهای محلی و سراسری در «ViewModel» میتونی ازش استفاده کنی
📌 خلاصه: «Result Pattern» = کد مقاومتر + اشکالزدایی آسانتر
#Codeit #Android #Kotlin #Jetpack #ResultPattern #CleanArchitecture #SealedClass #ErrorHandling
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤1🔥1