Junior
Šta će se desiti ako uklonimo opcionalne iz Swift-a?
sobes.tech АИ
Одговор од АИ
Ovo bi dovelo do značajnog smanjenja sigurnosti koda. Mnoge operacije bi postale potencijalno nesigurne, jer kompilator ne bi mogao garantovati prisustvo vrednosti.
- Uklanjanje opcionalnog lančanja (
?) i forsiranog raspakivanja (!). Sintaksa za rad sa opcionalima bi postala nevažeća. - Potrebni stalni provere
nil. Programeri bi morali ručno da pišu usloveifza svaku operaciju sa potencijalno nedostajućom vrednošću, što bi znatno povećalo količinu ponovljivog koda i njegovu složenost. - Povećan rizik od padova. Bez garancija kompilatora o prisustvu vrednosti, pokušaj pristupa
nilbi doveo do greške u toku izvršavanja. - Nedostatak elegantnih rešenja za asinhronost. Obrada rezultata asinhronih operacija koje mogu da ne uspeju (
nil), postala bi komplikovana. - Složenost rada sa API-jem Objective-C. Mnoge Objective-C metode vraćaju
nilda bi ukazale na neuspeh ili odsustvo vrednosti. Interoperabilnost bi postala manje sigurna.
Primer koda pre i posle (hipotetički):
Pre:
var optionalString: String? = "Hello"
let length = optionalString?.count // Opcionalno lančanje
Posle (hipotetički):
var nonOptionalString: String // Sada sve promenljive moraju imati vrednost pri inicijalizaciji ili biti eksplicitno proverene
var potentiallyNilStringFromSomewhere: String
// Umesto opcionalnog lančanja, mora se pisati ovako:
if someFunctionCouldReturnNil() {
// Obrada greške
} else {
potentiallyNilStringFromSomewhere = ... // Dodeliti vrednost
let length = potentiallyNilStringFromSomewhere.count // Potencijalni pad ako je vrednost zaista `nil`
}
// Ili tako, ako `nil` još uvek postoji u jeziku, ali bez podrške kompilatora:
if potentiallyNilStringFromSomewhere != nil {
let length = potentiallyNilStringFromSomewhere!.count // Opasno forsko izvlačenje
} else {
// Obrada `nil`
}
Na ovaj način, kod bi postao podložniji greškama u toku izvršavanja, manje čitljiv i teže održiv. Opcionalni su jedan od ključnih mehanizama Swift-a za obezbeđivanje tipne sigurnosti i sprečavanje Null Pointer Exception.