I E= T*R
Phát biểu định nghĩa kiểu của người lập trình
Nếu trong 1 module nào đó cần dữ liệu có cấu trúc đặc thù mà VB chưa cung cấp, người lập trình sẽ dùng phát biểu TYPE đểđịnh nghĩa kiểu này. Phát biểu này kết hợp tên kiểu (tựđặt) với 1 cấu trúc dữ liệu gồm nhiều field dữ liệu (do dó ta thường gọi kiểu này là kiểu record hay structure). Cú pháp như sau :
Type TypeName [AfieldName As Type]+ End Type Ví dụ : Type SystemInfo CPU As Variant Memory As Long
DiskDrives(25) As String ' Fixed-size array. VideoColors As Integer
Cost As Currency
PurchaseDate As Variant End Type
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học Slide 151
Phát biểu định nghĩa kiểu Array
Nếu trong 1 module nào đó cần danh sách gồm nhiều dữ liệu có cấu trúc đồng nhất, ta sẽ dùng phát biểu định nghĩa kiểu array để miêu tả danh sách này. Cú pháp cơ bản như sau :
Dim varname[([subscripts])] [As [New] type]
trong đó subscripts là danh sách từ 1 đến n chiều cách nhau bằng dấu ',', mỗi chiều miêu tả phạm vi chỉ số các phần tử thuộc chiều đó ở dạng :
[lowerTo] upper.
Nếu chỉ số cận dưới của 1 chiều nào đó không được miêu tả thì VB chọn giá trị
ngầm định (là 0 hay 1).
Phát biểu định nghĩa giá trị cận dưới ngầm định có cú pháp :
Option Base {0|1}
Lưu ý dấu {..} miêu tả có 1 và chỉ 1 lần. Nếu không có phát biểu này thì VB chọn cận dưới là 0.
Ví dụ :
Dim vector(50) As Double 'vector có 51 phần từ từ 0 - 51 Dim MyArray (1 to 100, 1 to 50) As Double
Chương 6 : Các lệnh định nghĩa & khai báo VB
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học Slide 152
Phát biểu định nghĩa kiểu Array (tt)
Nếu số lượng phần tử của danh sách chưa biết tại thời điểm viết chương trình và chỉ biết tại thời điểm chạy, ta dùng 1 trong 2 cách sau :
khai báo số lượng tĩnh tại thời điểm viết, cách này thường phí phạm bộ nhớ hay khai báo thiếu số lượng phần tử.
Thí dụđể giải hệ n phương trình tuyến tính, n ẩn số, ta có thể khai báo tĩnh ma trận thông số như sau :
Option Base 1
Dim matran(100,100) As Double
nhưng nếu đại đa số lần dùng ứng dụng này, ta chỉ giải các hệ phương trình có 2, 3,... ẩn số thì sẽ rất phí phạm bộ nhớ. Còn 1 lần chạy nào đó, nếu ta cần giải hệ 200 phương trình thì chương trình sẽ chạy sai.
khai báo số lượng động tại thời điểm chạy. Cú pháp như sau :
Dim varname() [As [New] type]
Ví dụ : Dim matran() As Double 'để trống số lượng ...
n = Val(txtInput.Text)
ReDim matran(n,n) 'phân phối phần tử cho ma trận
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học Slide 153
Lệnh khai báo Declare
Các lệnh định nghĩa hằng, biến, kiểu, thủ tục cho phép ta sản sinh phần tử tương ứng trong phạm vi ngữ cảnh tương ứng (thủ tục, module, toàn cục).
Ngoài ra Windows (và nhiều hãng, cá nhân khác) đã viết nhiều module tổng quát, mỗi module chứa nhiều thủ tục khác nhau, các thủ tục này giải quyết những vần đề nào đó. Thí dụ ta có module các hàm lượng giác, module các hàm thống kê, module các hàm xử lý dữ liệu multimedia,...
Windows dùng kỹ thuật liên kết động các module trên vào ứng dụng dùng chúng, mỗi module được cất trên 1 file *.dll (dynamic link library).
VB cung cấp lệnh khai báo "Declare" để cho phép người lập trình khai báo chữ ký (signature, interface, prototype, header,...) của các thủ tục có sẵn trong các module *.dll để gọi nó trong ngữ cảnh của mình (module).
Chương 6 : Các lệnh định nghĩa & khai báo VB
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học Slide 154
Cú pháp 1 :
[Public | Private] Declare SubnameLib"libname" [Alias"aliasname"] [([arglist])]
Cú pháp 2 :
[Public | Private] Declare FunctionnameLib"libname" [Alias"aliasname"] [([arglist])] [As type]
Cú pháp 1 cho phép khai báo 1 subroutine với tên là nameở thư viện tên là libname, ta có thể gọi subroutine này bằng 1 tên khác là aliasnamevà truyền cho nó 1 danh sách đối số tương thích với arglist.
Cú pháp 2 cho phép khai báo 1 function với tên là nameở thư viện tên là
libname, ta có thể gọi function này bằng 1 tên khác là aliasnamevà truyền cho nó 1 danh sách đối số tương thích với arglist. Sau khi hoàn thành, function sẽ trả về 1 giá trị kết quả thuộc kiểu type.
Chi tiết về sự khác biệt giữa subroutine và function sẽđược trình bày trong chương 9 và 10.
Lệnh khai báo Declare (tt)
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học Slide 155 Chúng ta đã trình bày qui trình thiết kế trực quan giao diện của trình
MiniCalculator cho phép giả lập 1 máy tính tay đơn giản. Chương trình này chỉ có 1 form, trong form này chúng ta sẽđịnh nghĩa các hằng, biến cục bộ sau đây để
phục vụ hoạt động cho ứng dụng : Option Explicit
Const IDC_EQUAL = 0 ' định nghĩa các hằng gợi nhớ miêu tả toán tử
Const IDC_ADD = 1 Const IDC_SUB = 2 Const IDC_MUL = 3 Const IDC_DIV = 4
Private dblDispValue As Double ' biến lưu giá trịđang hiển thị
Private dblOldValue As Double ' biến lưu giá trị trước đó Private dblMemValue As Double ' biến lưu giá trị trong bộ nhớ
Private blnFpoint As Boolean ' trạng thái nhập số nguyên/lẻ
Private bytPosDigit As Byte ' vị trí lý số lẻđang nhập
Private intPosNeg As Integer ' trạng thái miêu tả giá trị âm/dương Private bytOperationId As Byte ' id của phép toán cần thực hiện
Private blnFAfterOp As Boolean ' trạng thái nhập ký sốđầu sau phép toán
Thí dụ về các lệnh định nghĩa VB
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Tin học Slide 156 Chương 7 BIỂU THỨC VB Chương 7 : Biểu thức VB MÔN TIN HỌC
Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM
Môn : Tin học Slide 157