bÀi 6: thủ tục (sub) và hàm (function) - giáo trình fpt

41
BÀI 6: THỦ TỤC (SUB) VÀ HÀM (FUNCTION)

Upload: hoc-lap-trinh-web

Post on 27-May-2015

6.790 views

Category:

Documents


5 download

DESCRIPTION

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

TRANSCRIPT

Page 1: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

BÀI 6:THỦ TỤC (SUB) VÀ HÀM (FUNCTION)

Page 2: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Các lệnh lặpSử dụng các điều khiển ListBox, NumericUpDown,TextBox nhiều dòngChuyển điều khiển trên FormVô hiệu hóa và kích hoạt điều khiểnSử dụng đối tượng String

Hệ thống bài cũ

Các lệnh lặpSử dụng các điều khiển ListBox, NumericUpDown,TextBox nhiều dòngChuyển điều khiển trên FormVô hiệu hóa và kích hoạt điều khiểnSử dụng đối tượng String

Hàm và Thủ tục 2

Page 3: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Biết về tổ chức ứng dụng, khái niệm “chia để trị”Biết cách sử dụng Function và SubBiết cách sử dụng tham số OptionalHiểu về phạm vị biếnHiểu về ép kiểu ngầm định thu hẹp và sử dụng lớpConvert để ép kiểu tường minhHiể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à SubBiết cách sử dụng tham số OptionalHiểu về phạm vị biếnHiểu về ép kiểu ngầm định thu hẹp và sử dụng lớpConvert để ép kiểu tường minhHiểu về cách sử dụng các tùy chọn của trình gỡ lỗi

Hàm và Thủ tục 3

Page 4: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Ứng dụng được phân chiathà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ảnhóa việc thiết kế, phát triểnvà bảo trì ứng dụng cỡ vừa vàlớn

Tổ chức trong ứng dụng

Ứngdụng

Lớp Lớp

Ứng dụng được phân chiathà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ảnhóa việc thiết kế, phát triểnvà bảo trì ứng dụng cỡ vừa vàlớn

Hàm và Thủ tục 4

Thủ tục Thủ tục Thủ tục

Page 5: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

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àoVisual 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 địnhvà 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àoVisual 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 địnhvà có thể dùng lại về sau

Hàm và Thủ tục 5

Page 6: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Hà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 ứngdụ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

Hàm

Thủ tục Mô tả Ví dụ

Math.Max(x,y) Trả về giá trị lớnhơn của x và y

Math.Max(2.3,12.7) là 12.7

Hà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 ứngdụ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

Hàm và Thủ tục 6

Trả về giá trị lớnhơ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 haicủa x

Math.Sqrt(9) là 3.0

Val(x) Trả về giá trị số củabiến x

Val(“5”) là 5Val(“abc5”) là 0

Page 7: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Function trả về giá trị sau khi thực hiệnĐịnh nghĩa Function gồm 3 phần chính

Tiêu đềThân thủ tụcKết thúc thủ tục

Hàm (Function)

Hàm và Thủ tục 7

Function tinhBinhPhuong (ByVal input As Double) As Double

[Thân thủ tục]Return

End Function

Tiêu đề

Kết thúcthủ tục

Page 8: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

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 FunctionChứa mã thực hiện các hành độngThao tác trên tham số của danh sách tham số và trả về kếtquảCác tham số chỉ được dùng trong thân hàm

Function

Function tinhBinhPhuong (ByVal x As Double) As Double

Tên thủ tục Danh sách tham số

Tên tham số Kiểu 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 FunctionChứa mã thực hiện các hành độngThao tác trên tham số của danh sách tham số và trả về kếtquảCác tham số chỉ được dùng trong thân hàm

Hàm và Thủ tục 8

Page 9: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Cú pháp khai báo:[ Public, Private] Function TenSub[( ThamSo1,ThamSo2,…)]

As KieuGiaTri' Các thao tác của hàm

Return GiaTriEnd Function

Ví dụ1:Public Function() As Integer

‘ Các thao tácReturn GiaTri

End Function

Function

Cú pháp khai báo:[ Public, Private] Function TenSub[( ThamSo1,ThamSo2,…)]

As KieuGiaTri' Các thao tác của hàm

Return GiaTriEnd Function

Ví dụ1:Public Function() As Integer

‘ Các thao tácReturn GiaTri

End Function

Hàm và Thủ tục 9

Page 10: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Đị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,20Public Function TinhDienTich() As Double

Dim a As Double = 10Dim b As Double = 20Dim s As Doubles= a*bReturn s

End Function

Function

Đị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,20Public Function TinhDienTich() As Double

Dim a As Double = 10Dim b As Double = 20Dim s As Doubles= a*bReturn s

End Function

Hàm và Thủ tục 10

Page 11: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Định nghĩa Hàm:Ví dụ 2: Tính diện tích hình chữ nhật có 2 cạnh là a,b

Public Function TinhDienTich(ByVal a As Integer, ByVal b AsInteger)

Dim a,b,s As Integers=a*bReturn s

End Function

Function

Định nghĩa Hàm:Ví dụ 2: Tính diện tích hình chữ nhật có 2 cạnh là a,b

Public Function TinhDienTich(ByVal a As Integer, ByVal b AsInteger)

Dim a,b,s As Integers=a*bReturn s

End Function

Hàm và Thủ tục 11

Page 12: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

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)

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)

Hàm và Thủ tục 12

Page 13: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Gọi Function bằng cách dùng tên Function, tiếp theo là cặpngoặ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ọiChú ý rằng giá trị của đối số phải tương thích với kiểutham số

Demo gọi Function

Gọi Function bằng cách dùng tên Function, tiếp theo là cặpngoặ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ọiChú ý rằng giá trị của đối số phải tương thích với kiểutham số

Hàm và Thủ tục 13

Gọi hàm

Page 14: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Khi điều khiển chương trình gặp lời gọi FunctionSquare(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 đếndòng đầu tiên của Function Square

Thứ tự thực thi khi gọi Function

…..…..…..Square(sideA)….….

…..…..…..

Thủ tục gọi Hàm được gọi

lời gọihàm

1

2

Khi điều khiển chương trình gặp lời gọi FunctionSquare(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 đếndòng đầu tiên của Function Square

Hàm và Thủ tục 14

…..…..…..Square(sideA)….….

…..…..…..

lời gọihàm

3

Page 15: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Từ khóa ByVal cho biết ứng dụng sẽ tạo giá trị bản saocủ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êntham số này Giá trị của đối số không bị thay đổi

Từ khóa ByVal

Từ khóa ByVal cho biết ứng dụng sẽ tạo giá trị bản saocủ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êntham số này Giá trị của đối số không bị thay đổi

Hàm và Thủ tục 15

Page 16: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

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 returnSau khi trả về, tham số chứa bản sao giá trị sẽ bị hủy

Từ khóa return

…..…..…..Square(sideA)….….

…..…..…..return input…………

Thủ tục gọi Function được gọi

1 2

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 returnSau khi trả về, tham số chứa bản sao giá trị sẽ bị hủy

Hàm và Thủ tục 16

…..…..…..Square(sideA)….….

…..…..…..return input…………

lời gọiFunction

1 2

3

Page 17: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Từ khóa return

Hàm và Thủ tục 17

Sau khi thực thi Function, giá trị sẽ được trả về tại vị trí lời gọiFunction. Ứ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

Page 18: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Sub là một tập mã thực hiện một tác vụ cụ thể nhưngkhông trả về kết quả

Thủ tục (Sub)

Sub tên_thu_tuc (ByVal tham_so1 As kieu_tham_so1)

//Thân thủ tục

End Sub

Tiêu đề

Kết thúcthủ tục không có

kiểu trả về

Hàm và Thủ tục 18

Sub tên_thu_tuc (ByVal tham_so1 As kieu_tham_so1)

//Thân thủ tục

End SubKết thúcthủ tục không có

kiểu trả về

Page 19: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Cú pháp khai báo:[ Public, Private] Sub TenSub[( ThamSo1,ThamSo2,…)]

' Các thao tác của thủ tụcEnd SubVí dụ1:Public Sub()‘ Các thao tác

End SubVí 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ụcEnd SubVí dụ1:Public Sub()‘ Các thao tác

End SubVí dụ2:Public Sub(ByVal ThamSo1 As Integer)‘ Các thao tác

End Sub

Hàm và Thủ tục 19

Page 20: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Định nghĩa thủ tục:Ví dụ 1: In ra màn hình các số từ 0 đến 10Public Sub PrintNumber()

For Dim i As Integer 0 to 10Console.WriteLine(i.ToString())

NextEnd Sub

Ví dụ 2: In ra màn hình các số từ a đến bPublic Sub PrintNumber(ByVal a As Integer, ByVal b As Integer)

For Dim i As Integer a to bConsole.WriteLine(i.ToString())

NextEnd Sub

Sub

Định nghĩa thủ tục:Ví dụ 1: In ra màn hình các số từ 0 đến 10Public Sub PrintNumber()

For Dim i As Integer 0 to 10Console.WriteLine(i.ToString())

NextEnd Sub

Ví dụ 2: In ra màn hình các số từ a đến bPublic Sub PrintNumber(ByVal a As Integer, ByVal b As Integer)

For Dim i As Integer a to bConsole.WriteLine(i.ToString())

NextEnd Sub

Hàm và Thủ tục 20

Page 21: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Cú pháp gọi thủ tục không có tham số:Ví dụ 1: Gọi thủ tục in ra màn hình các số từ 0 đến 10

PrintNumber()

Cú pháp gọi thủ tục có tham số:Ví dụ 2: Gọi thủ tục in ra màn hình các số từ 10 đến 20

PrintNumber(10,20)

Sub

Cú pháp gọi thủ tục không có tham số:Ví dụ 1: Gọi thủ tục in ra màn hình các số từ 0 đến 10

PrintNumber()

Cú pháp gọi thủ tục có tham số:Ví dụ 2: Gọi thủ tục in ra màn hình các số từ 10 đến 20

PrintNumber(10,20)

Hàm và Thủ tục 21

Page 22: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Chương trình thường phải gọi thủ tục nhiều lần với cùngmột giá trị đối số cho một tham số đặc biệt Dùng thamsố OptionalTham số Optional là tham số có giá trị mặc địnhCó 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ùngmột giá trị đối số cho một tham số đặc biệt Dùng thamsố OptionalTham số Optional là tham số có giá trị mặc địnhCó 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

Hàm và Thủ tục 22

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 * caoEnd Function

giá trịmặc định

Page 23: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

tinhTheTich()Trả về 1, sử dụng giá trị mặc định cho chiều dài, chiều rộng vàchiều cao

tinhTheTich(10)Trả về 10, sử dụng giá trị mặc định cho chiều rộng và chiều cao

tinhTheTich(10,20)Trả về 200, sử dụng giá trị mặc định cho chiều cao

tinhTheTich(10,20,30)Trả về 6000, không sử dụng giá trị mặc định

tinhTheTich(,20,30)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 đượcbỏ qua, trình biên dịch sẽ viết lại lời gọi thủ tục và chèn giá trịmặc định của tham số Optional

Tham số OptionaltinhTheTich()

Trả về 1, sử dụng giá trị mặc định cho chiều dài, chiều rộng vàchiều cao

tinhTheTich(10)Trả về 10, sử dụng giá trị mặc định cho chiều rộng và chiều cao

tinhTheTich(10,20)Trả về 200, sử dụng giá trị mặc định cho chiều cao

tinhTheTich(10,20,30)Trả về 6000, không sử dụng giá trị mặc định

tinhTheTich(,20,30)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 đượcbỏ qua, trình biên dịch sẽ viết lại lời gọi thủ tục và chèn giá trịmặc định của tham số Optional

Hàm và Thủ tục 23

Page 24: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Phạm vi moduleBiến được khai báo bắt đầu từ sau từ khóa Class và kết thúc trướclệnh End Class được gọi là biến thực thể.Biến thực thể có phạm vi module

Biến thực thể là biến được khai báo trong lớp và ngoài cácphương thứcBiến thực thể có thể được tham chiếu từ mọi thủ tục trong lớpkhai báo biến đó

Phạm vi thủ tụcBiến được khai báo bên trong thủ tục có phạm vi thủ tụcBiế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áoTham số của thủ tục có phạm vi thủ tục

Phạm vi biến

Phạm vi moduleBiến được khai báo bắt đầu từ sau từ khóa Class và kết thúc trướclệnh End Class được gọi là biến thực thể.Biến thực thể có phạm vi module

Biến thực thể là biến được khai báo trong lớp và ngoài cácphương thứcBiến thực thể có thể được tham chiếu từ mọi thủ tục trong lớpkhai báo biến đó

Phạm vi thủ tụcBiến được khai báo bên trong thủ tục có phạm vi thủ tụcBiế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áoTham số của thủ tục có phạm vi thủ tục

Hàm và Thủ tục 24

Page 25: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Phạm vi khối lệnhBiến được khai báo trong khối lệnh có phạm vi khối lệnhBắt đầu từ vị trí biến được khai báo và kết thúc ở dònglệnh cuối cùng của khối lệnh (ví dụ như Else hoặc End If)

Biến có phạm vi thủ tục và biến có phạm vi khối lệnhđượ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 truycập đến tên biến này, ứng dụng sẽ truy cập đến biến cụcbộ

Phạm vi biến

Phạm vi khối lệnhBiến được khai báo trong khối lệnh có phạm vi khối lệnhBắt đầu từ vị trí biến được khai báo và kết thúc ở dònglệnh cuối cùng của khối lệnh (ví dụ như Else hoặc End If)

Biến có phạm vi thủ tục và biến có phạm vi khối lệnhđượ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 truycập đến tên biến này, ứng dụng sẽ truy cập đến biến cụcbộ

Hàm và Thủ tục 25

Page 26: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

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ảnsao đó 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 đổigiá trị ban đầu của biến

Truyền tham chiếuTruyền bằng từ khóa ByRefBiến ban đầu trong thủ tục gọi hàm có thể được truy cậpvà thay đổi trực tiếp bởi thủ tục được gọiHữu ích trong trường hợp thủ tục muốn trả về nhiều hơnmộ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ảnsao đó 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 đổigiá trị ban đầu của biến

Truyền tham chiếuTruyền bằng từ khóa ByRefBiến ban đầu trong thủ tục gọi hàm có thể được truy cậpvà thay đổi trực tiếp bởi thủ tục được gọiHữu ích trong trường hợp thủ tục muốn trả về nhiều hơnmột giá trị

Hàm và Thủ tục 26

Page 27: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Kiể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ếuBiến chứa địa chỉ lưu đốitượ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

Hàm và Thủ tục 27

Dim x As Integer = 7

biến x chứa giá trị là 7

Dim ten As String = “Nam”

x “Nam”ten

biến ten chứa địa chỉđến String “Nam”

Page 28: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Kiểu giá trị và kiểu tham chiếu

Kiểu giá trịTất cả các biến cơ sở đềucó kiểu giá trị, trừ kiểuString

Kiểu tham chiếuTất cả các biến không phảikiểu giá trị đều thuộc kiểutham chiếu

Ví dụ như các biến điềukhiển, các biến này thamchiếu đến đối tượngButton, 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ảikiểu giá trị đều thuộc kiểutham chiếu

Ví dụ như các biến điềukhiển, các biến này thamchiếu đến đối tượngButton, 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

Hàm và Thủ tục 28

Page 29: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Kiểu giá trị và kiểu tham chiếu

Kiểu tham trịKhi truyền bằng từ khóaByVal, bản sao giá trị củađối số chính là giá trị mà đốisố đó lưu trữGiá trị của đối số khôngthay đổi

Kiểu tham chiếuKhi truyền bằng từ khóaByVal, 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 đốitượng không thay đổinhưng giá trị của đối tượngcó thể thay đổiĐể tham chiếu đến đốitượng khác, sử dụng từkhóa ByRef

Khi truyền bằng từ khóaByVal, bản sao giá trị củađối số chính là giá trị mà đốisố đó lưu trữGiá trị của đối số khôngthay đổi

Khi truyền bằng từ khóaByVal, 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 đốitượng không thay đổinhưng giá trị của đối tượngcó thể thay đổiĐể tham chiếu đến đốitượng khác, sử dụng từkhóa ByRef

Hàm và Thủ tục 29

Page 30: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Ép kiểu ngầm địnhTrì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 địnhTrì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

Hàm và Thủ tục 30

Dim x As Double = 4.6Dim y As Integer = value1

y có giá trịlà 5

Page 31: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Kiểu dữ liệu Có thể được ép kiểu ngầm định thànhnhững kiểu lớn hơn

Bolean Object

Byte Short, Integer, Long, Decimal, Single,Double hoặc Object

Char String hoặc Object

Các phép ép kiểu ngầm định mở rộng

Char String hoặc Object

Date Object

Decimal Single, Double hoặc Object

Double Object

Integer Long, Decimal, Single, Double hoặc Object

Hàm và Thủ tục 31

Page 32: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Demo bật tùy chọn Option Strict

Thiết lập tùychọn Optionstrict là On

Hàm và Thủ tục 32

Thiết lập tùychọn Optionstrict là On

Page 33: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Khi 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 minhVisual Basic cung cấp lớp Convert để thực hiện các phépép kiểu

Lớp Convert

Ép kiểu thành Sử dụngphương thức

Ví dụ

Hàm và Thủ tục 33

Ép kiểu thành Sử dụngphương thức

Ví dụ

Integer ToInt32 value = Convert.ToInt32(“24”)

Decimal ToDecimal value = Convert.ToDecimal(“24.1”)

Double ToDouble value = Convert.ToDouble(“24.1”)

Page 34: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Cá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

Hàm và Thủ tục 34

Step OverStop DebuggingPause

Page 35: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Thực thi lệnh tiếp theo trong ứng dụng (dòng được đánhdấ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 đó

Step Into

Hàm và Thủ tục 35

Lệnh thực thi tiếp theolà lời gọi thủ tục

Điều khiển chuyểnthực hiện lệnh trongthủ tục

Page 36: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Thự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 IntoNế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

Step Over

Thự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 IntoNế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

Hàm và Thủ tục 36

Page 37: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Step Over

Lệnh thực thi tiếptheo chứa lời gọithủ tục

Hàm và Thủ tục 37

Chuyển đến dòng cóthể thực thi tiếptheo, không chuyểnđiều khiển vào thủtục được gọi

Page 38: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Step OutSau khi đã vào thủ tục được gọi, sử dụng Step out để thựcthi hết tất cả các lệnh còn lại của thủ tục và trả điều khiểnvề lệnh tiếp theo của thủ tục gọi

ContinueThực thi cho đến khi gặp breakpoint tiếp theo

Stop DebuggingKết thúc gỡ lỗi

Step Out - Continue - Stop

Step OutSau khi đã vào thủ tục được gọi, sử dụng Step out để thựcthi hết tất cả các lệnh còn lại của thủ tục và trả điều khiểnvề lệnh tiếp theo của thủ tục gọi

ContinueThực thi cho đến khi gặp breakpoint tiếp theo

Stop DebuggingKết thúc gỡ lỗi

Hàm và Thủ tục 38

Page 39: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Ứ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ânchia thành nhiều Sub, Function. Làm như vậy sẽ dễ dàngtrong việc thiết kế, phát triển và bảo trì ứng dụng lớnThủ 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ìnhchuyển đến thực thi thủ tục được gọi, sau khi thực thixong lại chuyển điều khiển về cho thủ tục gọiFunction 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ânchia thành nhiều Sub, Function. Làm như vậy sẽ dễ dàngtrong việc thiết kế, phát triển và bảo trì ứng dụng lớnThủ 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ìnhchuyển đến thực thi thủ tục được gọi, sau khi thực thixong lại chuyển điều khiển về cho thủ tục gọiFunction trả về giá trị còn thủ tục Sub thì không

Hàm và Thủ tục 39

Page 40: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Có thể truyền giá trị hay tham chiếu cho đối số. Truyềngiá trị bằng từ khóa ByVal, truyền tham chiếu bằng từkhóa ByRefVisual 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óaByVal, có thể thay đổi giá trị của biến tham chiếuSử dụng tùy chọn Optional để thiết lập giá trị mặc địnhcho biếnBiến có thể có phạm vi module, phạm vi thủ tục hayphạm vi khối lệnhKhô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ửdụng lớp Convert để ép kiểu tường minh

Tổng kết bài học

Có thể truyền giá trị hay tham chiếu cho đối số. Truyềngiá trị bằng từ khóa ByVal, truyền tham chiếu bằng từkhóa ByRefVisual 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óaByVal, có thể thay đổi giá trị của biến tham chiếuSử dụng tùy chọn Optional để thiết lập giá trị mặc địnhcho biếnBiến có thể có phạm vi module, phạm vi thủ tục hayphạm vi khối lệnhKhô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ửdụng lớp Convert để ép kiểu tường minh

Hàm và Thủ tục 40

Page 41: BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT

Visual Basic cung cấp các tùy chọn Debug như Step Into,Step Over, Step Out, Continue, Pause để dễ dàng trongviệc gỡ lỗi

Tổng kết bài học

Hàm và Thủ tục 41