Theory
Till की पहली Conversation
ShopKeeper के buttons बनने से पहले, Mehta Uncle चाहते हैं logic काम करने का proof: एक quick program जो prices एक-एक करके पूछे, एक blank entry पर रुके, और total एक comment के साथ दिखाए: छोटा bill, normal, या बड़ा।
उस एक errand को इस lesson की हर चीज़ चाहिए: एक loop जो कम-से-कम एक बार ज़रूर चले, ranges वाला एक decision (0, 500 तक, 500 से ऊपर), और बात करने के लिए 2 छोटे dialog boxes। यह सब VB.NET की block-shaped grammar में।
Formula
Decision Syntaxes, Exam Form में
If block (Then नोटिस कीजिए, और closing End If):
If total > 500 Then
...
ElseIf total > 0 Then
...
Else
...
End If
Select Case (कहीं भी break नहीं, कोई fall-through नहीं):
Select Case total
Case 0 : ...
Case 1 To 500 : ...
Case Is > 500 : ...
Case Else : ...
End Select
Theory
Select Case, Java के switch से आगे
BCA403 का rule याद है: switch सिर्फ़ single constant values match करता था; ranges के लिए आपको if-else पर वापस जाना पड़ता था। VB.NET के Select Case में ऐसी कोई फ़ेंस नहीं है:
Case 1 To 500: एक पूरी rangeCase Is > 500: एक comparisonCase 1, 3, 5: values की एक list
और 2 relief: हर Case वहीं खत्म होता है जहाँ अगला शुरू होता है (कोई fall-through नहीं, तो कोई break भूलने का सवाल ही नहीं), और Case Else बाकी सब catch करता है। जब एक variable कई तरह के tests face करता है, Select Case उसी price list की तरह पढ़ता है जिसे यह implement करता है।
At a glance
चार Loop Shapes
| Loop | Check कब | कम-से-कम कितनी बार चलता है | Shape |
|---|---|---|---|
| For ... To ... [Step] | हर pass से पहले | 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 | बाद में (AFTER) | 1 बार | Do ... Loop While again = "y" |
Practical
Quick Total, Start से Finish तक
Module QuickTotal
Sub Main()
Dim total As Double = 0
Dim entry As String
Do ' post-test: ask at least once
entry = InputBox("Price (leave blank to finish):")
If entry <> "" Then
total += CDbl(entry) ' InputBox returns a 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 appear होते हैं?
- 10, 10 से 1 तक counting down करते हुए
- कोई नहीं: default Step +1 होने से, 10 पहले ही 1 से आगे है, तो body कभी नहीं चलता
- 1: यह 10 दिखाता है और रुक जाता है
- Infinite: loop कभी 1 तक नहीं पहुँचता
Show the answer
कोई नहीं: default Step +1 होने से, 10 पहले ही 1 से आगे है, तो body कभी नहीं चलता
एक For loop बताया न जाए तो +1 से step करता है, और इसका pre-test पूछता है: क्या counter अभी भी end value की तरफ़ जाने के रास्ते पर है? 10 से शुरू होकर UP जाते हुए, यह कभी 1 तक नहीं पहुँच सकता, तो test तुरंत fail हो जाता है और body ज़ीरो बार चलता है: कोई error नहीं, कोई warning नहीं, बस silence। Counting down के लिए explicit Step -1 चाहिए: For i = 10 To 1 Step -1। Option A वह है जो code DEKHNE में करता लगता है; options C और D ऐसे behaviours invent करते हैं जिन्हें pre-test rule out करता है। इस तरह के silent empty loops spot-the-bug snippets के favourite होते हैं।
Think first
Do ... Loop While ही क्यों, Specifically?
Quick total post-test loop इस्तेमाल करता है। BCA403 के chai-serving hosts याद कीजिए, फिर justify कीजिए: यह loop अपनी condition को नीचे (bottom) पर ही क्यों check करना चाहिए?
Show the answer
क्योंकि पहला question हमेशा पूछा ही जाना चाहिए: आप बिना InputBox कम-से-कम एक बार दिखाए यह नहीं जान सकते कि entry blank है या नहीं। एक pre-test loop (Do While entry <> "") entry के exist करने से पहले ही इसे test कर देता। Post-test = BCA403 का वह confident host जो do-while से था: पहले act कीजिए, बाद में check कीजिए। VB.NET की spelling है Do ... Loop While (या Loop Until, वही idea condition inverted के साथ: Loop Until entry = "")। वही concept, नई grammar, लगातार तीसरी language: menus और prompts हमेशा body-first loop चाहते हैं।
Watch out
Dialog Pair की Fine Print
InputBox हमेशा एक String return करता है: "350" तब तक text है जब तक CDbl/CInt इसे convert न करे, और unconverted entries पर arithmetic जब Option Strict off हो तो add करने के बजाय concatenate करता है: "1" & typing errors "150" वाले bills बना देते हैं।
Cancel एक empty string return करता है: आपके loop को "" को exit signal की तरह treat करना ज़रूरी है (हमारा करता है), वरना Cancel, CDbl को crash कर देता है।
MsgBox messages के लिए है, layout के लिए नहीं: असली screens Unit 3 के controls से आते हैं; MsgBox developer की quick voice है।
Theory
Logic Buttons के लिए Ready है
जो कुछ भी till को SOCHNE के लिए चाहिए वह अब लिखा जा चुका है: decide कीजिए (If, Select Case जिसमें ranges हैं जो Java के पास कभी नहीं थीं), repeat कीजिए (4 loop shapes; early exits के लिए Exit For / Exit Do), और बात कीजिए (MsgBox बाहर, InputBox अंदर)। Unit 3 InputBox वाली conversation को एक असली form से replace करती है: price के लिए TextBox, add के लिए Button, bill के लिए DataGrid, और आज के Select का हर Case screen पर एक label बन जाता है। Brain ready है; अगला हम face बनाते हैं।
Summary
Key takeaways
- If ... Then ... ElseIf ... Else ... End If: block decisions, explicitly बंद होते हुए।
- Select Case Java के switch से आगे जाता है: ranges (1 To 500), comparisons (Is > 500), lists (1, 3, 5), Case Else, और कोई fall-through या break नहीं।
- चार loops: For/Next (default Step +1), While/End While, Do While/Until...Loop (pre-test), Do...Loop While/Until (post-test, कम-से-कम एक बार चलता है)।
- For 10 To 1 बिना Step -1 के silently zero बार चलता है।
- MsgBox दिखाता है; InputBox पूछता है और एक STRING return करता है (Cancel पर empty): CDbl/CInt से convert कीजिए।
- Exit For और Exit Do जल्दी loop से बाहर निकलते हैं।
- Memory hook: Select Case ranges लेता है, Do...Loop बाद में पूछता है, InputBox सिर्फ़ String बोलता है।