Sobes.tech
Junior

Co se stane, když odstraníme volitelné v Swiftu?

sobes.tech AI

Odpověď od AI

To by vedlo k výraznému snížení bezpečnosti kódu. Mnoho operací by se stalo potenciálně nebezpečnými, protože překladač by nemohl garantovat přítomnost hodnoty.

  1. Odstranění řetězení volitelných (?) a nuceného rozbalení (!). Syntaxe pro práci s volitelnými by se stala neplatnou.
  2. Potřeba neustálých kontrol nil. Vývojáři by museli ručně psát podmínky if pro každou operaci s potenciálně chybějící hodnotou, což by výrazně zvýšilo množství opakujícího se kódu a jeho složitost.
  3. Zvýšení rizika pádů. Bez záruk překladače o přítomnosti hodnoty by pokus o přístup k nil vedl k chybě za běhu.
  4. Chybějící elegantní řešení pro asynchronní operace. Zpracování výsledků asynchronních operací, které mohou selhat (vracející nil), by se stalo komplikovaným.
  5. Složitost práce s API Objective-C. Mnoho metod Objective-C vrací nil k indikaci selhání nebo absence hodnoty. Interoperabilita by se stala méně bezpečná.

Příklad kódu před a po (hypotetický):

Před:

var optionalString: String? = "Hello"
let length = optionalString?.count // Volitelné řetězení

Po (hypoteticky):

var nonOptionalString: String // Nyní musí všechny proměnné mít hodnotu při inicializaci nebo být explicitně ověřeny
var potentiallyNilStringFromSomewhere: String

// Místo volitelného řetězení by bylo nutné psát takto:
if someFunctionCouldReturnNil() {
    // Zpracování chyby
} else {
    potentiallyNilStringFromSomewhere = ... // Přiřadit hodnotu
    let length = potentiallyNilStringFromSomewhere.count // Potenciální pád, pokud je hodnota ve skutečnosti `nil`
}

// Nebo tak, pokud by `nil` stále existoval v jazyce, ale bez podpory překladače:
if potentiallyNilStringFromSomewhere != nil {
    let length = potentiallyNilStringFromSomewhere!.count // Nebezpečné nucené rozbalení
} else {
    // Zpracování `nil`
}

Tímto by byl kód náchylnější k chybám za běhu, méně čitelný a složitější na údržbu. Volitelné jsou jedním z klíčových mechanismů Swiftu pro zajištění typové bezpečnosti a prevenci Null Pointer Exception.