Sobes.tech
Junior

Dart-da null təhlükəsizliyi (null safety) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Null təhlükəsizliyi Dartda null ilə əlaqəli səhvlərin qarşısını almağa kömək edən bir sistemdir. Tərtibçi kodu analiz edir və dəyişənin null dəyər tutub tutmayacağını müəyyən edir. Əgər dəyişən null icazə verən kimi elan olunubsa, tərtibçi ona heç vaxt null təyin olunmayacağını təmin edir.

Null təhlükəsizliyinin əsas aspektləri:

  • İmplicit non-null tip: Əsasən, tiplər nulla icazə vermir (non-nullable).
    // int null ola bilməz
    int count = 0;
    
  • Null icazə verən tip: Dəyişənin null ola biləcəyini açıq şəkildə göstərmək üçün ? işarəsindən istifadə olunur:
    // String? null ola bilər
    String? name;
    
  • Operator ! (null olmayan təsdiq): Null icazə verən ifadənin null olmadığını təsdiqləmək üçün istifadə olunur. Diqqətli istifadə edilməlidir, çünki null olarsa, istisna atılır.
    String? nullableName = 'Flutter';
    // nullableName-in null olmadığını bilirik və ! istifadə edirik
    print(nullableName!.length);
    
  • Operator ? (null-aware operatorlar): Null icazə verən ifadələrə təhlükəsiz giriş və ya metod çağırışları üçün istifadə olunur.
    • ?. (null-aware giriş):
      String? nullableString;
      // Əgər nullableString null deyilsə, length çağırılır, yoxsa nəticə null olur
      int? length = nullableString?.length;
      
    • ?? (null olarsa):
      String? serverName;
      // Əgər serverName null deyilsə, onun dəyəri istifadə olunur, yoxsa 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (null olarsa, təyin et):
      String? cache;
      // Əgər cache null olarsa, ona 'Loading...' təyin edilir
      cache ??= 'Loading...';
      
  • Axın analizi: Dart tərtibçisi kodu analiz edir və müəyyən edir ki, null icazə verən dəyişən müəyyən bir kod hissəsində null deyil, ona görə də onu null olmayan kimi istifadə etmək olar.
    String? greeting = getGreeting();
    // Tərtibçi bu yoxlamadan sonra greeting-in null olmadığını bilir
    if (greeting != null) {
      print(greeting.toUpperCase()); // Təhlükəsiz şəkildə toUpperCase() istifadə edilə bilər
    }
    

Null təhlükəsizliyinin üstünlükləri:

  • Səhvlərin azaldılması: Runtime zamanı NullReferenceException (və ya oxşar) qarşısını alır.
  • Oxuma asanlığı: Dəyişənin null ola biləcəyini açıq şəkildə göstərir.
  • İş performansının artırılması: Tərtibçi hansı dəyişənlərin garantiylə null olmadığını bilərək optimizasiyalar edə bilər.

Null təhlükəsizliyi Dart 2.12-də təqdim olunub.