Junior
Ի՞նչ է null անվտանգությունը (null safety) in 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; !օպերատոր (non-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՝ թույլ տալով օգտագործել այն որպես ոչ-null։
String? greeting = getGreeting(); // Կոմպիլատորը գիտի, որ greeting-ը չի null այս ստուգումից հետո if (greeting != null) { print(greeting.toUpperCase()); // Անվտանգ է օգտագործել toUpperCase() }
Նուլային անվտանգության առավելությունները՝
- Համակողմանի սխալների նվազեցում: Պրոֆիլակտիկորեն կանխում է NullReferenceException (կամ նմանատիպ) ժամանակի ընթացքում։
- Կարդալության բարելավում: Բացահայտում է, կարող է արդյոք փոփոխականը լինել null։
- Ավելի բարձր արդյունավետություն: Կոմպիլատորը կարող է կատարել օպտիմիզացիաներ՝ իմանալով, թե որոնք փոփոխականները հաստատապես չեն null։
Նուլային անվտանգությունը ներդրվել է Dart 2.12-ում։