Cùng nắm kiến thức trong chương này thông qua việc tìm hiểu các nội dung sau: Tổng quát về ngôn ngữ VB, các lệnh gán, các lệnh kiểm tra điều kiện và rẽ nhánh, các lệnh lặp, vấn đề lồng nhau giữa các lệnh, thoát đột ngột khỏi khỏi cấp điều khiển, lệnh gọi hàm/thủ tục.
Trang 28.1 T ổ ng quát v ề các l ệ nh th ự c thi VB
Ta đã biết giải thuật để giải quyết 1 vấn đề nào đó là trình tự các công việc
nhỏ hơn, nếu ta thực hiện đúng trình tự các công việc nhỏ hơn này thì sẽ
giải quyết được vấn đề lớn
VB (hay ngôn ngữ lập trình khác) cung cấp 1 tập các lệnh thực thi, mỗi
lệnh thực thi được dùng để miêu tả 1 công việc nhỏ trong 1 giải thuật với ý
tưởng chung như sau:
Nếu tồn tại lệnh thực thi miêu tả được công việc nhỏ của giải thuật thì
ta dùng lệnh thực thi này
Nếu công việc nhỏ vẫn còn quá phức tạp và không có lệnh thực thi nào miêu tả được thì ta dùng lệnh gọi thủ tục (Function, Sub, Property) trong đó thủ tục là trình tự các lệnh thực hiện công việc nhỏ này
Hầu hết các lệnh thực thi có chứa biểu thức và dùng kết quả của biểu
thức này để quyết định công việc kế tiếp cần được thực hiện ⇒ ta thường
gọi các lệnh thực thi là các cấu trúc điều khiển
Trang 3o Lệnh kiểm tra điều kiện luận lý If Then Else
o Lệnh kiểm tra điều kiện số học Select Case
Trang 48.2 L ệ nh gán d ữ li ệ u
Cú pháp:
lvar = expr
sau)
Trang 5L ệ nh gán tham kh ả o đế n đố i t ượ ng
Cú pháp:
Set lvar = expr
sau)
Set objClipbd = New Clipboard
Trang 68.3 L ệ nh ki ể m tra đ i ề u ki ệ n lu ậ n lý IF
khác nhau:
Cú pháp 1a:
If condition Then Statement1 [Else Statement2 ]
condition là 1 biểu thức luận lý miêu tả điều kiện cần kiểm tra, nó có kết
Statement1, Statement2 là lệnh thực thi VB bất kỳ
Ví d ụ :
If blnThaybenh Then MsgBox("Th ầ y b ệ nh Sinh viên v ề ngh ỉ ")
Trang 7[Statement]+ là danh sách các lệnh thực thi VB bất kỳ
False thi thôi
Trang 8[Statement1]+, [Statement2]+ là danh sách các lệnh thực thi VB bất kỳ
Trang 9Ví dụ:
If del >=0 Then
x1 = (-b-sqr(del))/(2*a) x2 = (-b+sqr(del))/(2*a) MsgBox("x1= " & x1 & " ,x2= " & x2) Else
Trang 10[Statement1]+, [Statement2]+ là danh sách các lệnh thực thi VB bất kỳ
Trang 11Thí d ụ sau là l ệ nh Select ph ụ c v ụ vi ệ c th ự c hi ệ n 1 nút l ệ nh trong trình
dblDispValue = dblOldValue * dblDispValue
txtDisplay.Text = Str(dblDispValue)
dblDispValue = dblOldValue / dblDispValue
txtDisplay.Text = Str(dblDispValue)
End Select
L ệ nh ki ể m tra đ i ề u ki ệ n s ố h ọ c Select (tt)
Trang 12VB còn cung c ấ p 1 l ệ nh khác để ki ể m tra đ i ề u ki ệ n s ố h ọ c, nh ư ng y ế u
h ơ n l ệ nh Select, đ ó là l ệ nh On GoSub (th ự c ra đ ây là l ệ nh c ủ a ngôn ng ữ
Basic nguyên th ủ y, Microsoft th ấ y ch ư a trong sáng nên m ớ i cung c ấ p
thêm l ệ nh Select) Cú pháp nh ư sau:
On condition GoSub label1, label2, label3,
condition là 1 biểu thức số học và nên có giá trị từ 1 tới n, trong đó n là số
L ệ nh ki ể m tra đ i ề u ki ệ n s ố h ọ c On GoSub
Trang 13Đoạn code sau có công dụng như slide thí dụ dùng lệnh Select case (nếu
IDC_ADD = 1, IDC_SUB = 2, IDC_MUL = 3, IDC_DIV = 4):
On bytOperationId GoSub LblAdd, LblSub, LblMul, LblDiv
Trang 141 biến thể khác của On GoSub là On Goto, ở đây điều khiển sẽ không trả lại
On bytOperationId GoTo LblAdd, LblSub, LblMul, LblDiv
Trang 15[Statement]+ là danh sách các lệnh thực thi VB bất kỳ
[Statement]+, rồi lặp lại qui trình trên đến lúc condition có giá trị False thì
Trang 16L ệ nh l ặ p While Wend
VB còn cung c ấ p 1 l ệ nh khác có ch ứ c n ă ng gi ố ng nh ư l ệ nh Do While Loop, cú pháp c ủ a nó nh ư sau:
[Statement]+ là danh sách các lệnh thực thi VB bất kỳ
[Statement]+, rồi lặp lại qui trình trên đến lúc condition có giá trị False thì
Trang 17L ệ nh l ặ p Do Loop (tt)
Cú pháp 2:
Do
[Statement]+
Loop While condition
condition là 1 biểu thức luận lý miêu tả điều kiện cần kiểm tra, nó có kết
[Statement]+ là danh sách các lệnh thực thi VB bất kỳ
Trang 18Loop Until condition
condition là 1 biểu thức luận lý miêu tả điều kiện cần kiểm tra, nó có kết
Trang 19counter là biến điều khiển số lần lặp, start là biểu thức qui định giá trị đầu
[Statement]+ là danh sách các lệnh thực thi VB bất kỳ
Trang 20group là 1 collection các đối tượng hay 1 dãy các phần tử element là biến
Trang 218.5 Các l ệ nh l ồ ng nhau
Nh ư ta đ ã th ấ y trong cú pháp c ủ a h ầ u h ế t các l ệ nh VB đề u có ch ứ a thành ph ầ n Statement, đ ây là 1 l ệ nh th ự c thi VB b ấ t k ỳ ⇒ ta g ọ i cú pháp đị nh ngh ĩ a l ệ nh VB là đệ qui ⇒ t ạ o ra các l ệ nh VB l ồ ng nhau Ta
g ọ i c ấ p ngoài cùng là c ấ p 1, các l ệ nh hi ệ n di ệ n trong cú pháp c ủ a l ệ nh
c ấ p 1 đượ c g ọ i là l ệ nh c ấ p 2, các l ệ nh hi ệ n di ệ n trong cú pháp c ủ a
l ệ nh c ấ p 2 đượ c g ọ i là l ệ nh c ấ p 3, Để d ễ đọ c, các l ệ nh c ấ p th ứ i nên dóng hàng nh ờ n ký t ự Tab
Ví d ụ : đ o ạ n ch ươ ng trình tính ma tr ậ n t ổ ng c ủ a 2 ma tr ậ n
Dim A(N,N) As Double, B(N,N) As Double
Dim C(N,N) As Double
For i = 1 to n ' duy ệ t theo hàng
For j = 1 to n ' duy ệ t theo c ộ t
C(i,j) = A(i,j) + B(i,j)
Next j
Next i
Trang 228.6 V ấ n đề thoát độ t ng ộ t kh ỏ i c ấ p đ i ề u khi ể n
Nh ư ta đ ã th ấ y trong cú pháp c ủ a h ầ u h ế t các l ệ nh VB đề u có ch ứ a thành ph ầ n [Statement]+ Theo trình t ự thi hành thông th ườ ng, các
l ệ nh bên trong này s ẽ đượ c th ự c thi tu ầ n t ự , h ế t l ệ nh này đế n l ệ nh khác cho đế n l ệ nh cu ố i, lúc này thì vi ệ c thi hành l ệ nh cha m ớ i có th ể
k ế t thúc Tuy nhiên trong 1 vài tr ạ ng thái thi hành đặ c bi ệ t, ta mu ố n thoát ra kh ỏ i l ệ nh cha độ t ng ộ t ch ứ không mu ố n th ự c thi h ế t các l ệ nh con trong danh sách Để ph ụ c v ụ yêu c ầ u này, VB cung c ấ p l ệ nh Exit
v ớ i cú pháp sau đ ây:
Exit [For | Do | Property | Sub | Function]
L ư u ý VB cho phép dùng Exit để thoát kh ỏ i tr ự c ti ế p ra nhi ề u c ấ p VB không cung c ấ p l ệ nh Exit If và Exit While để thoát kh ỏ i l ệ nh If và l ệ nh While ⇒ dùng l ệ nh Do Loop thay th ế l ệ nh While và/ho ặ c l ệ nh Goto ( đượ c trình bày sau)
Trang 23Để th ấ y vi ệ c dùng các l ệ nh l ồ ng nhau và yêu c ầ u c ầ n thoát kh ỏ i độ t
ng ộ t 1 c ấ p đ i ề u khi ể n nào đ ó, ta hãy xem th ủ t ụ c sau, nó cho phép in
ra t ấ t c ả các font ch ữ mà có th ể dùng để hi ể n th ị lên màn hình l ẫ n in ra máy in
Private Sub Form_Click()
Dim objSFont As Object, objPFont As Object
' duy ệ t t ừ ng font màn hình
For Each objSFont In Screen.Fonts()
' duy ệ t t ừ ng font máy in
For Each objPFont In Printer.Fonts()
If objSFont = objPFont Then
Print objSfont End If
Next objPFont
Next objSFont
End Sub
V ấ n đề thoát độ t ng ộ t kh ỏ i c ấ p đ i ề u khi ể n (tt)
Trang 24Quan sát l ệ nh If ta th ấ y r ằ ng đ i ề u ki ệ n ch ỉ đ úng t ố i đ a 1 l ầ n trong vòng
l ặ p objPFont, do đ ó khi đ ã th ỏ a đ i ề u ki ệ n r ồ i thì ta nên thoát kh ỏ i vòng
l ặ p này ngay ( để th ờ i gian ch ạ y ít h ơ n ⇒ hi ệ u qu ả h ơ n)
Private Sub Form_Click()
Dim objSFont As Object, objPFont As Object
' duy ệ t t ừ ng font màn hình
For Each objSFont In Screen.Fonts()
' duy ệ t t ừ ng font máy in
For Each objPFont In Printer.Fonts()
If objSFont = objPFont Then
Print objSfont Exit For 'thoát độ t ng ộ t kh ỏ i vòng For trong cùng End If
Next objPFont
Next objSFont
V ấ n đề thoát độ t ng ộ t kh ỏ i c ấ p đ i ề u khi ể n (tt)
Trang 25C ũ ng thí d ụ ở slide tr ướ c, nh ư ng n ế u ta ch ỉ mu ố n in tên font ch ữ đầ u tiên đượ c dùng b ở i c ả màn hình và máy in, thì ta ph ả i dùng l ệ nh Exit Sub sau khi đ ã in tên font đầ u tiên này
Private Sub Form_Click()
Dim SFont As objObject, objPFont As Object
' duy ệ t t ừ ng font màn hình
For Each objSFont In Screen.Fonts()
' duy ệ t t ừ ng font máy in
For Each objPFont In Printer.Fonts()
If objSFont = objPFont Then
Print objSfont Exit Sub 'thoát độ t ng ộ t kh ỏ i th ủ t ụ c End If
Next objPFont
Next objSFont
End Sub
V ấ n đề thoát kh ỏ i c ấ p đ i ề u khi ể n độ t ng ộ t (tt)
Trang 26Th ủ t ụ c là ph ươ ng ti ệ n phân chia code c ủ a module (class, form, standard) ra nhi ề u đơ n v ị nh ỏ h ơ n để d ễ qu ả n lý và s ử d ụ ng Đ ây là
v ấ n đề khá l ớ n và s ẽ đượ c trình bày chi ti ế t trong ch ươ ng k ế
Ở đ ây chúng ta gi ớ i thi ệ u 1 vài ý t ưở ng ban đầ u v ề th ủ t ụ c đủ để gi ớ i thi ệ u l ệ nh g ọ i (s ử d ụ ng) chúng Th ủ t ụ c là 1 danh sách các l ệ nh VB
th ự c hi ệ n 1 ch ứ c n ă ng rõ ràng (và th ườ ng đơ n gi ả n), các l ệ nh này
đượ c h ọ p thành 1 đơ n v ị và đượ c gán cho 1 tên nh ậ n d ạ ng, tên này nên g ợ i ý đượ c ch ứ c n ă ng c ủ a th ủ t ụ c (thí d ụ ta đặ t danh sách các
l ệ nh VB tính cos c ủ a góc x trong 1 đơ n v ị và đặ t tên cho nó là Cos)
Để th ủ t ụ c có độ s ử d ụ ng cao, khi đị nh ngh ĩ a nó ng ườ i ta k ế t h ợ p 1 danh sách tham s ố hình th ứ c v ớ i nó M ỗ i tham s ố hình th ứ c miêu t ả 1
d ữ li ệ u mà th ủ t ụ c s ẽ x ử lý khi th ủ t ụ c đượ c thi hành Các tham s ố là
ph ươ ng ti ệ n trao đổ i d ữ li ệ u gi ữ a l ệ nh g ọ i và code c ủ a th ủ t ụ c Thí d ụ
ta k ế t h ợ p v ớ i th ủ t ụ c Cos 1 tham s ố là góc x, ta nói Cos (x) là th ủ t ụ c
8.7 L ệ nh g ọ i th ủ t ụ c
Trang 27Sau khi đ ã đị nh ngh ĩ a th ủ t ụ c, ta có th ể dùng (g ọ i) nó Th ủ t ụ c ch ỉ
đượ c thi hành khi ng ườ i ta g ọ i nó b ằ ng l ệ nh g ọ i th ủ t ụ c Cú pháp c ủ a
l ệ nh g ọ i nh ư sau:
[Call] name [arglist]
Ví d ụ : gi ả s ử ta đ ã đị nh ngh ĩ a (vi ế t) 1 th ủ t ụ c sau đ ây:
Private Sub Update_Display(d As Byte)
nó cho phép hi ệ u ch ỉ nh giá tr ị Display sau khi ng ườ i dùng ấ n thêm ký
s ố d Nh ư v ậ y khi ng ườ i dùng ấ n thêm ký s ố 5, ta s ẽ th ự c hi ệ n g ọ i th ủ
t ụ c nh ư sau:
Call Update_Display (5) hay: Update_Display (5)
L ư u ý: Trong tr ườ ng h ợ p g ọ i th ủ t ụ c không có b ấ t k ỳ tham s ố nào ta nên dùng thêm t ừ khóa "Call' để ch ươ ng trình trong sáng, d ễ đọ c
L ệ nh g ọ i th ủ t ụ c (tt)