Mobil inkişafda xəta idarəetməsi: bu nədir, hansı texnikalar və necə təşkil etməli

Müəllif: IT Sectr Dərc olunub: 2026-05-23 Oxuma vaxtı: 11 dəq

Xəta idarəetməsi mobil tərtibatçı üçün əsas bacarıqdır. HackerOne (2025)-a görə, məlumat sızmalarının 62%-i idarə olunmayan istisnalar səbəbindən baş verir. Düzgün xəta idarəetməsi nəinki çökmələrin qarşısını alır, həm də istifadəçi məlumatlarını qoruyur. Gəlin iOS, Android və React Native üçün yanaşmaları nəzərdən keçirək.

Əsas məqamlar

  • iOS xəta idarəetməsi üçün do-catch, throw, guard let və if-let istifadə edir. Swift dil səviyyəsində idarə olunmayan istisnalara icazə vermir.
  • Android/Kotlin try-catch, elvis operatoru, sealed class və Result tipi təklif edir. Sealed class xəta vəziyyətlərini modelləşdirmək üçün güclü bir vasitədir.
  • Kotlin Result və funksional kitabxanalardan Either, xətaları kompilyasiya vaxtında idarə etməyə məcbur edərək kodu daha etibarlı edir.
  • Crash Reporting (Crashlytics, Sentry) istehsal üçün məcburi bir vasitədir. Onsuz, səhvləri yalnız istifadəçilərdən öyrənirsiniz.
  • React Native-də Error Boundary JavaScript səhvləri səbəbindən tətbiqin tam çökməsinin qarşısını alır. Onu kök komponentlər üçün istifadə edin.

iOS-da Xəta İdarəetməsi: Do-Catch, Throw, Guard Let

Xəta idarəetməsi Swift-də dörd əsas mexanizmə əsaslanır: do-catch, throws, guard let və if-let. Bir çox dillərdən fərqli olaraq, Swift tutulmayan istisnalara icazə vermir — hər bir xəta açıq şəkildə idarə edilməli və ya throws vasitəsilə bəyan edilməlidir. Xəta idarəetməsi mobil inkişaf üçün kritik bir bacarıqdır və birbaşa tətbiqin sabitliyinə təsir göstərir.

Do-Catch və Throw

do-catch throws ilə işarələnmiş funksiyaları çağırmaq üçün standart blokdur. do daxilində, try ilə bir funksiya çağırılır və o xəta atarsa, nəzarət catch-ə keçir. Müxtəlif xəta növləri pattern matching vasitəsilə idarə edilə bilər. Xəta idarə edilməzsə, o, yığında yuxarıya yayılır (Error Propagation). iOS-da effektiv xəta idarəetməsi üçün do-catch-i əsas mexanizm kimi istifadə edin.

Throw funksiya imzasında bəyan edilir: func fetchData() throws -> Data. Bu o deməkdir ki, çağıran kod xətanı try, try? və ya try! vasitəsilə idarə etməlidir. try? xətanı nil-ə çevirir, try! xəta zamanı çökməyə səbəb olur (yalnız uğura əmin olduqda istifadə edin). throw vasitəsilə xəta idarəetməsi Swift-də məcburi təcrübədir.

Optional/Nullable və Guard Let

Guard let dəyər nil olduqda funksiyadan erkən çıxmaq üçün bir konstruksiyadır. if-let-dən fərqli olaraq, guard let else şaxəsində çıxış (return, throw, break) tələb edir. Bu, kodu daha düz və oxunaqlı edir — iç-içə if blokları olmadan. Optional nil ola bilmirsə — force unwrap (!) istifadə edin, yalnız tam əmin olduqda. Mobil tətbiqdə guard let isteğe bağlı dəyərləri idarə edərkən çökmələrin qarşısını almağa kömək edir.

Optional Chaining (user?.address?.city) və nil-coalescing (??) açmadan optional ilə işləmək üçün sintaktik şəkərdir. IT Sectr-də biz API giriş parametrlərini yoxlamaq üçün guard let istifadə edirik və komandaya açıq şərh olmadan force unwrap-dan qaçmağı tələb edirik. Hər səviyyədə xəta idarəedicisi gözlənilməz nasazlıqlardan qoruyur.

Android-də Xəta İdarəetməsi: Try-Catch, Elvis, Sealed Class

Kotlin Android inkişafı üçün əsas dildir. O, Java-dan try-catch-i miras alır, lakin daha təhlükəsiz alternativlər əlavə edir: elvis operatoru, require, check və sealed class. Kotlin-də xəta idarəetməsi bu mexanizmlərin birləşməsinə əsaslanır. Swift-dən fərqli olaraq, Kotlin yoxlanılmış istisnaları idarə etməyi tələb etmir (bütün istisnalar yoxlanılmamışdır). Android-də mobil tətbiqlərdə xəta idarəetməsi üçün sealed class-ı əsas nümunə kimi istifadə edin.

Try-Catch və Elvis Operatoru

Try-catch Kotlin-də ifadə kimi işləyir — dəyər qaytarır. val result = try { fetchData() } catch (e: Exception) { fallbackValue }. Bu kodu qısaldır. Elvis operatoru (?:) nullable tiplər üçün nil-coalescing-in analoqudur: val name = user?.name ?: "Guest". Mobil tətbiqlərdə xəta idarəetməsi üçün ifadə kimi try-catch ən qısa yanaşmadır.

Sealed class uğur və xəta vəziyyətlərini modelləşdirmək üçün güclü bir vasitədir. sealed class NetworkResult { data class Success(val data: T) : NetworkResult(); data class Error(val message: String) : NetworkResult() }. when ifadəsində istifadə edildikdə, kompilyator şaxələrin tamlığını yoxlayır. sealed class vasitəsilə xəta idarəetməsi heç bir vəziyyətin idarə olunmamış qalmamasını təmin edir.

kotlin
// Sealed class + try-catch — Android üçün tipik nümunə
sealed class NetworkResult<out T> {
    data class Success<out T>(val data: T) : NetworkResult<T>()
    data class Error(val message: String) : NetworkResult<Nothing>()
}

fun fetchUser(id: String): NetworkResult<User> {
    return try {
        NetworkResult.Success(api.getUser(id))
    } catch (e: Exception) {
        NetworkResult.Error("Failed: ${e.message}")
    }
}

Nümunədə, sealed class NetworkResult iki vəziyyəti modelləşdirir: məlumatla uğur və mesajla xəta. fetchUser funksiyası hər halda nəticə qaytarır və çağıran kod when vasitəsilə hər iki şaxəni idarə edir. Bu, idarə olunmamış xəta ehtimalını aradan qaldırır. sealed class vasitəsilə xəta idarəetməsi IT Sectr-də Android inkişafı üçün standartdır.

Kotlin-də Xəta İdarəetməsi: Result və Either

Result uğursuz ola biləcək bir əməliyyatın nəticəsini təmsil etmək üçün daxili Kotlin tipidir. O, fold, getOrThrow və ya map vasitəsilə uğur və uğursuzluğun idarə edilməsini məcbur edir. Result asinxron zəncirlərdə (coroutines) faydalıdır. Result ilə xəta idarəetməsi Kotlin-də mobil inkişaf üçün standartdır.

Result vs Either

Either Arrow kitabxanasından funksional bir tipdir və iki tipdən birinin dəyərini qaytarmağa imkan verir (Left — xəta, Right — uğur). Result-dan fərqli olaraq, Either istənilən istifadəçi tərəfindən təyin edilmiş xəta tipini ehtiva edə bilər. Sadə layihələr üçün daxili Result kifayətdir; mürəkkəb layihələr üçün Arrow-dan Either istifadə edin. Xəta idarəetmə alətinin seçimi layihənin mürəkkəbliyindən asılıdır.

Xəta Yayılması

Xəta yayılması xətanın idarə olunana qədər çağırış yığınında yuxarıya yayıldığı bir mexanizmdir. Kotlin-də bu, standart olaraq baş verir (yoxlanılmamış istisnalar). Swift-də bu, yalnız throws ilə işarələnmiş funksiyalara aiddir. Result və Either ilə xətalar yayılmır — onlar tipdə qalır və siz onları idarə etməlisiniz. Bu, mobil tətbiqlərdə xəta idarəetməsini daha təhlükəsiz edir.

Parametr iOS (Swift) Android (Kotlin)
Əsas mexanizmdo-catch + throwstry-catch (expression)
Optional/Nullableguard let, if-let, ???. let, elvis (?:)
Funksional yanaşmaResult (Swift 5+)Result, Either (Arrow)
Xəta modelləşdirməEnum: ErrorSealed class
Yoxlanılmış istisnalarBəli (throws)Xeyr (hamısı yoxlanılmamış)
Qeyri-ölümcülos_log, CrashlyticsTimber, Crashlytics

Cədvəl əsas fərqləri göstərir. iOS açıq xəta bəyannaməsi (throws) tələb edir, bu da kodu daha təhlükəsiz, lakin daha ətraflı edir. Android tərtibatçı intizamına əsaslanır. IT Sectr-də biz Android üçün sealed class və iOS üçün throws istifadə edirik — bu, mobil tətbiqlərdə xəta idarəetməsi üçün hər iki platformanın ən yaxşı təcrübəsidir.

Çökmə Hesabatı: Crashlytics və Sentry

Çökmə hesabatı tətbiq çökmələrini toplamaq və təhlil etmək sistemidir. Çökmə hesabatı istehsalda xəta idarəetməsinin vacib hissəsidir. Onsuz, problemləri istifadəçilərdən öyrənirsiniz, bu isə istehsal üçün qəbuledilməzdir. İki əsas alət: Firebase Crashlytics (pulsuz) və Sentry (əsas istifadə üçün pulsuz). Mobil tətbiqlərdə xəta idarəetməsi üçün ilk buraxılışdan etibarən çökmə hesabatını tətbiq edin.

Firebase Crashlytics

Crashlytics Firebase-in bir hissəsidir. O, avtomatik olaraq çökmələri toplayır, çağırış yığınına görə qruplaşdırır və təsirlənmiş istifadəçilərin sayını göstərir. O, recordException() vasitəsilə ölümcül olmayan xətaların qeydiyyatını dəstəkləyir. İnteqrasiya: build.gradle (Android) və ya Podfile (iOS)-a SDK əlavə edin. Crashlytics layihəyə başlayarkən xəta idarəetməsi üçün ən yaxşı pulsuz alətdir.

Sentry

Sentry çarpaz platformalı xəta monitorinq sistemidir. Crashlytics-dən fərqli olaraq, Sentry ətraflı izləmə (breadcrumbs), performans monitorinqi və React Native dəstəyi təmin edir. Xəta anında tətbiqin vəziyyətini görməyə imkan verir. IT Sectr mobil inkişafda xəta idarəetməsi üzərində tam nəzarətə ehtiyacı olan layihələr üçün Sentry-i tövsiyə edir.

React Native-də Error Boundary

Error Boundary uşaq komponent ağacında JavaScript səhvlərini tutan və ehtiyat istifadəçi interfeysi göstərərək tətbiqin tam çökməsinin qarşısını alan React komponentidir. Error Boundary React Native-də xəta idarəetməsi üçün əsas komponentdir. Kritik ekranlar və naviqasiya üçün error boundaries istifadə edin. React Native-də mobil tətbiqlərdə xəta idarəetməsi yuxarı səviyyədə düzgün Error Boundary qurulmasını tələb edir.

Error Boundary Tətbiqi

Error Boundary componentDidCatch(error, errorInfo) və ya static getDerivedStateFromError(error) vasitəsilə yaradılır. O, asinxron koddakı (setTimeout, requestAnimationFrame), server tərəfli renderinqdəki və ya yerli səhvlərdəki (Native Modules) xətaları tutmur. Qeydiyyat üçün componentDidCatch daxilində çökmə hesabatı SDK-sından istifadə edin. Error Boundary UI təbəqəsi üçün sadə, lakin effektiv xəta idarəedicisidir.

Ölümcül və Qeyri-Ölümcül Xətalar

Ölümcül xəta tətbiqin çökməsinə səbəb olan idarə olunmamış istisnadır. Qeyri-ölümcül xəta tutduğunuz və idarə etdiyiniz, lakin kodda bir problemi göstərən istisnadır. Qeyri-ölümcül xətalar Crashlytics/Sentry vasitəsilə qeydə alınır və ölümcül olmamışdan əvvəl səhvləri tapmağa kömək edir. Həm ölümcül, həm də qeyri-ölümcül xətalar mobil inkişafda düzgün xəta idarəetməsi tələb edir.

Tez-tez verilən suallar

Kotlin-də try-catch və Result arasındakı fərq nədir?

try-catch istisnalar üçün dil mexanizmidir. Result kompilyasiya vaxtında xəta idarəetməsini məcbur edən bir sarma tipidir. IT Sectr-də biz biznes məntiqi üçün Result-a və xarici sistemlərlə işləmək üçün try-catch-ə üstünlük veririk. Hər iki yanaşma Kotlin-də ümumi xəta idarəetməsinin bir hissəsidir.

React Native-də Error Boundary nədir?

Error Boundary uşaq komponent ağacında JavaScript səhvlərini tutan və bütün tətbiqi çökdürmək əvəzinə ehtiyat istifadəçi interfeysi göstərən React komponentidir. O, asinxron koddakı və ya server tərəfli renderinqdəki xətaları tutmur. Error Boundary React Native-də mobil tətbiqlərdə xəta idarəetməsinin vacib elementidir.

Yeni bir layihə üçün Crashlytics və ya Sentry istifadə etməliyəm?

Crashlytics (Firebase) başlamaq üçün ən yaxşı seçimdir: pulsuz, sadə inteqrasiya, avtomatik çökmə qruplaşdırması. Sentry ətraflı xəta izləmə və performans monitorinqi tələb edən layihələr üçündür. Xəta idarəetmə alətinin seçimi büdcə və monitorinq tələblərindən asılıdır.

Qeyri-ölümcül xəta nədir və ölümcül xətadan nə ilə fərqlənir?

Ölümcül xəta tətbiq çökməsidir (tutulmamış istisna). Qeyri-ölümcül xəta tutduğunuz və idarə etdiyiniz, lakin kodda bir problemi göstərən istisnadır. Qeyri-ölümcül xətalar ayrıca qeydə alınır və ölümcül olmamışdan əvvəl səhvləri tapmağa kömək edir. Mobil tətbiqdə xəta idarəetməsi hər iki növün monitorinqini əhatə etməlidir.

Swift-də if-let əvəzinə nə vaxt guard let istifadə etməliyəm?

guard let dəyər olmadıqda funksiyadan erkən çıxmaq üçün istifadə olunur — bu, kodu daha xətti və oxunaqlı edir. if-let bir blok daxilində optional lazım olduqda və funksiyadan çıxış tələb olunmadıqda uyğundur. guard let giriş parametrlərini yoxlamaq üçün üstünlük təşkil edir və iOS-da xəta idarəetməsinin bir hissəsidir.

Xülasə

  • iOS do-catch, throws və guard let istifadə edir — hər xəta funksiya imzasında bəyan edilməlidir. iOS-da xəta idarəetməsi açıq bəyannamələr tələb edir.
  • Android/Kotlin ifadə kimi try-catch, elvis operatoru və xəta modelləşdirməsi üçün sealed class təklif edir. Android-də xəta idarəetməsi daha çevikdir, lakin intizam tələb edir.
  • Sealed class və Result Kotlin-də funksional xəta idarəetməsi üçün ən yaxşı təcrübələrdir. Onlar idarə olunmamış vəziyyətləri aradan qaldırır.
  • Çökmə Hesabatı (Crashlytics, Sentry) istehsal üçün məcburidir. Crashlytics ilə başlayın, layihə böyüdükcə Sentry-ə keçin. Monitorinq olmadan mobil tətbiqlərdə xəta idarəetməsi mümkün deyil.
  • React Native-də Error Boundary tam UI çökmələrinin qarşısını alır. Üst naviqasiya səviyyəsində istifadə edin.
  • Qeyri-ölümcül xətalar ölümcül olanlar qədər vacibdir — onlar tətbiq çökməsindən əvvəl problemləri göstərir. Xəta idarəedicisi hər iki növü qeyd etməlidir.
  • Global Exception Handler son müdafiə xəttidir. Bütün tutulmamış xətaları qeyd etmək üçün Thread.setDefaultUncaughtExceptionHandler (Android) və ya NSSetUncaughtExceptionHandler (iOS) tətbiq edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et