Biến trong chương trình con

Một phần của tài liệu PHẦN I: Mở đầu1. Tổng quan về thiết kế và tự động hóa thiết kế công pot (Trang 54 - 56)

L b= Bound(Mang_bandau): U b= UBound(Mang_bandau)

9.4.Biến trong chương trình con

Nhưđã trình bày ở phần trước, biến trong chương trình con có tính chất cục bộ. Tuy nhiên hình thức cấp phát bộ nhớ cho biến thì có thể khác nhau. Cụ thể như sau:

Ø

ØTrong phần khai báo của chương trình con không sử dụng từ khóa Static.

Khi đó có hai trường hợp:

Các biến được khai báo vi t khóa Dim: mỗi lần chương trình con được gọi, biến sẽđược tạo và cấp phát bộ nhớ. Khi chương trình con kết thúc, bộ nhớ dành cho biến được giải phóng. Do đó, giá trị của biến sau mỗi phiên làm việc của chương trình con sẽ không được lưu trữ.

Các biến được khai báo vi t khóa Static: biến sẽđược khởi tạo một lần khi mô-đun chứa chương trình con được nạp vào trong bộ nhớ và sẽ tồn tại trong bộ nhớ cùng với mô-đun đó. Vì vậy, giá trị của biến sau mỗi phiên làm việc của chương trình con sẽđược lưu trữ. Các biến kiểu này được gọi là biến tĩnh (Static)

Ví dụ: trong chương trình con StVariable dưới đây có hai biến địa phương, stA là biến tĩnh và B là biến thông thường.

Public Sub StVariable() Static stA As Long Dim B As Long B = B + 1 stA = stA + 1

Debug.Print "Lan chay " & Str(stA), "stA=" & Str(stA), "B=" & Str(B)

End Sub

Kết quả sau 2 lần chạy chương trình con trên

Giải thích: Ngay khi được khai báo, tất cả các biến đều được tựđộng khởi tạo giá trị ban đầu, nếu kiểu dữ liệu của biến là dạng số thì giá trị khởi tạo bằng 0, còn nếu kiểu dữ liệu của biến là chuỗi thì giá trị khởi tạo mặc định là chuỗi rỗng. Trong chương trình trên, ngay trước khi kết thúc ở lần chạy đầu tiên, giá trị của các biến như sau:

Ø

ØBiến B = 1. Ø

ØBiến stA = 1.

Khi kết thúc lần chạy thứ nhất, biến B (biến thông thường) sẽ được giải phóng, còn biến stA (biến tĩnh) vẫn được lưu giá trị (=1) của nó lại trong bộ nhớ. Do đó đến lần chạy thứ hai, biến B được tạo mới sẽ nhận giá trị là B=B+1=0+1=1, còn biến stA do vẫn tồn tại từ lần trước nên giá trị của nó là stA=stA+1=1+1=2.

Ø

ØTrong khai báo của chương trình con có sử dụng từ khóa Static

Khi đó tất cả các biến khai báo trong chương trình con sẽ là các biến tĩnh.

Ví dụ: trong chương trình con StPro dưới đây đã sử dụng khai báo Static ở đầu chương trình.

Public Static Sub StPro() Dim a As Long

Dim b As Long a = a + 1 b = b + 1 a = a + b

Debug.Print "Lan chay " & Str(b)

Debug.Print " ", "a=" & Str(a), "b=" & Str(b) End Sub

Các biến tĩnh thường được sử dụng khi muốn lưu trữ kết quả những lần chạy của chương trình con. Chú ý rằng dù biến trong chương trình con là biến thông thường hay biến tĩnh thì vẫn luôn mang tính chất cục bộ.

Một phần của tài liệu PHẦN I: Mở đầu1. Tổng quan về thiết kế và tự động hóa thiết kế công pot (Trang 54 - 56)