Theory
ગલ્લાની પહેલી વાતચીત
ShopKeeper માં buttons આવે એ પહેલાં મહેતા કાકાને એની ખાતરી જોઈએ છે કે logic કામ કરે છે: એક ઝડપી program જે એક પછી એક ભાવ પૂછે, ખાલી entry આવે ત્યાં અટકે, અને કુલ રકમ સાથે ટિપ્પણી પણ બતાવે: નાનું બિલ, સામાન્ય, કે મોટું.
એ એક જ કામને આ પાઠમાંનું બધું જ જોઈએ છે: એવો loop જે ઓછામાં ઓછો એક વાર ચાલવો જ જોઈએ, એવો નિર્ણય જે ranges સંભાળે (0, 500 સુધી, 500 થી ઉપર), અને વાત કરવા માટે 2 નાનકડાં dialog boxes. અને એ બધું VB.NET ના ખંડ જેવા ઘાટવાળા વ્યાકરણમાં.
Formula
નિર્ણયના syntax, પરીક્ષાના રૂપમાં
If નો ખંડ (Then અને છેડે આવતું End If ધ્યાનમાં રાખો):
If total > 500 Then
...
ElseIf total > 0 Then
...
Else
...
End If
Select Case (ક્યાંય break નહીં, અને એક case માંથી બીજામાં સરકી પડવાનું પણ નહીં):
Select Case total
Case 0 : ...
Case 1 To 500 : ...
Case Is > 500 : ...
Case Else : ...
End Select
Theory
Select Case, Java ના switch કરતાં આગળ
BCA403 નો નિયમ યાદ કરો: switch ફક્ત એક એક અચળ કિંમત સાથે જ મેળ કરતું હતું; ranges આવે એટલે તમારે પાછા if-else પર જવું પડતું. VB.NET ના Select Case ને એવી કોઈ વાડ નથી:
Case 1 To 500: આખો rangeCase Is > 500: સરખામણીCase 1, 3, 5: કિંમતોની યાદી
અને બે રાહત પણ: દરેક Case ત્યાં જ પૂરો થાય છે જ્યાં પછીનો શરૂ થાય છે (એક માંથી બીજામાં સરકી પડવાનું નહીં, એટલે ભૂલી જવાય એવો કોઈ break જ નથી), અને Case Else બાકીનું બધું ઝીલી લે છે. જ્યારે એક જ variable ને અનેક પ્રકારની કસોટીઓ સામે મૂકવો પડે, ત્યારે Select Case એ ભાવપત્રક જેવું જ વંચાય છે જેને એ અમલમાં મૂકે છે.
At a glance
Loops ના 4 ઘાટ
| Loop | ક્યારે તપાસે | ઓછામાં ઓછું કેટલી વાર ચાલે | ઘાટ |
|---|---|---|---|
| For ... To ... [Step] | દરેક આંટા પહેલાં | 0 વાર | For i = 1 To 10 ... Next |
| While ... End While | પહેલાં | 0 વાર | While qty > 0 ... End While |
| Do While/Until ... Loop | પહેલાં | 0 વાર | Do While entry <> "" ... Loop |
| Do ... Loop While/Until | પછી | 1 વાર | Do ... Loop While again = "y" |
Practical
ઝડપી સરવાળો, શરૂઆતથી અંત સુધી
Module QuickTotal
Sub Main()
Dim total As Double = 0
Dim entry As String
Do ' પછી તપાસ: ઓછામાં ઓછું એક વાર પૂછો
entry = InputBox("Price (leave blank to finish):")
If entry <> "" Then
total += CDbl(entry) ' InputBox STRING પાછું આપે છે
End If
Loop While entry <> ""
Select Case total
Case 0
MsgBox("Empty bill")
Case 1 To 500
MsgBox("Total: " & total)
Case Is > 500
MsgBox("Big bill today: " & total)
End Select
End Sub
End Module
Quiz
For i As Integer = 10 To 1 : MsgBox(i) : Next કેટલાં boxes દેખાશે?
- 10, એટલે કે 10 થી 1 સુધી ઊતરતાં
- એકેય નહીં: મૂળભૂત Step +1 હોવાથી 10 તો 1 ને ક્યારનું વટાવી ચૂક્યું છે, એટલે અંદરનો ભાગ ક્યારેય ચાલતો જ નથી
- 1: એ 10 બતાવીને અટકી જાય છે
- અનંત: loop ક્યારેય 1 સુધી પહોંચતું જ નથી
Show the answer
એકેય નહીં: મૂળભૂત Step +1 હોવાથી 10 તો 1 ને ક્યારનું વટાવી ચૂક્યું છે, એટલે અંદરનો ભાગ ક્યારેય ચાલતો જ નથી
તમે જુદું ન કહો ત્યાં સુધી For loop +1 ના પગલે આગળ વધે છે, અને એની આગોતરી તપાસ પૂછે છે: counter હજી અંતિમ કિંમત તરફના રસ્તા પર છે ખરો? 10 થી શરૂ થઈને ઉપર તરફ જતાં 1 સુધી ક્યારેય પહોંચાય જ નહીં, એટલે તપાસ પહેલી જ વારમાં નિષ્ફળ જાય છે અને અંદરનો ભાગ શૂન્ય વાર ચાલે છે: ન ભૂલ, ન ચેતવણી, ફક્ત ચુપકીદી. ઊતરતા ક્રમમાં ગણવા માટે સ્પષ્ટ Step -1 જોઈએ: For i = 10 To 1 Step -1. વિકલ્પ A એ છે જે જોઈને લાગે કે code આમ કરતો હશે; વિકલ્પ C અને D એવાં વર્તન કલ્પે છે જેને આગોતરી તપાસ નકારી કાઢે છે. આવા ચૂપચાપ ખાલી રહી જતા loops પરીક્ષામાં ભૂલ શોધવાના પ્રિય ટુકડા છે.
Think first
ખાસ Do ... Loop While જ શા માટે?
ઝડપી સરવાળો પછી તપાસ કરતો loop વાપરે છે. BCA403 ના ચા પીરસતા યજમાનો યાદ કરો, અને પછી કારણ આપો: આ loop એ પોતાની શરત છેક નીચે જ શા માટે તપાસવી જોઈએ?
Show the answer
કારણ કે પહેલો પ્રશ્ન તો હંમેશાં પુછાવો જ જોઈએ: InputBox ને ઓછામાં ઓછું એક વાર બતાવ્યા વગર entry ખાલી છે કે નહીં એ તમે જાણી જ ન શકો. પહેલાં તપાસતો loop (Do While entry <> "") તો entry અસ્તિત્વમાં આવે એ પહેલાં જ એને તપાસવા બેસી જાત. પછી તપાસવું એટલે BCA403 ના do-while વાળો આત્મવિશ્વાસુ યજમાન: પહેલાં પીરસો, પછી પૂછો.
VB.NET માં એની જોડણી Do ... Loop While છે (અથવા Loop Until, એ જ વિચાર પણ શરત ઊલટાવીને: Loop Until entry = ""). એ જ ખ્યાલ, નવું વ્યાકરણ, અને સળંગ ત્રીજી ભાષા: menus અને પ્રશ્નોને હંમેશાં પહેલાં ચાલતા અને પછી તપાસતા loop ની જ જરૂર પડે છે.
Watch out
આ dialog ની જોડીની ઝીણી શરતો
InputBox હંમેશાં String પાછું આપે છે: CDbl કે CInt એને બદલે નહીં ત્યાં સુધી "350" એ લખાણ જ છે, અને Option Strict બંધ હોય ત્યારે નહીં બદલાયેલી entries પર ગણિત સરવાળો કરવાને બદલે જોડાણ કરી બેસે છે: "1" અને "50" ભેગાં થઈને "150" જેવાં ખોટાં બિલ બનાવે છે.
Cancel દબાવો તો ખાલી string પાછું આવે છે: તમારા loop એ "" ને બહાર નીકળવાના સંકેત તરીકે ગણવું જ જોઈએ (આપણો loop એમ કરે છે), નહીં તો Cancel દબાવતાં CDbl તૂટી પડે છે.
MsgBox સંદેશા માટે છે, ગોઠવણી માટે નહીં: ખરેખરા પડદા તો Unit 3 નાં controls માંથી આવે છે; MsgBox એ તો developer નો ઝડપી અવાજ છે.
Theory
Logic હવે buttons માટે તૈયાર છે
ગલ્લાને વિચારવા માટે જે જોઈએ એ બધું હવે લખાઈ ગયું છે: નક્કી કરવું (If, અને ranges વાળું Select Case જે Java પાસે ક્યારેય નહોતું), પુનરાવર્તન કરવું (loops ના 4 ઘાટ; વહેલા નીકળી જવા માટે Exit For અને Exit Do), અને વાત કરવી (બહાર MsgBox, અંદર InputBox). Unit 3 આ InputBox વાળી વાતચીતની જગ્યાએ ખરેખરું form મૂકે છે: ભાવ માટે TextBox, ઉમેરવા માટે Button, બિલ માટે DataGrid, અને આજના Select નો દરેક Case પડદા પરનું એક label બની જાય છે. મગજ તૈયાર થઈ ગયું; હવે પછી આપણે ચહેરો બનાવીશું.
Summary
Key takeaways
- If ... Then ... ElseIf ... Else ... End If: ખંડ સ્વરૂપના નિર્ણયો, જે સ્પષ્ટપણે બંધ કરાય છે.
- Select Case Java ના switch ને હરાવે છે: ranges (1 To 500), સરખામણી (Is > 500), યાદીઓ (1, 3, 5), Case Else, અને એક case માંથી બીજામાં સરકવાનું કે break બિલકુલ નહીં.
- ચાર loops: For/Next (મૂળભૂત Step +1), While/End While, Do While/Until...Loop (પહેલાં તપાસ), Do...Loop While/Until (પછી તપાસ, ઓછામાં ઓછું એક વાર ચાલે).
- Step -1 વગરનું For 10 To 1 ચૂપચાપ શૂન્ય વાર ચાલે છે.
- MsgBox બતાવે છે; InputBox પૂછે છે અને STRING પાછું આપે છે (Cancel પર ખાલી): એને CDbl કે CInt વડે બદલો.
- Exit For અને Exit Do loop માંથી વહેલા બહાર કાઢી દે છે.
- યાદ રાખવાની કડી: Select Case ranges લે છે, Do...Loop પછી પૂછે છે, અને InputBox ફક્ત String જ બોલે છે.