
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 235
Sau 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.
Chương 8 : Các lệnh thực thi VB
Lệnh gọi thủtục (tt)
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 236
MÔN TIN HỌC
Chương 9
ĐỊNH NGHĨA THỦTỤC & SỬDỤNG
Chương 9 : Định nghĩathủtục& sửdụng
9.1 Thủtục & tầm vực sửdụng thủtục
9.2 Cú pháp định nghĩa hàm.
9.3 Cú pháp định nghĩa thủtục
9.4 Gọi thủtục
9.5 Cơ chếtruyền tham số
9.6 Các thủtục định nghĩa sẵn

Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 237
Nhắclạicấutrúctổchức1 chương trình
Mộtchương trình thường cung cấp nhiềuchứcnăng cho người dùng ⇒
Chương trình thường là 1 hệthống phứctạp. Để dễquảnlývàxâydựng
chương trình, ngườitathường chia nó ra nhiềuđơnvịnhỏhơn. Hiệncó2
phương pháp chia nhỏchương trình :
phương pháp có cấutrúc: chương trình đượcchianhỏthành nhiều
module chứcnăng, mỗi module chứa nhiềuđiểmnhập (entry), mỗi
điểmnhập cung cấp1 dịch vụ(chứcnăng) rõ ràng, đơngiản nào đó.
Ta gọimỗiđiểmnhậplàthủtụcthựchiệnchứcnăng tương ứng.
phương pháp hướng đốitượng : chương trình đượcchianhỏthành
nhiềuđốitượng, mỗiđốitượng chứa nhiềuđiểmnhập (entry), mỗi
điểmnhập cung cấp1 dịch vụ(chứcnăng) rõ ràng, đơngiản nào đó.
Ta gọimỗiđiểmnhậplàthủtụcthựchiệnchứcnăng tương ứng.
Tóm lại, dù dùng phương pháp chia nhỏchương trình nào thì đơnvịchức
năng nhỏnhấtmàngườilậptrìnhcóthểxây dựng và dùng (gọi) lại nhiều
lần trong chương trình là thủtục.
Chương 9 : Định nghĩathủtục& sửdụng
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 238
9.1 Phân loạithủtụctrongVB
Nếutaphântíchchương trình theo cấutrúcthìchương trình VB là tậpcác
standard module, trong mỗi module ta có thểđịnh nghĩa n thủtục khác nhau
thuộc 1 trong 2 dạng :
thủtục-Sub: 1 đoạnlệnh thực thi VB để thựchiện1 chứcnăng rõ ràng,
đơngiảnnhưng không trảvềgiá trịkèm theo tên thủtục.
hàm - Function : 1 đoạnlệnh thực thi VB để thựchiện1 chứcnăng rõ ràng,
đơngiảnvàtrảvềgiá trịkèm theo tên hàm.
Nếutaphântíchchương trình theo hướng đốitượng thì chương trình VB là tập
các form hay class module, trong mỗi module ta có thểđịnh nghĩan thủtục
khác nhau thuộc 1 trong 3 dạng :
thủtục-Sub: 1 đoạnlệnh thực thi VB để thựchiện1 chứcnăng rõ ràng,
đơngiảnnhưng không trảvềgiá trịkèm theo tên thủtục.
hàm - Function : 1 đoạnlệnh thực thi VB để thựchiện1 chứcnăng rõ ràng,
đơngiảnvàtrảvềgiá trịkèm theo tên hàm.
truy xuấtthuộc tính - Property : 1 đoạnlệnh thực thi VB để đọc/ghi 1 thuộc
tính tương ứng củađốitượng. Có 3 thủtụcloại này là Get, Set và Let.
Chương 9 : Định nghĩathủtục& sửdụng

Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 239
Tầmvựcsửdụng thủtục trong VB
Trong mỗi standard module, ta có thểxác định tầmvựcsửdụng củatừng thủ
tục:
cụcbộtrong module : dùng từkhóa Private trong lệnh định nghĩathủtục.
toàn cục trong chương trình : dùng từkhóa Public trong lệnh định nghĩathủ
tục.
Trong mỗi form hay class module, ta có thểxác định tầmvựcsửdụng củatừng
thủtục:
cụcbộtrong module (đốitượng) : dùng từkhóa Private trong lệnh định nghĩa
thủtục.
cụcbộtrong Project : dùng từkhóa Friend trong lệnh định nghĩathủtục.
công cộng (ai dùng cũng được) : dùng từkhóa Public trong lệnh định nghĩa
thủtục. Các thủtụccôngcộng củađốitượng đượcgọi là method để phân
biệtvới Sub/Function.
Vềnguyên tắc, các thủtục Property Get, Set và Let đềuphảicótầmvực
công cộng (dùng từkhóa Public).
Chương 9 : Định nghĩathủtục& sửdụng
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 240
9.2 Cú pháp định nghĩa hàm - Function
Cú pháp để định nghĩa 1 hàm :
[Public | Private | Friend] [Static] Function name [(arglist)] [As type]
[statements]
[name =expression]
[Exit Function]
[statements]
[name =expression]
End Function
Dùng từkhóa Public để định nghĩa hàm có tầmvực toàn cục, nghĩalà
bấtkỳlệnh nào củachương trình đềucóthểgọi hàm Public.
Dùng từkhóa Friend để định nghĩa method thuộc 1 class module nhưng
chỉcó tầmvựccụcbộtrong Project, nghĩalàchỉcó các lệnh trong cùng
Project mớicóthểgởi thông điệpđến hàm Friend củađốitượng đó, còn
các lệnh ởngoài Project thì không thấy hàm Friend củađốitượng này.
Chương 9 : Định nghĩathủtục& sửdụng

Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 241
Cú pháp định nghĩa hàm - Function (tt)
Dùng từkhóa Private để định nghĩa hàm có tầmvựccụcbộtrong
module, nghĩalàchỉcó các lệnh trong cùng module mớicóthểgọi hàm
Private trong module tương ứng.
Dùng từkhóa Static để định nghĩa các biếncụcbộtrong hàm đềulà
Static, nghĩalàgiátrịcủa chúng vẫntồntại qua các lầngọi khác nhau
đếnhàmnày.
[statements] là danh sách các lệnh định nghĩabiến, hằng, kiểucụcbộ
trong function và các lệnh thực thi miêu tảchính xác chứcnăng của
hàm.
Lệnh gán name = expression cho phép gán giá trịtrảvềcho lệnh gọi
hàm.
Lệnh Exit Function cho phép trảngay điềukhiểnvềlệnh gọi hàm này
(thay vì thựcthitiếpcáclệnh còn lạicủa hàm).
Chương 9 : Định nghĩathủtục& sửdụng
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 242
Cú pháp định nghĩa hàm - Function (tt)
arglist là danh sách các tham sốhình thức, mỗi tham số đượccách
nhau bởidấu ',' và đượcđịnh nghĩa theo cú pháp nhưsau :
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]
[=defaultvalue]
Dùng từkhóa Optional để khai báo rằng tham sốtương ứng là nhiệmý
trong lúc gọi hàm : truyền hay không cũng được. Trong trường hợp này
ta nên dùng thêm thành phần[=defaultvalue] để xác định giá trịcần
truyền nhiệmý.
Dùng từkhóa ByRef để khai báo việctruyền tham sốbằng tham khảo,
đây là chếđộtruyềnthamsốnhiệmý. Ngượclại dùng từkhóa ByVal để
khai báo cơchếtruyền tham sốbằng giá trị.
Chỉcó thểdùng từkhóa ParamArray cho tham sốcuối trong danh sách
tham số, tham sốnày cho phép ta truyền bao nhiêu tham sốcụthểcũng
được.
Chương 9 : Định nghĩathủtục& sửdụng

Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 243
Thí dụđịnh nghĩahàm
Đoạn code sau định nghĩa hàm tính n! giai thừa theo giảithuậtđệ qui :
Public Function giaithua(ByVal n As Long) As Long
If n <= 0 Then ' nếun <=0 thìtrảvề-1
giaithua = -1
Exit Function
End If
If n = 1 Then ' nếun = 1 thìtrảvềkếtquảlà 1
giaithua = 1
Exit Function
End If
' Nếu n > 1 thì tính theo công thức n! = n * (n-1)!
giaithua = n * giaithua(n - 1)
End Function
Chương 9 : Định nghĩathủtục& sửdụng
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học
Slide 244
9.3 Cú pháp định nghĩathủtục-Sub
Cú pháp để định nghĩa 1 thủtục Sub :
[Private | Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]
End Sub
Ý nghĩacủacáctừkhóa Public, Private, Friend, Static cũng nhưcác
thành phầnarglist, Exit Sub, statements giống y nhưtrong việcđịnh
nghĩa hàm mà chúng ta đãgiớithiệuởnhững slide trước.
Sựkhác biệtgiữa hàm và thủtục là hàm luôn trảvềgiá trịkếthợpvới
tên hàm, còn thủtục thì không trảvềtrịkếthợpvớitênthủtục(nhưng
nó vẫncóthểtrảkếtquảvềthông qua các tham sốtruyềnbằng tham
khảo).
Nếu quan sát kỹ, ta thấy các hàm xửlý sựkiệnchocácđốitượng giao
diệnđềulàSub, chứkhông phải là Function, do đótừđây ta dùng đoạn
câu "thủtụcxửlý sựkiện" thay cho "hàm xửlý sựkiện".
Chương 9 : Định nghĩathủtục& sửdụng