Published on

Swift-da o'zgaruvchi va konstantalardan qanday foydalanish kerak (var, let)

Authors

Hammaga yana xush kelibsiz! Mening ismim Nick, bu β€” Swiftful Thinking kanali. Oldingi videoda biz Swift-dagi asosiy turlarni ko'rib chiqdik β€” string, boolean va raqamlar bilan qanday ishlashni o'rgandik. Shuni payqagan bo'lsangiz kerak: biz hammasini yaratganda let kalit so'zidan foydalandik. Ushbu videoda esa aynan shu let so'zi nimani anglatishini, shuningdek var kalit so'zini chuqurroq ko'rib chiqamiz.

Oddiy qilib aytganda, eng sodda tushuntirish shunday: let β€” ma'lumotni bir marta belgilagandan so'ng, u hech qachon o'zgarmaydi degani. var (variable β€” o'zgaruvchi) esa β€” ma'lumot o'zgaruvchan, ya'ni u o'zgarishi mumkin degani. Ammo keling, buni kodda misollar orqali ko'rib chiqaylik.


Yangi playground sahifa

Agar siz hozir qo'shilayotgan bo'lsangiz, eslatib o'tamiz: biz Xcode ichidagi playground-da ishlayapmiz, ammo buni istalgan Swift faylida ham bajarish mumkin. Navigator-da o'ng tugmani bosib, yangi playground sahifa yaratamiz va unga Variables deb nom beramiz. Standart kodni o'chiramiz, faqat Foundationni import qilib qoldiramiz va kod yozishni boshlaymiz.

import Foundation

Konstanta va o'zgaruvchi yaratish

Avval konstanta yaratamiz:

let someConstant = true

print(someConstant)

Endi xuddi shunga o'xshash, lekin var bilan o'zgaruvchi yaratamiz:

var someVariable = true
print(someVariable)

Tashqi ko'rinishidan ikkisi bir xilday tuyuladi β€” ikkisi ham Bool turiga tegishli. Ammo farq shunda: biri β€” konstanta, biri β€” o'zgaruvchi.

Konstanta (let) β€” qiymati o'zgarmaydi. O'zgaruvchi (var) β€” qiymati ilova hayoti davomida o'zgarishi mumkin.

someVariable β€” o'zgaruvchi bo'lgani uchun, uning qiymati ilovamiz ishlashi davomida o'zgarishi mumkin: u rost bo'lishi ham, keyin yolg'on bo'lishi ham mumkin. someConstant esa let bilan belgilangan konstanta β€” bu degani, biz unga birinchi marta qiymat berganimizdan so'ng (bu holatda true), u hech qachon, hech qachon o'zgarmaydi.

Konstantani o'zgartirishga urinish

Agar kodimda someConstantni falsega tenglashtirishga urinsam, kompilyator xatolik beradi:

let someConstant = true

someConstant = false
// Xatolik: Cannot assign to value: 'someConstant' is a 'let' constant

Bu xatolikni ko'ramiz: someConstantni o'zgartirib bo'lmaydi, chunki bu obyekt let β€” ya'ni konstanta. Demak, bu let, ya'ni biz uning qiymatini o'zgartira olmaymiz.

O'zgaruvchini o'zgartirish

Endi shu kodni nusxalab, izohga olamiz, ammo someVariableni falsega tenglashtirib ko'ramiz β€” bu safar hech qanday muammo bo'lmaydi:

var someVariable = true
print(someVariable)

someVariable = false
print(someVariable)

Kodni ishga tushirsak, avval true chiqishini, so'ngra false chiqishini ko'ramiz β€” chunki someVariable haqiqatan ham o'zgaruvchi.


Qachon let, qachon var ishlatish kerak

Shunda savol tug'ilishi mumkin: demak, var doim yaxshiroq emasmi? Har doim var ishlatsak bo'lmaydimi?

Javob β€” yo'q. Biz har doim konstantani ishlatishni xohlaymiz, faqat qiymatni o'zgartirish zarurati bo'lsagina varga o'tamiz. Dasturlashda odatda imkon qadar hamma narsani cheklab qo'yish tavsiya etiladi β€” agar biror narsa konstanta bo'lib qolishi mumkin bo'lsa, uni shunday qoldiramiz; agar kod yozish jarayonida uning qiymatini o'zgartirish zarurati paydo bo'lsa, faqat shunda uni varga o'tkazamiz.

Agar bilsangiz, bu qiymat o'zgaradi β€” var qiling. Agar bilsangiz, bu qiymat doim shu bo'lib qoladi β€” let qiling (konstanta).


Raqam bilan misol

Keling, yana bir misol ko'ramiz. myNumber nomli o'zgaruvchi yaratamiz va unga 1 qiymatini beramiz:

var myNumber: Double = 1
print(myNumber)

Oldingi videoda raqamlar haqida gaplashgan edik β€” agar kasr (decimal) qo'shilmasa, bu Int bo'ladi. Eslatma sifatida aytib o'taman: agar shu yerga kasr son qo'shsak, u Doublega aylanadi.

Endi myNumberning qiymatini bir necha marta o'zgartirib, har safar uni konsolga chiqaramiz:

var myNumber: Double = 1
print(myNumber)

myNumber = 2
print(myNumber)

myNumber = 3
print(myNumber)

myNumber = 4.5
print(myNumber)

Kodni ishga tushirsak, konsolda myNumberning vaqt o'tishi bilan qanday o'zgarib borishini ko'ramiz β€” avval shu qiymat, so'ngra bu, keyin yana boshqasi. Demak, biz o'zgaruvchi yaratdik va bu raqam vaqt davomida o'zgarib turadi.

Shuni ham ta'kidlab o'taman: garchi boshida kasrsiz 1 qiymatini bergan bo'lsak ham, bu hamon Double bo'lib qoladi β€” chunki myNumberning turini bir marta Double deb belgilagandan so'ng, u hech qachon boshqa turga aylanmaydi. Biz uni Boolean yoki boshqa turga o'tkaza olmaymiz β€” agar u Double deb e'lon qilingan bo'lsa, u doim Double bo'lib qoladi.

Turni o'zgartirishga urinish

Agar shu o'zgaruvchiga Boolean qiymat berishga urinsak, kod hatto ishga tushmaydi ham, chunki Boolean-ni Double-ga tenglashtirib bo'lmaydi:

var myNumber: Double = 1

myNumber = true
// Xatolik: Cannot assign value of type 'Bool' to type 'Double'

Bu β€” Swift-ning yana bir type-safe (turga xavfsiz) til ekanligining isboti: biz turini bir marta e'lon qilamiz, so'ngra uning qiymatini o'zgartirishimiz mumkin, ammo turini o'zgartira olmaymiz β€” va bu biz dasturchilar uchun juda foydali narsa.


Birinchi if shartlari

O'zgaruvchining qiymatini o'zgartirishni boshlagach, ko'pincha uning hozirgi qiymatini tekshirib ko'rish kerak bo'ladi. Shu sababli endi birinchi if shartlarimizni ko'rib chiqamiz.

if β€” siz dasturchi sifatida butun faoliyatingiz davomida eng ko'p ishlatadigan narsalardan biri bo'ladi: agar biror narsa rost yoki yolg'on bo'lsa, u holda boshqa bir amalni bajaramiz.

Keling, userIsPremium nomli Boolean o'zgaruvchi yaratamiz va unga true qiymatini beramiz:

var userIsPremium: Bool = true
print(userIsPremium)

Endi, agar foydalanuvchi premium bo'lsa, biror amalni bajarishni xohlaymiz. Buni aynan shunday yozishimiz mumkin:

var userIsPremium: Bool = true

if userIsPremium == true {
print("1. User is premium")
}

Bu yerda qo'sh teng belgisi (==) "ga teng" degan ma'noni bildiradi. Ochiq va yopiq qavslar ({ }) β€” bu closure (yopiq blok) deb ataladi, va siz buni keyingi bir necha videoda tez-tez ko'rasiz. Closure ichidagi kod faqat shart rost bo'lganda bajariladi β€” demak, agar userIsPremium truega teng bo'lsa, biz "1. User is premium" deb chop etamiz.

Agar shu kodni userIsPremium = false bilan ishga tushirsak, konsolda hech narsa chiqmaydi, chunki foydalanuvchi premium emas:

var userIsPremium: Bool = false

if userIsPremium == true {
print("1. User is premium")
}

Qisqartirilgan yozilishi

Bu kodni yozishning qisqartirilgan usuli ham bor, va men buni sizlarga ko'rsatib o'taman, chunki boshqa darsliklarda buni ko'p uchratasiz. Kompilyator userIsPremiumning Boolean ekanligini biladi, shuning uchun "agar bu Boolean truega teng bo'lsa" deyish bilan "agar bu Boolean rost bo'lsa" deyish β€” bir xil narsa:

var userIsPremium: Bool = true
if userIsPremium {
print("2. User is premium")
}

Bu ham xuddi avvalgisi kabi ishlaydi β€” agar userIsPremium true bo'lsa, ikkala blok ham chop etiladi.

Aksincha holatni tekshirish

Buning teskarisini ham tekshirishimiz mumkin β€” agar userIsPremium falsega teng bo'lsa:

var userIsPremium: Bool = false

if userIsPremium == false {
print("3. User is not premium")
}

Kodni ishga tushirsak, "3. User is not premium" chiqishini ko'ramiz.

Buning ham qisqartirilgan yozilishi mavjud, albatta, u yuqoridagidek aynan bir xil bo'la olmaydi. Buning o'rniga undov belgisi (!) ishlatiladi β€” bu "emas" (not) degan ma'noni bildiradi. Demak, Boolean oldiga undov belgisi qo'yilsa, bu "bu emas" degani bo'ladi:

var userIsPremium: Bool = false

if !userIsPremium {
print("4. User is not premium")
}

Demak, "agar foydalanuvchi premium emas bo'lsa" β€” shu satrni bajaramiz. Kodni ishga tushirsak, "4. User is not premium" chiqishini ko'ramiz.


else bloki

Xuddi if sharti bo'lgani kabi, bizda else ham mavjud: else β€” "agar shart rost bo'lmasa, qolgan barcha holatlarda" degan ma'noni bildiradi.

var userIsPremium: Bool = false

if userIsPremium {
print("User is premium")
} else {
print("5. User is not premium")
}

Kodni ishga tushirsak, "5. User is not premium" konsolga chiqishini ko'ramiz, chunki userIsPremium falsega teng β€” demak shart bajarilmaydi va kod else blokiga o'tadi.


Xulosa

Bu β€” if shartlariga shunchaki kirish bo'ldi, va bu mavzu keyinroq ancha murakkablashadi. Keyingi videoda biz operatorlar mavzusiga chuqurroq kirib boramiz β€” chunki faqat "ga teng" tekshirish va Boolean rost/yolg'onligini ko'rishdan tashqari, masalan raqamlarni "kattaroq yoki teng", "kichikroq" kabi taqqoslashlar, yoki string-ning aynan kerakli matn ekanligini tekshirish kabi juda ko'p qiziqarli narsalar mavjud.

Ammo ushbu videoda asosiy maqsadim let va var orasidagi farqni ta'kidlash edi:

  • Agar qiymat hech qachon o'zgarmasa β€” uni konstanta (let) qilamiz.
  • Agar qiymat o'zgarishi kerak bo'lsa β€” uni o'zgaruvchi (var) qilamiz.

Imkon qadar hamma narsani iloji boricha cheklab qo'yish kerak: agar o'zgartirish zarurati bo'lmasa β€” konstanta qiling. Hech qachon o'zgarmaydigan narsani var qilib qo'yish β€” yomon amaliyot hisoblanadi. Lekin agar u o'zgaradigan bo'lsa β€” var qiling.

Endi siz oddiy if shartlari bilan tanishsiz. Keyingi videoda biroz murakkabroq operatorlarni ko'rib chiqamiz.

Tomosha qilganingiz uchun rahmat! Men β€” Nick, bu Swiftful Thinking, keyingi videoda ko'rishamiz!

Buy mea coffee