Junior
Mis juhtub, kui eemaldame Swiftist valikulised?
sobes.tech AI
Vastus AI-lt
See viiks koodi turvalisust oluliselt. Paljud operatsioonid muutuksid potentsiaalselt ohtlikuks, kuna kompilaator ei suudaks tagada väärtuse olemasolu.
- Optional Chaining (
?) ja Forced Unwrapping (!) eemaldamine. Süntaks optioonidega töötamiseks muutuks kehtetuks. nilkontrollide pidev vajadus. Arendajad peaksid käsitsi kirjutamaiftingimused iga operatsiooni jaoks, millel võib olla puuduv väärtus, mis suurendaks oluliselt boilerplate koodi ja selle keerukust.- Võimalik tõrke risk. Ilma kompilaatori garantiideta väärtuse olemasolu kohta, põhjustaks
nil-ile viitamine jooksuaegse vea. - Elegantsete lahenduste puudumine asünkroonsuse jaoks. Asünkroonsete operatsioonide tulemuste töötlemine, mis võivad ebaõnnestuda (
nil), muutuks keeruliseks. - API Objective-C keerukus. Paljud Objective-C meetodid tagastavad
nil, mis näitab ebaõnnestumist või väärtuse puudumist. Koostalitlus muutuks vähem turvaliseks.
Näide koodist enne ja pärast (hüpoteetiline):
Enne:
var optionalString: String? = "Hello"
let length = optionalString?.count // Optional chaining
Pärast (hüpoteetiline):
var nonOptionalString: String // Nüüd peavad kõik muutujad alguses väärtuse omama või olema selgelt kontrollitud
var potentiallyNilStringFromSomewhere: String
// Asendades optional chaining, kirjutaks nii:
if someFunctionCouldReturnNil() {
// Vea töötlemine
} else {
potentiallyNilStringFromSomewhere = ... // Väärtuse määramine
let length = potentiallyNilStringFromSomewhere.count // Potentsiaalne crash, kui väärtus on tegelikult `nil`
}
// Või nii, kui `nil` on ikka veel keeles olemas, kuid ilma kompilaatori toeta:
if potentiallyNilStringFromSomewhere != nil {
let length = potentiallyNilStringFromSomewhere!.count // Ohtlik sunniviisiline kättesaamine
} else {
// `nil` töötlemine
}
Seega, kood muutub suurema tõenäosusega vigadeks jooksu ajal, vähem loetavaks ja keerulisemaks hooldada. Opciionalid on üks Swifti põhimehhanisme, mis tagab tüübi turvalisuse ja võitleb Null Pointer Exception'idega.