Sobes.tech
Junior

Swift-dagi ixtiyoriylarni olib tashlasak nima bo'ladi?

sobes.tech AI

AIdan javob

Bu, kodning xavfsizligiga sezilarli darajada ta'sir qilardi. Ko'plab operatsiyalar potentsial ravishda xavfli bo'lib qolardi, chunki kompilyator qiymat mavjudligini kafolatlamasdi.

  1. Opsional zanjir (?) va majburiy ochish (!) olib tashlanardi. Opsional bilan ishlash uchun sintaksis yaroqsiz bo'lar edi.
  2. nil uchun doimiy tekshiruvlar zarur bo'lar edi. Dasturchilar har bir operatsiya uchun if shartlarini qo'lda yozishi kerak bo'lar edi, bu esa kodning takrorlanishini va murakkabligini sezilarli darajada oshirardi.
  3. Xatoliklar xavfi oshardi. Komilyator qiymat mavjudligini kafolatlamasdan, nil ga murojaat qilish ish vaqtida xatolik bilan tugashiga olib kelardi.
  4. Asinxronlik uchun shaxsiy yechimlar yo'q edi. nil bilan yakunlanishi mumkin bo'lgan asinxron operatsiyalar natijalarini boshqarish qiyin bo'lar edi.
  5. Objective-C API bilan ishlash murakkablashardi. Ko'plab Objective-C metodlari muvaffaqiyatsizlik yoki qiymatning yo'qligini ko'rsatish uchun nil qaytaradi. Interoperabilitet kamroq xavfsiz bo'lar edi.

Hipotetik tarzda, kodning oldingi va keyingi misoli:

Oldingi:

var optionalString: String? = "Hello"
let length = optionalString?.count // Opsional zanjir

Keyingi (hipotetik):

var nonOptionalString: String // Endi barcha o'zgaruvchilar boshlang'ichda qiymatga ega bo'lishi yoki aniq tekshirilishi kerak
var potentiallyNilStringFromSomewhere: String

// Opsional zanjir o'rniga, shunday yozish kerak:
if someFunctionCouldReturnNil() {
    // Xato bilan ishlash
} else {
    potentiallyNilStringFromSomewhere = ... // Qiymat berish
    let length = potentiallyNilStringFromSomewhere.count // Agar qiymat aslida `nil` bo'lsa, xavfli
}

// Yoki shunday, agar `nil` hali ham tilda mavjud bo'lsa, lekin komilyator qo'llab-quvvatlamasa:
if potentiallyNilStringFromSomewhere != nil {
    let length = potentiallyNilStringFromSomewhere!.count // Xavfli majburiy ochish
} else {
    // `nil` bilan ishlash
}

Shu tarzda, kod ish vaqtida xatolarga moyil bo'ladi, o'qilishi qiyin va qo'llab-quvvatlash qiyin bo'ladi. Opsionalar Swiftning asosiy mexanizmlaridan biri bo'lib, tur xavfsizligini ta'minlash va Null Pointer Exception'larni oldini olish uchun ishlatiladi.