Sobes.tech
Junior

Dart-ში null უსაფრთხოება (null safety) რა არის?

sobes.tech AI

პასუხი AI-სგან

Null сигурност — Dart-да системա, ул null-ға бәйле эшләүҙә хата ҡылыуҙы алдан тороп тора. Компилятор кодты анализлай һәм үҙгәрмәнең null-ды һаҡлау мөмкинлеген билдәләй. Әгәр үҙгәрмә null-ға рөхсәт ителмәгән типта иғлан ителһә, ул бер ҡасан да null-ды ҡабул итмәйәсәккә гарантия бирә.

Null сигурлығының төп аспекттары:

  • Яҡынса null-һыҙ тип: Төп типтар null-ды рөхсәт итмәй (non-nullable).
    // int null-ға мөмкин түгел
    int count = 0;
    
  • Null-ға рөхсәт ителгән тип: Аңлатыу өсөн, үҙгәрмә null-ды мөмкин типта күрһәтеү өсөн ? ҡулланыла:
    // String? null-ды мөмкин
    String? name;
    
  • ! оператор (null-ға ышаныс): Null-ды мөмкин типтың null түгеллеген раҫлау өсөн ҡулланыла. Иғтибарлы ҡулланыу кәрәк, сөнки null булғанда исключение сыға.
    String? nullableName = 'Flutter';
    // ! ҡулланабыҙ, nullableName null түгел тип белеп
    print(nullableName!.length);
    
  • ? оператор (null-ға һаҡлаусы оператор): Null-ды мөмкин типтағы ағзаларға йәки метод саҡырыуҙарға хәүефһеҙ рәүештә инеү өсөн ҡулланыла.
    • ?. (null-ға һаҡлаусы инеү):
      String? nullableString;
      // Әгәр nullableString null түгел икән, length саҡырыла, юҡ икән, һөҙөмтә null була
      int? length = nullableString?.length;
      
    • ?? (әгәр null):
      String? serverName;
      // Әгәр serverName null түгел икән, уның ҡиммәте ҡулланыла, юҡ икән, 'Guest'
      String displayName = serverName ?? 'Guest';
      
    • ??= (әгәр null, билдәләү):
      String? cache;
      // Әгәр cache null икән, 'Loading...' тип билдәләнә
      cache ??= 'Loading...';
      
  • Тәҙрә анализы (Flow Analysis): Dart-тың компиляторы кодты анализлай һәм ҡайһы бер үҙгәрмәләрҙең гарантиялы null түгеллеген билдәләй, уларҙы null-һыҙ итеп ҡулланыу мөмкинлеген бирә.
    String? greeting = getGreeting();
    // Компилятор белә, greeting был тикшереүҙән һуң null түгел
    if (greeting != null) {
      print(greeting.toUpperCase()); // Имин ҡулланыу мөмкин
    }
    

Нуллы сигурлыҡтың өҫтөнлөктәре:

  • Хаталарҙы кәметеү: NullReferenceException (йәки шундайҙар) ваҡытында алдан тороп тора.
  • Уҡыуҙы яҡшыртыу: Үҙгәрмәнең null булыуы мөмкинлеген асыҡ күрсәтә.
  • Үҙгәрешлелектең арта барыуы: Компилятор ҡайһы үҙгәрмәләрҙең гарантиялы null түгеллеген белә, оптимизациялар башҡара ала.

Null сигурлығы Dart 2.12 версияһында индерелде.