Junior
Чаро хатоҳои вобаста ба null 'хатоҳои миллионӣ' номида мешаванд?
sobes.tech AI
Ҷавоб аз AI
null боғлиқ хато ёки хатоларни "миллиард долларлик хатолар" деб аташади (миллион эмас), чунки улар он йиллар давомида катта молиявий йўқотишларга ва дастурий таъминотда муаммоларга олиб келган. ALGOL тилида null (илгари NIL) концепциясини яратган Tony Hoare кейинчалик буни ўзининг "миллиард долларлик хати" деб тан олди, чунки у ўша пайтда уларнинг хавфсизлик муаммоларини олдиндан кўра олмаган.
Муаммолар қуйидагилардан келиб чиқади:
- Номуайянлик:
nullтурли контекстларда турли маъноларга эга бўлиши мумкин (қимматнинг йўқлиги, хато, ишланмаган ҳолат), бу кодни тушунишни қийинлаштиради. - Хавфсизлик муаммолари:
nullқийматда амалга оширишга уриниш (масалан, метод чақириш ёки хусусиятга кириш) одатдаNullPointerExceptionбилан тугайди, бу эса дастурнинг тўхтаб қолишига олиб келиши мумкин. - Текширувлар зарурлиги: Дастурчилар ўзгарувчилардан фойдаланишдан олдин доим
nullтекширувларини қўшиши керак, бу код ҳажми ва мураккаблигини оширади.
Flutter ва Dartда, null safety жорий этилгандан кейин, бу муаммо жуда кам аҳамиятга эга бўлди, чунки стандарт турлар (String?, int? ва бошқалар) аниқ кўрсатилмаган ҳолда null бўлмайди, бу компиляторга потенциал хатоларни ишга туширишдан олдин аниқлаш имконини беради.
// Null safety жорий этилмасдан олдин
String name = null; // Бу мумкин эди
// Null safety билан
// String name = null; // Компиляцияда хато
String? nullableName = null; // Рўйхатда, аммо аниқ кўрсатилган