Junior
Kas notiks, ja noņemam opcionalus no Swift?
sobes.tech AI
Atbilde no AI
Tas būtu ievērojami samazinājis koda drošību. Daudzas operācijas kļūtu potenciāli nedrošas, jo kompilators nevarētu garantēt vērtības esamību.
- Optional Chaining (
?) un Forced Unwrapping (!) noņemšana. Sintakse darbam ar opcijām kļūtu nederīga. - Nepārtraukta
nilpārbaude. Izstrādātājiem būtu jārakstaifnosacījumi katrai operācijai ar potenciāli trūkstošu vērtību, kas ievērojami palielinātu boilerplate koda daudzumu un sarežģītību. - Paaugstināts avārijas risks. Bez garantijām no kompilatora par vērtības esamību, mēģinājums piekļūt
nilnovestu pie kļūdas izpildes laikā. - Elegantu risinājumu trūkums asinhronitātei. Asinhrono operāciju rezultātu apstrāde, kas var beigties neveiksmīgi (
nil), kļūtu sarežģīta. - API Objective-C sarežģītība. Daudzas Objective-C metodes atgriež
nil, norādot uz neveiksmi vai vērtības neesamību. Savietojamība kļūtu mazāk droša.
Piemēra kods pirms un pēc (hipotētisks):
Pirms:
var optionalString: String? = "Hello"
let length = optionalString?.count // Optional chaining
Pēc (hipotētisks):
var nonOptionalString: String // Tagad visiem mainīgajiem jābūt ar vērtību inicializācijas laikā vai jābūt skaidri pārbaudītiem
var potentiallyNilStringFromSomewhere: String
// Tā vietā, lai izmantotu optional chaining, būtu jāraksta šādi:
if someFunctionCouldReturnNil() {
// Kļūdas apstrāde
} else {
potentiallyNilStringFromSomewhere = ... // Vērtības piešķiršana
let length = potentiallyNilStringFromSomewhere.count // Potenciāls avārija, ja vērtība patiešām ir `nil`
}
// Vai arī tā, ja `nil` joprojām pastāv valodā, bet bez kompilatora atbalsta:
if potentiallyNilStringFromSomewhere != nil {
let length = potentiallyNilStringFromSomewhere!.count // Bīstama piespiedu iegūšana
} else {
// `nil` apstrāde
}
Tādējādi, kods kļūtu pakļauts kļūdām izpildes laikā, mazāk lasāms un sarežģītāks uzturēšanai. Opcionalas ir viens no galvenajiem Swift mehānismiem, nodrošinot tipa drošību un cīņu ar Null Pointer Exception.