Junior
Чӣ гуна бехатарии null (null safety) дар Dart?
sobes.tech AI
Ҷавоб аз AI
Бехатарии сифрӣ системаи дар Dart аст, ки кӯмак мекунад, ки хатогиҳо дар вақти иҷроиш, ки бо разыменувании null алоқаманданд, пешгирӣ шаванд. Компилятор кодро таҳлил мекунад ва муайян мекунад, ки оё тағйирёбанда метавонад арзиши null дошта бошад. Агар тағйирёбанда ҳамчун ғайриимкон барои null эълон карда шавад, компилятор кафолат медиҳад, ки ба он ҳеҷ гоҳ арзиши null дода намешавад.
Аспектҳои асосии бехатарии сифрӣ:
- Намуди ғайримустақим бо null: Ба таври пешфарз намудҳо иҷозат намедиҳанд null (non-nullable).
// int наметавонад null бошад int count = 0; - Намуди иҷозатдодашудаи null: Барои нишон додани равшан, ки тағйирёбанда метавонад null бошад, аз нишони
?истифода мешавад:// String? метавонад null бошад String? name; - Ҳамлагари
!(тасдиқи ғайримустақим): Барои тасдиқ кардани он, ки изрази иҷозатдодашудаи null null нест. Ин бояд бо эҳтиёт истифода шавад, зеро дар ҳолати null истисно меандозад.String? nullableName = 'Flutter'; // Мо истифода мебарем !, дарк карда, ки nullableName null нест дар ин контекст print(nullableName!.length); - Ҳамлагари
?(ҳамлагарони эҳтиёткор): Барои дастрасии бехатари ба аъзои ё фароидани усулҳо дар изразҳое, ки метавонанд 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 нест, ки имкон медиҳад, онро ҳамчун ғайриимкон барои null истифода бурдан.
String? greeting = getGreeting(); // Компилятор медонад, ки greeting null нест пас аз ин санҷиш if (greeting != null) { print(greeting.toUpperCase()); // Бехатар истифода бурда мешавад toUpperCase() }
Афзалиятҳои бехатарии сифрӣ:
- Кам кардани хатоҳо: Пешгирӣ мекунад NullReferenceException (ё монандиҳоро) дар вақти иҷроиш.
- Беҳтар кардани хонданӣ: Ба равшан нишон медиҳад, ки оё тағйирёбанда метавонад null бошад.
- Ҳосилнокии баландтар: Компилятор метавонад оптимизатсияҳоро анҷом диҳад, дониста, ки кадом тағйирёбандаҳо бехатарона null нестанд.
Бехатарии сифрӣ дар Dart 2.12 ворид карда шуд.