Sobes.tech
Junior

Mi történik, ha eltávolítod az opcionálisokat a Swiftből?

sobes.tech MI

Válasz az MI-től

Ez jelentős mértékben csökkentené a kód biztonságát. Sok művelet potenciálisan biztonságtalan lenne, mivel a fordító nem tudná garantálni az érték meglétét.

  1. Az opcionális láncolás (?) és az erőltetett kicsomagolás (!) eltávolítása. Az opcionálisokkal való munka szintaxisa érvénytelen lenne.
  2. Állandó nil ellenőrzések szükségessége. A fejlesztők manuálisan írhatnának if feltételeket minden olyan művelethez, ahol potenciálisan hiányzó érték van, ami jelentősen növelné a kód ismétlődését és összetettségét.
  3. Növekvő hibázási kockázat. A fordító garanciái nélkül, hogy az érték létezik, a nil-hez való hozzáférés futásidejű hibához vezetne.
  4. Elegáns megoldások hiánya az aszinkronitás kezelésére. Az eredmények kezelése olyan aszinkron műveleteknél, amelyek kudarcot vallhatnak (nil-t adva vissza), bonyolulttá válna.
  5. Az Objective-C API-val való munka bonyolultabbá válna. Sok Objective-C módszer nil-t ad vissza a hibák vagy az érték hiányának jelzésére. Az interoperabilitás kevésbé lenne biztonságos.

Példa a kódra, mielőtt és miután (hipotetikus):

Előtte:

var optionalString: String? = "Hello"
let length = optionalString?.count // Opció láncolás

Utána (hipotetikus):

var nonOptionalString: String // Mostantól minden változónak értékkel kell rendelkeznie az inicializáláskor vagy kifejezetten ellenőrizni kell
var potentiallyNilStringFromSomewhere: String

// Az opcionális láncolás helyett így kell írni:
if someFunctionCouldReturnNil() {
    // Hiba kezelése
} else {
    potentiallyNilStringFromSomewhere = ... // Érték hozzárendelése
    let length = potentiallyNilStringFromSomewhere.count // Potenciális crash, ha az érték valójában nil
}

// Vagy így, ha a `nil` még mindig létezne a nyelvben, de fordító támogatás nélkül:
if potentiallyNilStringFromSomewhere != nil {
    let length = potentiallyNilStringFromSomewhere!.count // Kockázatos erőltetett kivétel
} else {
    // `nil` kezelése
}

Így a kód jobban ki van téve futásidejű hibáknak, kevésbé olvasható és nehezebben karbantartható lesz. Az opcionális típusok a Swift egyik kulcsmechanizmusa a típusbiztonság biztosítására és a Null Pointer Exception-ök elkerülésére.