ՍԽԱԼՆԵՐԻ ՀԱՅՏՆԱԲԵՐՈՒՄԸ և ՄՇԱԿՈՒՄԸ VISUAL BASIC-ՈւՄ
Սխալների տեսակները
Ծրագրի աշխատանքի ժամանակ կարող են առաջանալ 4 տեսակի սխալներ`
Սինտակսիսային սխալ,
Ծրագրի կառուցվածքային սխալ,
Սխալներ, որոնք առաջանում են ծրագրի կատարման ժամանակ,
Տրամաբանական սխալներ:
Սինտակսիսային սխալների առաջացման ժամանակ արդյունք կարող են լինել բանալիային բառերի սխալ գրումը կամ օպերատորների անթույլատրելի կոմբինացիաների օգտագործումը: Visual Basic-ը սինտակսիսային սխալները ճանաչում է անմիջապես, հենց կուրսորը հեռացվում է ընթացիկ տողից: Սխալի հայտնաբերման դեպքում Visual Basic-ը տալիս է համապատասխան հաղորդագրություն` սխալի վերաբերյալ:
Սխալների մշակումը
Կախված նրանից, թե որքան մանրակրկտորեն է մշակված և կազմված ծրագիրը, երբեք պետք չէ լիովին հերքել սխալների առաջացման հնարավորությունը: Այդ պատճառով ծրագրերը գրելիս պետք է մշակել չմշակվող սխալների առաջացումը: Հրամանը ,որն օգտագործվում է կոնկրետ պրոցեդուրայում դրանց հայտնաբերման համար, ունի հետևյալ տեսքը`
On Error GoTo …
Որտեղ …-ը նշիչի անվան համար է (տողի համարն է), որով նշվում է սխալի մշակման համար ընտրված ֆրագմենտի սկիզբը: Նշված ֆրագմենտը պետք է տեղավորվի այդ իսկ պրոցեդուրայի սահմաններում: Հնարավոր չէ On Error GoTo օպերատրով անցնել մեկ այլ պրոցեդուրայի: On Error օպերատորն ինքը սխալների մշակում չի կատարում, այլ կառավարումը հանձնում է այն պրոցեդուրային, որը նախատեսված է սխալները մշակելու համար (անմիջապես սխալի հայտնաբերումից հետո): Սխալի հայտնաբերման համար նշիչը իդենտիֆիկատnր է, որի վերջում դրվում է երկու կետ: Այսպիսով, նշիչը նշում է ծրագրի ֆրագմենտի սկիզբը: Օրինակ`
Error Trap:
‘հետևում է ծրագրի կոդը
Դիտարկենք սխալի մշակման մի փոքր պրոցեդուրա.
Private Sub Command1_Click()
If Err.Number 0 Then Err.Clear
On Error GoTo err_
Err.Raise (9)
Exit Sub
err_:
MsgBox Err.Number
MsgBox Err.Description
Err.Clear
Resume Next
End Sub
Քանի որ հնարավոր է` ծրագիրը կախվի (վերջանա) սխալի մշակման պրոցեդուրայում, վատ միտք չէ Exit օպերատորի օգտագործումը տողում` անմիջապես սխալի հայտնաբերման ֆրագմենտի նշիչից առաջ:
On Error GoTo հրամանը կարող է տեղակայվել իրավիճակի մշակման պրոցեդուրայի, ֆունկցիայի կամ Sub պրոցեդուրայի ցանկացած մասում: Ընդհանրապես հենց այդտեղ էլ տեղակայվում է սխալների մշակման ծրագրային կոդը: Միակ բացառող դեպքն այն է, երբ պրոցեդուրան կանչվում է այլ պրոցեդուրայի մեջ: Այդ դեպքում Visual Basic-ը ստուգում է սխալների մշակման ֆրագմենտի առկայությունը սկզբից` ընթացիկ պրոցեդուրայում, հետո` երկրորդական պրոցեդուրայում:
On Error GoTo-ն օգտագործելով` ծրագրի կատարման ժամանակ սխալներն անհետանում են: Սակայն այն պետք է օգտագործել այնպես, ղեկավարի կոդի տարածքը, որը իդենտիֆիկացնում է խնդիրը, և հնարավոր է` լուծում է այն:
Եթե սխալը հնարավոր է ճշտել, ապա Resume օպերատորն օգտագործվում է ծրագրում այն տեղին վերադառնալու համար, որտեղ այն տեղի է ունեցել: Սակայն հնարավոր չէ սխալը ճշտել, եթե հայտնի չէ դրա առաջացման պատճառը: Դա կարելի է իմանալ` օգտագործելով Err ֆունկցիան և Err օբյեկտը: Այն իրենից ներկայացնում է ամբողջ արժեք, որը կարելի է ընդունել որպես փոփոխական: Օրինակ, եթե գրենք`
Error Number = Err.Number
ապա Error Number փոփոխականի արժեքը կլինի սխալի համարը:
Visual Basic-ը կարող է իդենտիֆիկացնել 80-ից ավելի սխալներ` կատարման ժամանակ:
Այժմ նկարագրենք Select Case-ը:
Select Case
Յուրաքանչյուր առանձին դեպքում ծրագիրը ստուգում է սխալի տիպը և առաջարկում է դրա ուղղման հնարավոր ձևերը: Case Else-ի օգտագործման դեպքում էկրանին հայտնվում է սխալի համարը: Ամեն դեպքում սխալների մշակման ցիկլից հետո օգտվողին առաջարկվում է ընտրության հնարավորություն` ինֆորմացիոն պանելի օգնությամբ:
Resume հրամանը թույլ է տալիս բաց թողնել օպերատորը, որում առաջացել է սխալը:Եթե օգտագործել
Resume Next
Visual Basic-ը կսկսի մշակել օպերատոր, որը գտնվում է անմիջապես ընթացիկ օպերատորից հետո: Կարելի է օգտագործել նաև
On Error Resume Next
Ցանկացած ծրագրային կոդի ավտոմատ թույլատրման (կատարման) համար, որը առաջացնում է սխալը:
Հետևությունն այն է, որ ծրագիրը միշտ չէ պետք ընդհատել` սխալի պատճառով: Այս օպերատորը հենց դրա համար է` Resume Next: Այն ունի մեկ սկզբունք` որ մի քայլ ետ: Կատարումը կշարունակվի` չնայած սխալի առկայությանը:
Բացի այդ, կարելի է վերսկսել ծրագրի աշխատանքը կոդի ցանկացած տողից, որի վրա նշիչ է դրված: Դրա համար օգտագործվում է հետևյալ օպերատորը`
Resume Label
Հիմնականում Visual Basic-ում նշիչներն օգտագործվում են միայն սխալների մշակման ֆրագմենտների նշման համար: Չնայած դրան` Basic-ի նախկին վերսիաների հետ համատեղելիության համար Visual Basic-ում ներառված է GoTo անպայման անցման օպերատորը, սակայն դրա կարիքը հազվադեպ է զգացվում:
Resume և Resume Next հրամաններն իրենց տարբեր ձևով են պահում վերադարձի ժամանակ այն դեպքում, երբ սխալը կատարվել է այլ պրոցեդուրայում:
Visual Basic-ն ունի օպերատոր`
Error (սխալի կոդի համարը)
Որը Visual Basic-ին ստիպում է աշխատել այնպես, իբրև կատարվել է սխալ` ցույց տրված համարով:
Եթե ծրագրավորողը համոզված է, որ ծրագիրն այլևս սխալների վերամշակման կարիք չունի, նա կարող է անջատել “սխալ մշակող”-ին հետևյալ օպերատրի միջոցով`
On Error GoTo 0
(չնայած 0-ն հիմնականում կարիք չկա գրել):
Visual Basic-ն օգտագործում է On Error GoTo-ն որպեսզի որոշի` որտեղից պետք է շարունակել:
Visual Basic-ի օբյեկտ Err-ը հատուկ օբյեկտ է, որի հատկությունները կարելի է ուսումնասիրել սխալի առաջացումից հետո: Արդեն նշվել է, թե ինչպես է աշխատում դրա Number հատկությունը (Err.Number):
Microsoft-ը խորհուրդ է տալիս օգտագործել Err օբյեկտի հատկություններն ու մեթոդները սխալների վերամշակման այլ տիպի ֆունկցիաների փոխարեն` բացի այն ծրագրերից, որոնք գրված են լեզվի վաղ վերսիաների համար:
Եթե անհրաժեշտ է գեներացնել սխալը թեսթային նպատակներով, կարելի է օգտագործել Err օբյեկտի Raise մեթոդը: Դրա սինտաքսիսը հետևյալն է `
Err. Raise(համար)
Եթե անհրաժեշտ է մուտքագրել ընթացիկ սխալի նկարագրությունը, օգտագործվում է հետևյալ օպերատորը`
Err.Description
Raise մեթոդը կարելի է օգտագործել` սխալների սեփական տիպերի որոշման համար:
ԽՆԴԻՐ
Կազմել ծրագիր, որում Command 1–ի միջոցով մուտքագրվեն բաժանելին և բաժանարարը, Command 2-ի միջոցով կատարվի մուտքագրված թվերի բաժանում, և արդյունքը գրվի Text 1–ում:
Dim A As Double
Dim B As Double
Private Sub Command1_Click()
A = InputBox("Enter bajaneli", "bajaneli")
B = InputBox("Enter Bajanarar", "Bajanarar")
End Sub
Private Sub Command2_Click()
Text1.Text = Division(A, B)
End Sub
Private Sub Form_Load()
Form1.Caption = "Division"
Label1.Caption = " Ardyunq"
Text1.Text = " ardyunq "
Command1.Caption = "Enter"
Command2.Caption = "Division"
End Sub
Private Function Division(X As Double, Y As Double)
Dim N As String
Dim M As String
On Error Resume Next
Division = X / Y
If Err.Number 0 Then
N = MsgBox("Error! Bajanarary mutqagreq 0-yic tarber tiv")
M = MsgBox("Sxali hamarn e " & Err.Number, vbOKOnly, "Error " & Err.Number & " !")
End If
On Error GoTo 0
End Function
Խնդրի բացատրությունը
Դեպք 1: Եթե բաժանելին 0 է, բաժանում չի կատարում և էկրանին է բերում MsgBox` բաժանարարը մուտքագրել 0-յից տարբեր թիվ (սխալ №11):
Դեպք 2: Եթե բաժանելին 0-յից տարբեր թիվ է, “Division” կոճակով կատարում է բաժանում` առանց որևէ սխալի հայտնաբերման:
8