I E= T*R
CÁC LỆNH THỰC THI VB
8.5 Vấn đề các lệnh lồng nhau, thoát đột ngột khỏ i1 cấu trúc điều khiển.
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
Vấn đề thoát đột ngột khỏi cấp điều khiển
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
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).
Để 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
Quan 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
http://www.foxitsoftware.com For evaluation only.
' 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
End Sub
Cũ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
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
End Sub