Ứng dụng sẽ không thực thi những lệnh sau lệnh return Sau khi trả về, tham số chứa bản sao giá trị sẽ bị hủy Khi gặp từ khóa return, giá trị bên phải return được trả về vị trí lời gọi Fu
Trang 1BÀI 6:
THỦ TỤC (SUB) VÀ HÀM (FUNCTION)
Trang 2Các lệnh lặp
Sử dụng các điều khiển ListBox, NumericUpDown,
TextBox nhiều dòng
Chuyển điều khiển trên Form
Vô hiệu hóa và kích hoạt điều khiển
Sử dụng đối tượng String
Hệ thống bài cũ
Các lệnh lặp
Sử dụng các điều khiển ListBox, NumericUpDown,
TextBox nhiều dòng
Chuyển điều khiển trên Form
Vô hiệu hóa và kích hoạt điều khiển
Sử dụng đối tượng String
Trang 3Biết về tổ chức ứng dụng, khái niệm “chia để trị”
Biết cách sử dụng Function và Sub
Biết cách sử dụng tham số Optional
Hiểu về phạm vị biến
Hiểu về ép kiểu ngầm định thu hẹp và sử dụng lớp
Convert để ép kiểu tường minh
Hiểu về cách sử dụng các tùy chọn của trình gỡ lỗi
Mục tiêu bài học
Biết về tổ chức ứng dụng, khái niệm “chia để trị”
Biết cách sử dụng Function và Sub
Biết cách sử dụng tham số Optional
Hiểu về phạm vị biến
Hiểu về ép kiểu ngầm định thu hẹp và sử dụng lớp
Convert để ép kiểu tường minh
Hiểu về cách sử dụng các tùy chọn của trình gỡ lỗi
Trang 4Ứng dụng được phân chia
thành nhiều thành phần nhỏ
hơn để dễ quản lý
Kỹ thuật này gọi là “Chia để
trị”
Kỹ thuật này giúp đơn giản
hóa việc thiết kế, phát triển
và bảo trì ứng dụng cỡ vừa và
lớn
Tổ chức trong ứng dụng
Ứng dụng
Kỹ thuật này giúp đơn giản
hóa việc thiết kế, phát triển
và bảo trì ứng dụng cỡ vừa và
lớn
Trang 5Thủ tục gồm một tập các dòng lệnh dùng để thực hiện một tác vụ
cụ thể Thủ tục không trả về giá trị nào
Visual Basic cung cấp nhiều thủ tục có sẵn cho phép phát triển ứngdụng một cách nhanh chóng, dễ dàng
Có thể tự tạo cho mình các thủ tục để thực hiện công việc nhất định
và có thể dùng lại về sau
Thủ tục
Thủ tục gồm một tập các dòng lệnh dùng để thực hiện một tác vụ
cụ thể Thủ tục không trả về giá trị nào
Visual Basic cung cấp nhiều thủ tục có sẵn cho phép phát triển ứngdụng một cách nhanh chóng, dễ dàng
Có thể tự tạo cho mình các thủ tục để thực hiện công việc nhất định
và có thể dùng lại về sau
Trang 6Hàm gồm một tập các dòng lệnh dùng để thực hiện một tác vụ cụthể Hàm luôn luôn trả về một giá trị
Visual Basic cung cấp nhiều hàm có sẵn cho phép phát triển ứng
Visual Basic cung cấp nhiều hàm có sẵn cho phép phát triển ứng
dụng một cách nhanh chóng, dễ dàng, ví dụ:
Có thể tự tạo cho mình các hàm để thực hiện công việc nhất định và
có thể dùng lại về sau
Trả về giá trị lớn hơn của x và y Math.Max(2.3,12.7) là 12.7 Math.Min(x,y) Trả về giá trị nhỏ
hơn của x và y Math.Min(2.3,12.7) là 2.3 Math.Sqrt(x) Trả về căn bậc hai
của x Math.Sqrt(9) là 3.0Val(x) Trả về giá trị số của
biến x Val(“5”) là 5Val(“abc5”) là 0
Trang 7Function trả về giá trị sau khi thực hiện
Trang 8Tiêu đề
Tham số cho phép thủ tục nhận dữ liệu và thao tác trên nó
Có thể có nhiều tham số, các tham số cách nhau bởi dấu phẩy Thân Function
Function tinhBinhPhuong (ByVal x As Double) As Double
Tên thủ tục Danh sách tham số
Kiểu trả về
Tiêu đề
Tham số cho phép thủ tục nhận dữ liệu và thao tác trên nó
Có thể có nhiều tham số, các tham số cách nhau bởi dấu phẩy Thân Function
Trang 9Cú pháp khai báo:
[ Public, Private] Function TenSub[( ThamSo1,ThamSo2,…)]
As KieuGiaTri
' Các thao tác của hàmReturn GiaTri
End Function
Ví dụ1:
Public Function() As Integer
‘ Các thao tácReturn GiaTri
End Function
Ví dụ1:
Public Function() As Integer
‘ Các thao tácReturn GiaTri
End Function
Trang 10Định nghĩa Hàm:
Ví dụ 1: Tính diện tích hình chữ nhật có 2 cạnh là 10,20
Public Function TinhDienTich() As Double
Dim a As Double = 10Dim b As Double = 20Dim s As Double
s= a*bReturn sEnd Function
s= a*bReturn sEnd Function
Trang 12Cú pháp gọi Hàm không có tham số:
Ví dụ 1: Gọi hàm tính diện tích với kiểu trả về là Double
Dim DT As Double=TinhDienTich()
Cú pháp gọi Hàm có tham số:
Ví dụ 2: Gọi hàm tính diện tích với kiểu trả về là Integer,
2 tham số truyền vào là 10,20
Dim DT As Integer =TinhDienTich(10,20)
Function
Cú pháp gọi Hàm không có tham số:
Ví dụ 1: Gọi hàm tính diện tích với kiểu trả về là Double
Dim DT As Double=TinhDienTich()
Cú pháp gọi Hàm có tham số:
Ví dụ 2: Gọi hàm tính diện tích với kiểu trả về là Integer,
2 tham số truyền vào là 10,20
Dim DT As Integer =TinhDienTich(10,20)
Trang 13Gọi Function bằng cách dùng tên Function, tiếp theo là cặp ngoặc đơn chứa đối số
Sau khi hoàn thành tác vụ, hàm được gọi trả lại quyền
điều khiển cho lệnh gọi
Chú ý rằng giá trị của đối số phải tương thích với kiểu
tham số
Demo gọi Function
Gọi Function bằng cách dùng tên Function, tiếp theo là cặp ngoặc đơn chứa đối số
Sau khi hoàn thành tác vụ, hàm được gọi trả lại quyền
điều khiển cho lệnh gọi
Chú ý rằng giá trị của đối số phải tương thích với kiểu
tham số
Gọi hàm
Trang 14Khi điều khiển chương trình gặp lời gọi Function
Square(sideA) Tại đây ứng dụng tạo bản sao cho giá trị
của biến sideA và điều khiển chương trình chuyển đến
dòng đầu tiên của Function Square
Thứ tự thực thi khi gọi Function
Khi điều khiển chương trình gặp lời gọi Function
Square(sideA) Tại đây ứng dụng tạo bản sao cho giá trị
của biến sideA và điều khiển chương trình chuyển đến
dòng đầu tiên của Function Square
Trang 15Từ khóa ByVal cho biết ứng dụng sẽ tạo giá trị bản sao của đối số và truyền giá trị này vào Function, Sub.
Function, Sub sẽ nhận bản sao đó và lưu trong tham số Khi thực thi Function, Sub, ứng dụng sẽ thao tác trên
Trang 16Khi gặp từ khóa return, giá trị bên phải return được trả
về vị trí lời gọi Function.
Ứng dụng sẽ không thực thi những lệnh sau lệnh return Sau khi trả về, tham số chứa bản sao giá trị sẽ bị hủy
Khi gặp từ khóa return, giá trị bên phải return được trả
về vị trí lời gọi Function.
Ứng dụng sẽ không thực thi những lệnh sau lệnh return Sau khi trả về, tham số chứa bản sao giá trị sẽ bị hủy
Trang 17Từ khóa return
Sau khi thực thi Function, giá trị sẽ được trả về tại vị trí lời gọi
Function Ứng dụng sẽ thực hiện lệnh tiếp theo là gán giá trị trả
về của Function Square cho biến squareSideA
Trang 18Sub là một tập mã thực hiện một tác vụ cụ thể nhưng
Trang 19Cú pháp khai báo:
[ Public, Private] Sub TenSub[( ThamSo1,ThamSo2,…)]
' Các thao tác của thủ tục End Sub
Ví dụ1:
Public Sub()
‘ Các thao tác End Sub
Ví dụ2:
Public Sub(ByVal ThamSo1 As Integer)
‘ Các thao tác End Sub
Sub
Cú pháp khai báo:
[ Public, Private] Sub TenSub[( ThamSo1,ThamSo2,…)]
' Các thao tác của thủ tục End Sub
Ví dụ1:
Public Sub()
‘ Các thao tác End Sub
Ví dụ2:
Public Sub(ByVal ThamSo1 As Integer)
‘ Các thao tác End Sub
Trang 20Định nghĩa thủ tục:
Ví dụ 1: In ra màn hình các số từ 0 đến 10
Public Sub PrintNumber()
For Dim i As Integer 0 to 10
Console.WriteLine(i.ToString())Next
End Sub
Sub
Định nghĩa thủ tục:
Ví dụ 1: In ra màn hình các số từ 0 đến 10
Public Sub PrintNumber()
For Dim i As Integer 0 to 10
Console.WriteLine(i.ToString())Next
End Sub
Trang 21Cú pháp gọi thủ tục không có tham số:
Trang 22Chương trình thường phải gọi thủ tục nhiều lần với cùng
một giá trị đối số cho một tham số đặc biệt Dùng tham
số Optional
Tham số Optional là tham số có giá trị mặc định
Có ba quy tắc sử dụng tham số Optional
Tham số Optional phải có giá trị mặc địnhGiá trị mặc định phải là biểu thức không đổiTất cả các tham số xuất hiện sau tham số Optional trongdanh sách tham số đều là tham số Optional
Tham số Optional
Chương trình thường phải gọi thủ tục nhiều lần với cùng
một giá trị đối số cho một tham số đặc biệt Dùng tham
số Optional
Tham số Optional là tham số có giá trị mặc định
Có ba quy tắc sử dụng tham số Optional
Tham số Optional phải có giá trị mặc địnhGiá trị mặc định phải là biểu thức không đổiTất cả các tham số xuất hiện sau tham số Optional trongdanh sách tham số đều là tham số Optional
Function tinhTheTich( Optional ByVal dai As Integer = 1_
Optional ByVal rong As Integer = 1, _ Optional ByVal cao As Integer = 1 ) As Integer Return dai * rong * cao
giá trị mặc định
Trang 23Trả về 60, sử dụng giá trị mặc định cho chiều dài
Trong lời gọi thủ tục, khi đối số của tham số Optional được
bỏ qua, trình biên dịch sẽ viết lại lời gọi thủ tục và chèn giá trị
Trả về 60, sử dụng giá trị mặc định cho chiều dài
Trong lời gọi thủ tục, khi đối số của tham số Optional được
bỏ qua, trình biên dịch sẽ viết lại lời gọi thủ tục và chèn giá trị
Trang 24Phạm vi module
Biến được khai báo bắt đầu từ sau từ khóa Class và kết thúc trước
lệnh End Class được gọi là biến thực thể.
Biến được khai báo bên trong thủ tục có phạm vi thủ tục
Biến có phạm vi thủ tục không thể được tham chiếu từ bên ngoàithủ tục mà chúng khai báo
Tham số của thủ tục có phạm vi thủ tục
Phạm vi biến
Phạm vi module
Biến được khai báo bắt đầu từ sau từ khóa Class và kết thúc trước
lệnh End Class được gọi là biến thực thể.
Biến được khai báo bên trong thủ tục có phạm vi thủ tục
Biến có phạm vi thủ tục không thể được tham chiếu từ bên ngoàithủ tục mà chúng khai báo
Tham số của thủ tục có phạm vi thủ tục
Trang 25được gọi là biến cục bộ
Nếu biến cục bộ có cùng tên với biến thực thể, khi truy cập đến tên biến này, ứng dụng sẽ truy cập đến biến cục bộ
được gọi là biến cục bộ
Nếu biến cục bộ có cùng tên với biến thực thể, khi truy cập đến tên biến này, ứng dụng sẽ truy cập đến biến cục bộ
Trang 26Truyền giá trị
Truyền bằng từ khóa ByVal
Ứng dụng tạo bản sao của giá trị đối số và và truyền bản sao đó cho thủ tục được gọi.
Những thay đổi thực hiện trên bản sao không làm thay đổi giá trị ban đầu của biến
Truyền tham chiếu
Truyền bằng từ khóa ByRef
Biến ban đầu trong thủ tục gọi hàm có thể được truy cập
và thay đổi trực tiếp bởi thủ tục được gọi
Hữu ích trong trường hợp thủ tục muốn trả về nhiều hơn một giá trị
Truyền đối số: Truyền giá trị và truyền tham chiếu
Truyền giá trị
Truyền bằng từ khóa ByVal
Ứng dụng tạo bản sao của giá trị đối số và và truyền bản sao đó cho thủ tục được gọi.
Những thay đổi thực hiện trên bản sao không làm thay đổi giá trị ban đầu của biến
Truyền tham chiếu
Truyền bằng từ khóa ByRef
Biến ban đầu trong thủ tục gọi hàm có thể được truy cập
và thay đổi trực tiếp bởi thủ tục được gọi
Hữu ích trong trường hợp thủ tục muốn trả về nhiều hơn một giá trị
Trang 27Kiểu giá trị và kiểu tham chiếu
Kiểu giá trị
Biến chứa giá trị của biến
đó
Kiểu tham chiếu
Biến chứa địa chỉ lưu đối tượng trong bộ nhớ
Dim x As Integer = 7 Dim ten As String = “Nam”
Kiểu dữ liệu trong Visual Basic được chia làm hai loại
7
Dim x As Integer = 7
biến x chứa giá trị là 7
Dim ten As String = “Nam”
biến ten chứa địa chỉ đến String “Nam”
Trang 28Kiểu giá trị và kiểu tham chiếu
Kiểu giá trị
Tất cả các biến cơ sở đều
có kiểu giá trị, trừ kiểu
String
Kiểu tham chiếu
Tất cả các biến không phải kiểu giá trị đều thuộc kiểu tham chiếu
Ví dụ như các biến điềukhiển, các biến này thamchiếu đến đối tượng
Button, TextBox…
Để tương tác với đốitượng, sử dụng biến thamchiếu đến đối tượng để gọiphương thức hay truy cậpthuộc tính
Tất cả các biến không phải kiểu giá trị đều thuộc kiểu tham chiếu
Ví dụ như các biến điềukhiển, các biến này thamchiếu đến đối tượng
Button, TextBox…
Để tương tác với đốitượng, sử dụng biến thamchiếu đến đối tượng để gọiphương thức hay truy cậpthuộc tính
Trang 29Kiểu giá trị và kiểu tham chiếu
Kiểu tham trị
Khi truyền bằng từ khóa
ByVal, bản sao giá trị của
đối số chính là giá trị mà đối
số đó lưu trữ
Giá trị của đối số không
thay đổi
Kiểu tham chiếu
Khi truyền bằng từ khóa
ByVal, bản sao giá trị của
đối số là địa chỉ tham chiếu đến đối tượng
Địa chỉ tham chiếu đến đối tượng không thay đổi
nhưng giá trị của đối tượng
có thể thay đổi
Để tham chiếu đến đối tượng khác, sử dụng từ khóa ByRef
Khi truyền bằng từ khóa
ByVal, bản sao giá trị của
đối số chính là giá trị mà đối
số đó lưu trữ
Giá trị của đối số không
thay đổi
Khi truyền bằng từ khóa
ByVal, bản sao giá trị của
đối số là địa chỉ tham chiếu đến đối tượng
Địa chỉ tham chiếu đến đối tượng không thay đổi
nhưng giá trị của đối tượng
có thể thay đổi
Để tham chiếu đến đối tượng khác, sử dụng từ khóa ByRef
Trang 30Ép kiểu ngầm định
Trình biên dịch tự chuyển kiểu này sang kiểu khác mà
không phải viết mã
Ép kiểu ngầm định mở rộng
Ép kiểu “nhỏ hơn” thành kiểu “lớn hơn”
Không mất dữ liệu
Ép kiểu ngầm định thu hẹp
Ép kiểu “lớn hơn” thành kiểu “nhỏ hơn”
Mất dữ liệu Gây lỗi logic Hạn chế ép kiểu ngầm địnhthu hẹp bằng cách thiết lập tùy chọn Option Strict là on
Ép kiểu ngầm định
Ép kiểu ngầm định
Trình biên dịch tự chuyển kiểu này sang kiểu khác mà
không phải viết mã
Ép kiểu ngầm định mở rộng
Ép kiểu “nhỏ hơn” thành kiểu “lớn hơn”
Không mất dữ liệu
Ép kiểu ngầm định thu hẹp
Ép kiểu “lớn hơn” thành kiểu “nhỏ hơn”
Mất dữ liệu Gây lỗi logic Hạn chế ép kiểu ngầm địnhthu hẹp bằng cách thiết lập tùy chọn Option Strict là on
Dim x As Double = 4.6 Dim y As Integer = value1
y có giá trị
là 5
Trang 31Kiểu dữ liệu Có thể được ép kiểu ngầm định thành
những kiểu lớn hơn
Byte Short, Integer, Long, Decimal, Single,
Double hoặc Object Char String hoặc Object
Trang 32Demo bật tùy chọn Option Strict
Thiết lập tùy chọn Option strict là On
Thiết lập tùy chọn Option strict là On
Trang 33Khi Option Strict được thiết lập là On, phải viết mã để
thực hiện các phép ép kiểu thu hẹp tường minh
Visual Basic cung cấp lớp Convert để thực hiện các phép
Integer ToInt32 value = Convert.ToInt32(“24”)
Decimal ToDecimal value = Convert.ToDecimal(“24.1”)
Double ToDouble value = Convert.ToDouble(“24.1”)
Trang 34Các ToolStripButton gỡ lỗi
Sử dụng trình gỡ lỗi: Các điều khiển gỡ lỗi
Start Debugging Step Into Step Out
Các ToolStripButton gỡ lỗi
Step Over Stop Debugging
Pause
Trang 35Thực thi lệnh tiếp theo trong ứng dụng (dòng được đánh dấu)
Nếu lệnh tiếp theo là lời gọi thủ tục, điều khiển sẽ chuyển đến thủ tục được gọi và thực thi từng lệnh của thủ tục đó
Trang 36Thực thi lệnh hiện thời, không đi vào lệnh đó mà chuyển đến thực hiện lệnh tiếp theo
Nếu lệnh hiện thời không chứa lời gọi thủ tục, thực hiệngiống với Step Into
Nếu lệnh hiện thời là lời gọi thủ tục, thủ tục sẽ được thực thihoàn toàn chứ không chuyển điều khiển vào thủ tục đượcgọi
Trang 37theo, không chuyển
điều khiển vào thủ
tục được gọi
Trang 39Ứng dụng được phân chia thành nhiều thành phần nhỏ hơn để dễ quản lý Kỹ thuật này được gọi là “chia để trị” Ứng dụng được phân chia thành lớp, lớp lại được phân chia thành nhiều Sub, Function Làm như vậy sẽ dễ dàng trong việc thiết kế, phát triển và bảo trì ứng dụng lớn
Thủ tục là một tập lệnh nhằm giải quyết một tác vụ cụ thể
Khi gặp lời gọi Sub, Function, điều khiển chương trình
chuyển đến thực thi thủ tục được gọi, sau khi thực thi
xong lại chuyển điều khiển về cho thủ tục gọi
Function trả về giá trị còn thủ tục Sub thì không
Tổng kết bài học
Ứng dụng được phân chia thành nhiều thành phần nhỏ hơn để dễ quản lý Kỹ thuật này được gọi là “chia để trị” Ứng dụng được phân chia thành lớp, lớp lại được phân chia thành nhiều Sub, Function Làm như vậy sẽ dễ dàng trong việc thiết kế, phát triển và bảo trì ứng dụng lớn
Thủ tục là một tập lệnh nhằm giải quyết một tác vụ cụ thể
Khi gặp lời gọi Sub, Function, điều khiển chương trình
chuyển đến thực thi thủ tục được gọi, sau khi thực thi
xong lại chuyển điều khiển về cho thủ tục gọi
Function trả về giá trị còn thủ tục Sub thì không
Trang 40Có thể truyền giá trị hay tham chiếu cho đối số Truyền giá trị bằng từ khóa ByVal, truyền tham chiếu bằng từ
khóa ByRef
Visual Basic cung cấp hai kiểu biến, biến kiểu giá trị và biến kiểu tham chiếu Khi truyền đối số với từ khóa
ByVal, có thể thay đổi giá trị của biến tham chiếu
Sử dụng tùy chọn Optional để thiết lập giá trị mặc định cho biến
Biến có thể có phạm vi module, phạm vi thủ tục hay
phạm vi khối lệnh
Không nên ép kiểu nghầm định thu hẹp, bởi dữ liệu có
thể bị mất Thiết lập tùy chọn Option Strict là On và sử
ByVal, có thể thay đổi giá trị của biến tham chiếu
Sử dụng tùy chọn Optional để thiết lập giá trị mặc định cho biến
Biến có thể có phạm vi module, phạm vi thủ tục hay
phạm vi khối lệnh
Không nên ép kiểu nghầm định thu hẹp, bởi dữ liệu có
thể bị mất Thiết lập tùy chọn Option Strict là On và sử