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.

🕑 12 daqiqa o‘qish 📄 525 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. If ... Then ... End If
  2. Bir qatorli shakl
  3. Ichma-ich shartlar
  4. Select Case
  5. Select Case diapazonlari
  6. If() uchlik operatori
  7. If() ikkita argument bilan
  8. IIf - eski va xavfli
  9. Shartlarni birlashtirish
  10. Xulosa

Shart - dasturga tanlov qo'shadigan narsa. Visual Basic da u deyarli ingliz tilidagidek o'qiladi.

If ... Then ... End If #

VB
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
Natija
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.

ElseIf bitta so'z

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 #

VB
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
Natija
Voyaga yetgan
Katta

Bir qatorli shaklda End If yozilmaydi. Faqat juda qisqa shartlar uchun ishlating - aks holda o'qish qiyinlashadi.

Ichma-ich shartlar #

VB
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
Natija
Talaba chegirmasi: 50%

Select Case #

Bitta qiymat ko'p variant bilan solishtirilsa, Select Case ancha toza ko'rinadi:

VB
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
Natija
Dam olish kuni

Select Case diapazonlari #

Bu Visual Basic ning kuchli tomoni - ko'p tillarda bunday imkoniyat yo'q:

VB
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
Natija
Issiq
ShaklMa'nosi
Case 5Aynan teng
Case 1, 2, 3Sanoqdagilardan biri
Case 1 To 10Diapazon (chegaralar ham kiradi)
Case Is > 100Solishtirish
Case ElseQolgan hamma holat

Select Case satrlar bilan ham ishlaydi:

VB
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
Natija
Fayl saqlanmoqda
Qachon If, qachon Select Case

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:

VB
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
Natija
kichik
12

If() ikkita argument bilan #

Ikkita argument berilsa, u boshqacha ishlaydi: birinchisi Nothing bo'lsa, ikkinchisini qaytaradi.

VB
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
Natija
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:

VB
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
Natija
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 ni ishlatmang

IIf - oddiy funksiya, shuning uchun argumentlari chaqiruvdan oldin hisoblanadi. Bu ikki muammoni keltiradi:

  1. Keraksiz ish bajariladi - sekin.
  2. 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 #

VB
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
Natija
Ishga qabul qilinadi
Amaliy topshiriq
  1. Ball bo'yicha baho qo'yadigan If yozing (90/70/60 chegaralari).
  2. O'sha mantiqni Select Case bilan qayta yozing.
  3. Oy raqamiga qarab fasl nomini chiqaring.
  4. Case 1 To 10 va Case Is > 100 shakllarini bitta misolda ishlating.
  5. If() bilan ikkita sondan kattasini toping.
  6. If(qiymat, "zaxira") shaklini Nothing bilan sinang.
  7. IIf ikkala tarmoqni hisoblashini o'z misolingizda ko'rsating.
  8. Nolga bo'lishni If() bilan xavfsiz qiling.
  9. Yosh va talaba holatiga qarab chegirma hisoblang.
  10. Else If deb yozib ko'ring va xato matnini yozib oling.

Xulosa #

  • Shart If ... Then ... End If shaklida yoziladi; ElseIf - bitta so'z.
  • Bir qatorli If da End If yozilmaydi.
  • Select Case bitta 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.
  • IIf ikkala tarmoqni ham hisoblaydi - undan voz keching.
  • If(qiymat, zaxira) - "bo'lmasa buni ol" qisqartmasi.

Keyingi bo'limda sikllarni o'rganamiz.

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.