6-bo‘lim
Shart operatorlari
If, ElseIf va Else, bir qatorli If, Select Case va uning diapazonlari, If() uchlik operatori va eski IIf funksiyasining xavfi.
Ushbu bo‘lim mundarijasi
Shart - dasturga tanlov qo'shadigan narsa. Visual Basic da u deyarli ingliz tilidagidek o'qiladi.
If ... Then ... End If #
Module Dastur
Sub Main()
Dim ball As Integer = 78
If ball >= 90 Then
Console.WriteLine("A'lo")
ElseIf ball >= 70 Then
Console.WriteLine("Yaxshi")
ElseIf ball >= 60 Then
Console.WriteLine("Qoniqarli")
Else
Console.WriteLine("Qoniqarsiz")
End If
End Sub
End Module
Yaxshi
Shartlar yuqoridan pastga tekshiriladi va birinchi to'g'ri
kelgani bajariladi. 78 uchun >= 90 noto'g'ri, >= 70 to'g'ri -
shu yerda to'xtaydi.
Else If emas, ElseIf.
Else If deb yozsangiz, kompilyator buni yangi ichma-ich If deb
tushunadi va har biri uchun alohida End If talab qiladi.
Bir qatorli shakl #
Module Dastur
Sub Main()
Dim yosh As Integer = 20
If yosh >= 18 Then Console.WriteLine("Voyaga yetgan")
If yosh < 18 Then Console.WriteLine("Bola") _
Else Console.WriteLine("Katta")
End Sub
End Module
Voyaga yetgan
Katta
Bir qatorli shaklda End If yozilmaydi. Faqat juda qisqa shartlar
uchun ishlating - aks holda o'qish qiyinlashadi.
Ichma-ich shartlar #
Module Dastur
Sub Main()
Dim yosh As Integer = 22
Dim talabami As Boolean = True
If yosh >= 18 Then
If talabami Then
Console.WriteLine("Talaba chegirmasi: 50%")
Else
Console.WriteLine("To'liq narx")
End If
Else
Console.WriteLine("Bolalar chegirmasi: 70%")
End If
End Sub
End Module
Talaba chegirmasi: 50%
Select Case #
Bitta qiymat ko'p variant bilan solishtirilsa, Select Case ancha
toza ko'rinadi:
Module Dastur
Sub Main()
Dim kun As Integer = 6
Select Case kun
Case 1
Console.WriteLine("Dushanba")
Case 2, 3, 4
Console.WriteLine("Hafta o'rtasi")
Case 5
Console.WriteLine("Juma")
Case 6, 7
Console.WriteLine("Dam olish kuni")
Case Else
Console.WriteLine("Noto'g'ri kun")
End Select
End Sub
End Module
Dam olish kuni
Select Case diapazonlari #
Bu Visual Basic ning kuchli tomoni - ko'p tillarda bunday imkoniyat yo'q:
Module Dastur
Sub Main()
Dim harorat As Integer = 27
Select Case harorat
Case Is < 0
Console.WriteLine("Sovuq")
Case 0 To 15
Console.WriteLine("Salqin")
Case 16 To 25
Console.WriteLine("Iliq")
Case 26 To 35
Console.WriteLine("Issiq")
Case Else
Console.WriteLine("Juda issiq")
End Select
End Sub
End Module
Issiq
| Shakl | Ma'nosi |
|---|---|
Case 5 | Aynan teng |
Case 1, 2, 3 | Sanoqdagilardan biri |
Case 1 To 10 | Diapazon (chegaralar ham kiradi) |
Case Is > 100 | Solishtirish |
Case Else | Qolgan hamma holat |
Select Case satrlar bilan ham ishlaydi:
Module Dastur
Sub Main()
Dim buyruq As String = "saqlash"
Select Case buyruq.ToLower()
Case "ochish"
Console.WriteLine("Fayl ochilmoqda")
Case "saqlash", "yozish"
Console.WriteLine("Fayl saqlanmoqda")
Case "chiqish"
Console.WriteLine("Dastur yopilmoqda")
Case Else
Console.WriteLine("Noma'lum buyruq")
End Select
End Sub
End Module
Fayl saqlanmoqda
Bitta o'zgaruvchi ko'p qiymat bilan solishtirilsa - Select Case.
Shartlar turli o'zgaruvchilarga tegishli bo'lsa yoki murakkab
mantiq bo'lsa - If.
Uch-to'rtta ElseIf yozayotgan bo'lsangiz, Select Case ni
o'ylab ko'ring.
If() uchlik operatori #
Qisqa tanlov uchun If ni funksiya shaklida ishlatish mumkin:
Module Dastur
Sub Main()
Dim yosh As Integer = 15
Dim holat As String = If(yosh >= 18, "katta", "kichik")
Console.WriteLine(holat)
Dim a As Integer = 7
Dim b As Integer = 12
Console.WriteLine(If(a > b, a, b))
End Sub
End Module
kichik
12
If() ikkita argument bilan #
Ikkita argument berilsa, u boshqacha ishlaydi: birinchisi Nothing
bo'lsa, ikkinchisini qaytaradi.
Module Dastur
Sub Main()
Dim kiritilgan As String = Nothing
Dim korsatiladigan As String = If(kiritilgan, "noma'lum")
Console.WriteLine(korsatiladigan)
Dim bor As String = "Malika"
Console.WriteLine(If(bor, "noma'lum"))
End Sub
End Module
noma'lum
Malika
Bu qulay qisqartma: "qiymat bo'lsa o'zini, bo'lmasa zaxirani ol".
IIf - eski va xavfli #
VB6 davridan qolgan IIf funksiyasi ham bor va u o'xshash ko'rinadi.
Lekin ular bir xil emas:
Module Dastur
Function Hisobla(nom As String, qiymat As Integer) As Integer
Console.WriteLine($" {nom} hisoblandi")
Return qiymat
End Function
Sub Main()
Console.WriteLine("If() bilan:")
Dim a As Integer = If(True, Hisobla("birinchi", 1),
Hisobla("ikkinchi", 2))
Console.WriteLine("IIf() bilan:")
Dim b As Integer = CInt(IIf(True, Hisobla("birinchi", 1),
Hisobla("ikkinchi", 2)))
Console.WriteLine($"Natijalar: {a}, {b}")
End Sub
End Module
If() bilan:
birinchi hisoblandi
IIf() bilan:
birinchi hisoblandi
ikkinchi hisoblandi
Natijalar: 1, 1
Farq aniq ko'rinib turibdi: If() faqat kerakli tarmoqni
hisobladi, IIf esa ikkalasini ham.
IIf - oddiy funksiya, shuning uchun argumentlari chaqiruvdan
oldin hisoblanadi. Bu ikki muammoni keltiradi:
- Keraksiz ish bajariladi - sekin.
- Ishlatilmaydigan tarmoq ham bajariladi. Masalan
IIf(bolovchi = 0, 0, jami \ bolovchi)- nolga bo'lish xatosini to'xtata olmaydi, chunki bo'lish baribir hisoblanadi.
If() esa kompilyatorga qurilgan va faqat kerakli tarmoqni
hisoblaydi. Har doim If() ishlating.
Shartlarni birlashtirish #
Module Dastur
Sub Main()
Dim yosh As Integer = 25
Dim stajYil As Integer = 3
Dim haydovchilikGuvohnomasi As Boolean = True
If yosh >= 21 AndAlso stajYil >= 2 AndAlso
haydovchilikGuvohnomasi Then
Console.WriteLine("Ishga qabul qilinadi")
Else
Console.WriteLine("Talablarga javob bermaydi")
End If
End Sub
End Module
Ishga qabul qilinadi
- Ball bo'yicha baho qo'yadigan
Ifyozing (90/70/60 chegaralari). - O'sha mantiqni
Select Casebilan qayta yozing. - Oy raqamiga qarab fasl nomini chiqaring.
Case 1 To 10vaCase Is > 100shakllarini bitta misolda ishlating.If()bilan ikkita sondan kattasini toping.If(qiymat, "zaxira")shakliniNothingbilan sinang.IIfikkala tarmoqni hisoblashini o'z misolingizda ko'rsating.- Nolga bo'lishni
If()bilan xavfsiz qiling. - Yosh va talaba holatiga qarab chegirma hisoblang.
Else Ifdeb yozib ko'ring va xato matnini yozib oling.
Xulosa #
- Shart
If ... Then ... End Ifshaklida yoziladi;ElseIf- bitta so'z. - Bir qatorli
IfdaEnd Ifyozilmaydi. Select Casebitta qiymatni ko'p variant bilan solishtirganda qulayroq.Case 1 To 10,Case Is > 100,Case 1, 2, 3- VB ning kuchli imkoniyatlari.If(shart, a, b)faqat kerakli tarmoqni hisoblaydi.IIfikkala tarmoqni ham hisoblaydi - undan voz keching.If(qiymat, zaxira)- "bo'lmasa buni ol" qisqartmasi.
Keyingi bo'limda sikllarni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.