Ngôn ngữ Visual Basic

Một phần của tài liệu Tài liệu hướng dẫn thực tập tốt nghiệp công nghệ thông tin (Trang 27 - 51)

CHƯƠNG I Công cụ lập trình

I.2.Ngôn ngữ Visual Basic

I.2.1. Kiểu, biến & biểu thức

I.2.1.1. Biến

VB không bắt buộc bạn phải khai báo biến, tuy nhiên một lời khuyên là bạn hãy đặt chế độ

bắt buộc khai báo bi ến. Để thiết lập chế độ này, bạn vào menu Tools | Options, trên tab Editor, đánh dấu vào “Require Variable Declaration ”. Sau đó, bất kỳ một Form hay

Module nào được tạo mới đều có khai báo sau đây ở đầu tiên. Option Explicit

Với khai báo này, tất cả các biến trước khi sử dụng đều phải có khai báo với cú pháp sau. Dim <Tên biến> As <Kiểu biến>

Ví dụ

Dim i As Integer ' Biến kiểu số nguyên

Dim s As String ' Biến kiểu xâu ký tự Dim a As Double ' Biến kiểu số thực kép

Dim c, d, e As Double ' Khai báo thế này là sai, chỉ có e là Double ' Còn c, d là kiểu Variant (biến tùy ý)

Dim c As Double, d As Double, e As Double

' Khai báo thế này mới đúng

Quy ước đặt tên biến

- Bắt đầu bằng chữ cái, không bắt đầu bằng chữ số.

- Tên biến có thể chứa chữ cái, chữ số, ký tự “_”, nhưng không chứa các ký t ự đặc

biệt.

- Độ dài tối đa của tên biến là 255 ký tự.

I.2.1.2. Kiểu biến

Biến được sử dụng để lưu các giá trị, giá trị có thể là số (số thứ tự, số người...), có thể là

dạng văn bản (xâu ký tự). Ngồi ra biến có thể ở dạng phức tạp, ví dụ mảng: chuỗi các giá

Khi bạn đã biết lập trình trên một ngôn ngữ, việc hiểu kiểu biến của một ngôn ngữ khác là

tương đối đơn giản. Các kiểu biến trong VB được chia thành các loại sau

Biến kiểu số

Kiểu Mô tả Khoảng giá trị Ví dụ

Byte Số nguyên ngắn 0..255

Integer Số nguyên -32768.. 32767

Long Số nguyên dài -2147483648.. 2147483647

Single Số thực độ chính xác đơn

Double Số thực độ chính xác kép

' Thay gì viết

Dim Result As Long (adsbygoogle = window.adsbygoogle || []).push({});

Result = 30345 * 100 ' sẽ bị overflow error

' Hãy viết như sau:

Dim Result As Long Result = 30345

Result = Result * 100 ' không bị overflow error

Biến kiểu xâu ký t

Mỗi ký tự trong máy tính tương ứng với một số hiệu (mã ASCII). Một chuỗi các ký tự ghép

với nhau tạo ra một xâu ký tự (String). String trong VB được ký hiện trong cặp ngoặc kép,

ví dụ:

Dim FirstWord As String

Dim SecondWord As String * 20 ' Xâu ký tự có độ dài tối đa 20 ký tự Dim Greeting As String

FirstWord = "Hello" SecondWord = "World"

Greeting = FirstWord & SecondWord ' Greeting bây giờ là "HelloWorld" Greeting = FirstWord & " " & SecondWord

Biến kiểu logic

Kiểu logic là kiểu biến cơ bản, có mặt trong hầu hết các ngôn ngữ. Biến logic (Boolean) chỉ

mang hai giá trị là True (đúng) và False (sai).

Biến kiểu Boolean thường được sử dụng với các toán tử logic (And, Or, Xor, Not). Các biểu thức điều kiện trả về giá trị kiểu Boolean.

Mảng là kiểu dữ liệu phức gồm nhiều giá trị cùng kiểu sắp xếp liên tiếp nhau. Các phần

tử này được truy xuất qua chỉ số. Mảng trong VB gồm mảng tĩnh và mảng động, mảng

tĩnh là mảng được xác định kích thước ngay từ khi dịch chương trình, mảng động có kích

thước chưa xác định và chỉ được cấp phát khi run-time.

Tốc độ truy xuất dữ liệu của mảng tĩnh và mảng động của VB là như nhau Dim N(3) As Long ' Không nên khai báo kiểu này, gây mập mờ

Dim M(1 To 3) As Long ' Khai báo với cả chỉ số đầu và cuối cho tường minh

Dim Q() As Long Dim i As Integer M(1) = 1 M(2) = 2 M(3) = 3 ReDim Q(1 To 100)

For i = LBound(Q) To UBound(Q) Q(i) = i

Next

Ki ểu do người dùng định nghĩa

Ngoài các kiểu dữ liệu chuẩn của VB, người dùng cịn có th ể tự định nghĩa kiểu biến của

riêng mình (giống với kiểu bản ghi – Record của Pascal). Private Type TDam

dai As Double ' cm rong As Double ' cm cao As Double ' cm ten As String * 4

End Type (adsbygoogle = window.adsbygoogle || []).push({});

Private Sub Form_Load()

Dim dam As TDam ' Biến [dam] thuộc kiểu TDam do người dùng đnghĩa dam.dai = 500 ' Truy xuất các trường bằng dấu chấm sau tên biến dam.rong = 22

dam.cao = 40 dam.ten = "D1"

With dam ' Truy xuất nhanh các trường bằng câu lệnh With MsgBox .ten & " " & .rong & "x" & .cao & "x" & .dai

End With ' Các trường trong With truy xuất không cần tên biến

End Sub

Các bạn lưu ý phân biệt kiểu và biến (rất nhiều người nhầm lẫn 2 khái niệm này với nhau). Trong ví dụ nêu trên TDam là kiểu (giống như kiểu Integer, kiểu String) chứ không phải là

một biến để gán giá trị.

Trong Sub Form_Load, dam là một biết kiểu TDam. Theo khai báo đã có, biến dam sẽ có các trường (fields) là dai, rong, cao, ten. Để truy nhập các trường của biến dam, sử dụng

Kiểu liệt kê (Enum)

Kiểu liệt kê là kiểu do người dùng định nghĩa, biến thuộc kiểu này có giá tr ị là một trong

các giá trị được liệt kê trong ki ểu. Sử dụng kiểu liệt kê vừa đơn giản vừa có tốc độ cao

(nhanh hơn rất nhiều so với thói quen sử dụng String để phân biệt các trường hợp). Để nắm

rõ cách sử dụng kiểu Enum, hãy quan sát hình minh họa bên dưới.

Kiểu Variant

Kiểu Variant là một kiểu dữ liệu khác lạ đối với những người mới chuyển từ Pascal sang

VB. Kiểu Variant chấp nhận mọi giá trị có thể: số nguyên, số thực, xâu ký tự, mảng, kiểu dữ liệu người dùng định nghĩa...

Sử dụng Variant cho phép người lập chình uyển chuyển, mềm dẻo hơn trong q trình lập

trình. Tuy nhiên, Variant có nh ược điểm là rất chậm, do đó bạn nên hạn chế dùng trong

trường hợp sử dụng tính tốn nhiều (nhất là đối với các ứng dụng tính tốn k ết cấu trong

ngành Tin học Xây dựng)

Kiểu Collection

Sử dụng mảng với chỉ số tuần tự cho tốc độ làm việc nhanh nhưng không thật sự mềm dẻo. Nếu chúng ta muốn truy cập một phần tử theo tên thành viên thì vi ệc sử dụng cấu trúc dữ

liệu kiểu mảng là không hiệu quả do thời gian tìm kiếm lâu.

Trong SAP2000, tên phần tử được đặt tùy ý (số hoặc chữ), nếu là số thì thường khơng theo

thứ tự hoặc khơng liên tiếp. Do đó sử dụng mảng để lưu các phần tử đọc được từ file kết quả của SAP là không khả thi.

VB hỗ trợ kiểu dữ liệu tập hợp (Collection) cho phép truy cập phần tử theo tên (cấu trúc dữ liệu này được tối ưu hóa nên tốc độ tìm kiếm rất nhanh).

Dim Ten As New Collection ' Tạo mới một Collection

Ten.Add "Cong nghe Thong tin" ' Thêm 1 phần tử vào Collection Ten.Add "Tin hoc Xay dung"

Ten.Add "Cong nghe phan mem" Ten.Add "Ky thuat He thong" (adsbygoogle = window.adsbygoogle || []).push({});

MsgBox Ten(1) ' Sử dụng tập hợp như mảng MsgBox Ten(3) ' Truy cập theo chỉ số

Dim TuDien As New Collection

TuDien.Add "Cong nghe Thong tin", "CNTT" ' Thêm 1 phần tử gồm giá trị, tên TuDien.Add "Tin hoc Xay dung", "THXD" ' Tên phần tử phải là duy nhất TuDien.Add "Cong nghe phan mem", "CNPM"

TuDien.Add "Ky thuat He thong", "KTHT"

MsgBox TuDien("CNTT") ' Truy cập phần tử theo tên MsgBox TuDien("CNPM")

Quy ước đặt tên biến theo kiểu

Bảng dưới đây liệt kê các kiểu biến thường sử dụng, để việc lập trình được thuận tiện, người ta thường đặt kiểu biến là tiếp đầu ngữ - prefix (với 3 ký tự). Việc đặt tên biến như vậy sẽ

giúp cho người lập trình khơng bị nhầm lẫn về kiểu biến, tránh được những sai sót đáng tiếc về sau.

Tiếp đầu ngữ Kiểu Ví dụ

bln Boolean blnButtonEnabled

byt Byte bytLength

cur Currency curSales98

dte Date dteOverdue

dbl Double dblScientificAmt

int Integer intYear1998

lng Long lngWeatherDistance

obj Object objWorksheetAcct99

sng Single sngSales1stQte

str String strFirstName

vnt Variant vntValue

I.2.1.3. Tốn tử

Tốn tử Giải thích Ví dụ Kết quả

^ Mũ 2 ^ 3 8

* Nhân 2 * 3 6

/ Chia 6 / 2 3

+ Cộng 2 + 3 5

- Trừ 6 – 3 3

\ chia nguyên 11 \ 3 3

& Nối xâu "Hi, " & "There" "Hi, There"

I.2.1.4. Biểu thức (adsbygoogle = window.adsbygoogle || []).push({});

Biểu thức là sự kết hợp của các giá trị, biến, toán tử với nhau. Biểu thức biểu diễn trên máy

tính có dạng gần giống với biểu thức toán học mà chúng ta th ường sử dụng: Các tốn tử

khơng được thực hiện theo thứ tự từ trái sang phải mà có sự ưu tiên giữa các toán tử, bảng

sau đây liệt kê thứ tự ưu tiên (từ cao đến thấp) của các toán tử trong cùng một biểu thức.

Thứ tự Tốn tử Ví dụ Kết quả 1 Ngoặc () (2 + 3) * 7 35 2 ^ 2 ^ 3 + 1 9 3 *, /, \, Mod 2 + 3 * 7 23 4 +, - 10 – 4 * 2 + 1 3 I.2.1.5. Phép gán

Phép gán làm nhiệm vụ đưa một giá trị mới vào trong biến, giá trị này được tính từ các giá

trị đã có bằng các biểu thức. Cú pháp của phép gán như sau <Tên biến> = <Biểu thức>

Chú ý, vế trái của phép gán bao giờ cũng là biến, vế phải là biểu thức. Vế trái của phép gán

không được là hằng số, biểu thức. Các ví dụ áp dụng.

Dim n As Integer n = 10

n = 2*n*(n+1) ' n = 2*10*11 = 220 n = n+1 ' n = 221

Dim s1 As String, s2 As String s1 = "Hello,"

s2 = "There"

s1 = s1 & " " & There ' s1 = "Hello, There"

I.2.1.6. Toán tử điều kiện

Các toán tử điều kiện dùng để so sánh các giá trị (biểu thức) với nhau, giá trị trả về là kiểu

Boolean (True – đúng hoặc False – sai)

Tốn tử Mơ tả Ví dụ Kết quả

= Bằng 7 = 2 False

> Lớn hơn 6 > 3 True

>= Lớn hơn hay bằng 23 >= 23 True

<= Nhỏ hơn hay bằng 4 <= 21 True

<> Khác 3 <> 3 False

I.2.1.7. Toán tử logic

Các điều kiện logic có thể được kết hợp với nhau bằng các toán tử logic

Toán tử Mơ tả Ví dụ Kết quả

And Cả hai toán hạng cùng đúng (2 < 3) And (4 < 5) True

Or Ít nhất một trong hai toán hạng đúng (2 > 3 ) Or (6 < 7) True

Xor Một toán hạng đúng, 1 toán hạng sai (2 < 3) Xor (7 > 4) False

Not Đảo Not (3 = 3) False (adsbygoogle = window.adsbygoogle || []).push({});

I.2.2. Các cấu trúc điều khiển

Chương trình muốn hoạt động theo sự điều khiển khơng chỉ có các lệnh gán mà còn ph ải

gồm các lệnh điều khiển (rẽ nhánh, lặp...). Các lệnh này cho phép chương trình hoạt động

theo một kịch bản xác định.

I.2.2.1. Cấu trúc If...Then... End If

If <Điều kiện> Then <Các lệnh> End If

Kiểm tra điều kiện (biểu thức logic)

- Nếu điều kiện là đúng (True) thì thực hiện các lệnh nằm trong cấu trúc (giữa If và

End If)

- Nếu điều kiện sai (False) thì bỏ qua, khơng thực hiện các lệnh này

I.2.2.2. Cấu trúc If...Then... Else... End If

If <Điều kiện> Then

<Các lệnh nếu điều kiện đúng> Else

<Các lệnh nếu điều kiện sai> End If

Kiểm tra điều kiện

- Nếu điều kiện đúng, thực hiện nhánh đúng (Giữa If và Else) - Nếu điều kiện sai, thực hiện nhánh sai (Giữa Else và End If)

I.2.2.3. Select Case

Select Case <Biểu thức> Case <Giá trị 1> <Các lệnh 1> Case <Giá trị 2> <Các lệnh 2>

Case <Giá trị 3>, <Giá trị 4>: <Các lệnh 3, 4>

Case Else

<Các lệnh còn lại> End Select

Kiểm tra giá trị của một <Biểu thức>, tùy theo giá trị của biểu thức là gì thì thực hiện các

lện tương ứng. Khác với lệnh If chỉ có tối đa 2 nhánh, lệnh Select Case có th ể chia nhiều

nhánh, rất thích hợp cho các lệnh điều kiện phức tạp.

' Kiểm tra kết quả của câu trắc nghiệm

Select Case txtGrade.Text Case "A"

lblAnnounce.Caption = "Perfect!” Case "B"

lblAnnounce.Caption = "Great!" Case "C"

lblAnnounce.Caption = "Study harder!" Case "D"

lblAnnounce.Caption = "Get help!" Case "F" (adsbygoogle = window.adsbygoogle || []).push({});

lblAnnounce.Caption = "Back to basics!" Case Else

lblAnnounce.Caption = "Error in grade" End Select

I.2.2.4. Vòng lặp Do While... Loop

Do While <Điều kiện> <Các lệnh>

Loop

Nếu điều kiện cịn đúng thì thực hiện tiếp các lệnh giữa Do... Loop. Đây là vòng lặp kiểm

tra điều kiện trước, có nghĩa là nếu <Điều kiện> sai ngay từ đầu thì <Các lệnh> sẽ khơng được thực hiện 1 lần nào.

intCtr = 0

Do While intCtr <= 10 lblOut.Caption = intCtr intCtr = intCtr + 1 Loop

I.2.2.5. Vòng lặp Do... Loop While

<Các lệnh>

Loop While <Điều kiện>

Thực hiện các lệnh giữa Do... Loop cho đến khi điều kiện sai. Đây là vịng lặp kiểm tra điều kiện sau, có nghĩa là <Các lệnh> sẽ được thực hiện ít nhất một lần (kể cả khi <Điều kiện>

sai ngay từ đầu)

I.2.2.6. Vòng lặp For... Next

For <biến Đếm> = <bắt Đầu> To <kết Thúc> [Step <khoảng Tăng>] <Các lệnh>

Next [biến Đếm]

- Lặp với <biến Đếm> bắt đầu từ giá trị <bắt Đầu>, mỗi lần tăng một lượng <khoảng

Tăng> cho đến bằng giá trị <kết Thúc>. Mỗi lần lặp thực hiện các lệnh giữa For...

Next

- Nếu không khai báo Step <khoảng Tăng>, giá trị tăng mặc định là 1

- Muốn lặp với <biến Đếm> giảm dần, đặt <khoảng Tăng> là giá trị âm (ví dụ -1) For intCtr = 1 To 10

lblOut.Caption = intCtr Next

For intCtr = 10 To 1 Step -1 lblOut.Caption = intCtr Next

I.2.2.7. Vòng lặp For Each... Next

For Each <phần tử> In <nhóm> <các lệnh>

Next

Biến <phần tử> (phải là kiểu Variant) lặp qua tất cả các phần tử con của <nhóm> (thường

là kiểu tập hợp – Collection), mỗi lần lặp thực hiện <các lệnh>. Đây là lệnh rất thuận tiện để làm việc với nhóm các phần tử (ví dụ nhóm các control của form). Đoạn chương trình ví dụ

dưới dây minh họa vòng lặp For Each với một tập hợp các xâu ký tự. Dim s As Variant (adsbygoogle = window.adsbygoogle || []).push({});

Dim Ten As New Collection Ten.Add "CNTT"

Ten.Add "THXD" Ten.Add "CNPM" Ten.Add "KTHT" For Each s In Ten MsgBox s Next

I.2.3. Chương trình con

Cũng như tất cả các ngơn ngữ lập trình khác, khi có nhi ều công việc được thực hiện lặp đi

lặp lại bởi cùng một đoạn code, cách tốt nhất là đưa đoạn code này vào một chương trình

con để có thể sử dụng lại nhiều lần. Chương trình con có thể là Sub – giống procedure hoặc Function – giống function trong Pascal.

I.2.3.1. Sub

Public | Private Sub <Tên sub> (danh sách tham số) <các lệnh>

End Sub Ví dụ

Private Sub TangGiaTri(a As Integer, b As Integer) a = a+b

End Sub

Trong đoạn chương trình ví dụ trên: - <Tên sub> là "TangGiaTri"

- Các tham số là a (kiểu Integer), b (kiểu Integer) - Thủ tục thực hiện nhiệm vụ tăng biến a lên 1 lượng b

I.2.3.2. Function

Public | Private Function <Tên function> (danh sách tham số) As <Kiểu function> <các lệnh>

<Tên function> = <giá trị trả về> <các lệnh>

End Function Ví dụ

Private Function Tong(a As Integer, b As Integer) As Integer Tong = a + b

End Function

Trong đoạn chương trình ví dụ trên: - <Tên function> là "Tong" - <Kiểu function> là Integer

- Các tham số là a (kiểu Integer), b (kiểu Integer) - Hàm trả về tổng của 2 số a và b

I.2.3.3. Tham biến & tham trị

Private Sub TangGiaTri(a As Integer, b As Integer) a = a+b

End Sub

Private Sub Command1_Click() Dim c As Integer

c = 10

TangGiaTri(c, 10) MsgBox c

End Sub

Kết quả của hộp thoại MsgBox là 20, có ngh ĩa là biến c đã được tăng lên 10 đơn vị. Vẫn đoạn chương trình này, b ạn bổ sung thêm t ừ khóa ByVal vào trước tham số a trong Sub

TangGiaTri để được đoạn chương trình sau. Ví dụ 2: (adsbygoogle = window.adsbygoogle || []).push({});

Private Sub TangGiaTri(ByVal a As Integer, b As Integer) a = a+b

End Sub

Private Sub Command1_Click() Dim c As Integer

c = 10

TangGiaTri(c, 10) MsgBox c

End Sub

Chạy đoạn chương trình này, hộp thoại MsgBox trả về giá trị 10. Tại sao vậy? Nguyên nhân

vì trong tr ường hợp này bi ến a trong Sub TangGiaTri không ph ải là bi ến c trong Sub

Command1_Click. a chỉ là bản sao của c (do được truyền giá trị - by value), khi đó ta gọi a là tham trị.

Trong trường hợp của ví dụ 1, khai báo đầy đủ là

Private Sub TangGiaTri(ByRef a As Integer, ByRef b As Integer)

Khi đó, biến a trong Sub TangGiaTri chính là bi ến c trong Sub Command1_Click, tăng giá

trị của a chính là tăng giá trị của c. a gọi là tham chiếu (reference) của c. Trường hợp này ta gọi a là tham biến.

Chú ý: Nếu khơng khai báo gì, VB mặc định là ByRef (quy ước này ngược với Pascal – mặc

định là tham trị)

I.2.4. Form

Windows là hệ điều hành cửa sổ, tất cả các giao ti ếp của người sử dụng với các chương

trình chủ yếu thơng qua cửa sổ. Cửa sổ chứa các control gọi là Form, trong VB có nhiều loại Form, tất cả đều có những thuộc tính chung.

I.2.4.1. Các thuộc tính của Form

Một phần của tài liệu Tài liệu hướng dẫn thực tập tốt nghiệp công nghệ thông tin (Trang 27 - 51)