340 likes | 553 Views
Chương 7. Biểu thức VB. Tổng quát về biểu thức VB. Biểu thức là phương tiện dùng để mô tả qui trính tính toán một giá trị. Biểu thức giống như công thức toán học nhưng có thể áp dụng cho nhiều kiểu dữ liệu số và khác số. Biểu thức là sự kết hợp các yếu tố sau :
E N D
Chương 7 Biểu thức VB
Tổng quát về biểu thức VB • Biểu thức là phương tiện dùng để mô tả qui trính tính toán một giá trị. • Biểu thức giống như công thức toán học nhưng có thể áp dụng cho nhiều kiểu dữ liệu số và khác số. • Biểu thức là sự kết hợp các yếu tố sau : • Toán hạng : các biểu thức cơ bản. • Toán tử : +, -, *, /, . . . • Qui tắc kết hợp toán tử và toán hạng. • Qui trình mà máy dùng để tính trị của biểu thức. • Kiểu dữ liệu của biểu thức.
Các biểu thức cơ bản • Biến. • Hằng (số, chuỗi). • Giá trị tức thời. • Lời gọi hàm. • (Biểu thức)
Các toán tử • Phân biệt theo số lượng toán hạng : • Toán tử 1 ngôi : chỉ cần 1 toán hạng. • Toán tử 2 ngôi : cần 2 toán hạng. • VB thường dùng các ký tự đặc biệt để miêu tả toán tử : cộng (+), trừ (-), nhân (*), chia (/), . . . • Trường hợp các toán tử dùng chung ký tự biểu diễn thì phân biệt theo ngữ cảnh. Ví dụ : phép trừ và số âm phân biệt bằng số toán hạng.
Các nhóm toán tử • Phân chia theo độ ưu tiên giảm dần, có 3 nhóm : • Toán tử số học. • Toán tử so sánh. • Toán tử luận lý. • Toán hạng của toán tử số học là dữ liệu số. Kết quả của biểu thức số học là giá trị số. • Toán hạng của toán tử so sánh là dữ liệu số. Kết quả của biểu thức so sánh là giá trị boolean. • Toán hạng của toán tử luận lý là dữ liệu boolean. Kết quả của biểu thức luận lý là giá trị boolean.
Các toán tử số học • Toán tử & : nối kết 2 chuỗi thành 1 chuỗi. • Toán tử + : cộng 2 đại lượng. • Toán tử - : trừ đại lượng 2 ra khỏi đại lượng 1. • Toán tử * : nhân 2 đại lượng. • Toán tử / : chia đại lượng 1 cho đại lượng 2. • Toán tử \ : chia nguyên. • Toán tử Mod : lấy phần dư của phép chia nguyên. • Toán tử ^ : lũy thừa.
Toán tử '&' để nối kết 2 chuỗi • Cú pháp : <b.thức 1> & <b.thức 2> • Tác động : nối kết 2 toán hạng kiểu chuỗi thành 1 chuỗi mới, nếu 1 trong 2 toán hạng thuộc kiểu số thì nó sẽ được đổi thành dạng chuỗi trước khi thực hiện nối kết. Ví dụ : Dim MyStr As String MyStr = "Hello" & " World" ' kết quả là "Hello World". MyStr = "Check " & 123 & " Check" ' kq là "Check 123 Check". Ký tự Số
Toán tử '+' trên dữ liệu số • Cú pháp : <b.thức 1> + <b.thức 2>hoặc +<b.thức> • Tác động : cộng. Nếu cả 2 toán hạng đều là số thì kiểu kết quả là kiểu chính xác nhất của phép + theo thứ tự sau : Byte, Integer, Long, Single, Double, Currency, Decimal. • Ngoại lệ :
Toán tử '+' trên dữ liệu Variant • Nếu kiểu của cả 2 toán hạng đều là Variant thì việc xác định ngữ nghĩa phép + và kiểu kết quả sẽ theo qui luật của bảng sau :
Toán tử '+' trên dữ liệu Variant • Nếu ít nhất 1 toán hạng không phải Variant thì việc xác định ngữ nghĩa phép + và kiểu kết quả sẽ theo qui luật của bảng sau : Null cho biết giá trị chứa trong biến không hợp lệ
Toán tử '-' trên dữ liệu số • Cú pháp : <b.thức 1>-<b.thức 2>hoặc -<b.thức> • Tác động : trừ. Nếu cả 2 toán hạng đều là số thì kiểu kết quả là kiểu chính xác nhất của phép - theo thứ tự sau : Byte, Integer, Long, Single, Double, Currency, Decimal. • Ngoại lệ :
Toán tử '*' trên dữ liệu số • Cú pháp : <b.thức 1>*<b.thức 2> • Tác động : nhân. Nếu cả 2 toán hạng đều là số thì kiểu kết quả là kiểu chính xác nhất của phép * theo thứ tự sau : Byte, Integer, Long, Single, Double, Currency, Decimal. • Ngoại lệ :
Toán tử '/' trên dữ liệu số • Cú pháp : <b.thức 1>/<b.thức 2> • Tác động : chia. Kiểu kết quả thường là kiểu Double hay Variant chứa Double. • Ngoại lệ :
Toán tử '\' và Mod trên dữ liệu số • Cú pháp : <b.thức 1> \ <b.thức 2> • Tác động : chia nguyên. Hai toán hạng được đổi về dạng nguyên (được làm tròn) trước khi thực hiện phép chia. Kiểu kết quả hoặc là Byte, Integer, Long hoặc là Variant (chứa trị Byte, Integer, Long). Ví dụ : 19 \ 6.7 kết quả là 2 (19 \ 7). • Cú pháp : <b.thức 1> MOD <b.thức 2> • Tác động : chia lấy phần dư. Đổi 2 toán hạng về dạng nguyên (được làm tròn) trước khi thực hiện phép chia. Kiểu kết quả hoặc là Byte, Integer, Long hoặc là Variant (chứa trị Byte, Integer, Long). Ví dụ : 19 MOD 6.7 kết quả là 5 (19 mod 7).
Toán tử '^' trên dữ liệu số • Cú pháp : <b.thức 1> ^ <b.thức 2> • Tác động : lũy thừa. 2 toán hạng thuộc kiểu số (Byte, Integer, Long, Single, Double,...) với hạn chế là nếu phần mũ là số nguyên thì phần cơ số (number) mới được phép âm. Kiểu kết quả hoặc là Double hoặc là Variant (chứa trị Double). Ví dụ : (-5) ^ 3 kết quả là -125.0 3 ^ 3 ^ 3 kết quả là 19683.0 3.2 ^ 2.7 kết quả là 23.115587799
Các toán tử so sánh dữ liệu • Cú pháp : <b.thức 1> Op <b.thức 2> • Tác động : tùy theo Op là 1 trong các toán tử so sánh sau : • < : phép toán nhỏ hơn • <= : phép toán nhỏ hơn hoặc bằng • > : phép toán lớn hơn • >= : phép toán lớn hơn hoặc bằng • = : phép toán so sánh bằng • <> : phép toán so sánh khác • 2 toán hạng thường là kiểu số hay chuỗi. Kết quả luôn là kiểu Boolean.
Toán tử Like • Cú pháp : <chuỗi> Like <mẫu> • Tác động : xác định xem chuỗi có thuộc về mẫu hay không. Nếu thuộc về thì cho kết quả True, nếu không thuộc về thì cho kết quả False.
Ví dụ MyCheck = "aBBBa" Like "a*a" MyCheck = "F" Like "[A-Z]" MyCheck = "F" Like "[!A-Z]" MyCheck = "a2a" Like "a#a" MyCheck = "aM5b" Like "a[L-P]#[!c-e]" MyCheck = "BAT123khg" Like "B?T*" MyCheck = "CAT123khg" Like "C?J*" True True False True True True False
Option Compare • Chế độ so sánh chuỗi thay đổi tùy theo lựa chọn : Option Compare { Binary | Text } • Trong chế độ so sánh Binary, VB dựa vào thứ tự sắp xếp các ký tự trên cơ sở mã nhị phân của các ký tự. Trong bảng mã ISO8859-1, ta có : A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø • Trong chế độ so sánh Text, VB dựa vào thứ tự sắp xếp các ký tự trên cơ sở ngữ nghĩa ký tự và thông tin "local" của Windows (do đó không phân biệt chữ thường và hoa) : (A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)
Toán tử Is • Cú pháp : <biến đối tượng 1> Is <biến đối tượng 2> • Tác động : xác định xem 2 biến đối tượng có tham khảo đến cùng một đối tượng hay không. Nếu cùng trỏ đến một đối tượng, kết quả là True. Ngược lại, kết quả False. Ví dụ : Dim MyObject As Object, YourObject As Object Dim ThisObject As Object, ThatObject As Object Dim MyCheck As Boolean Set YourObject = New Circle ' (1) tạo đối tượng và gán tham khảo. Set ThisObject = YourObject ' (2) Set ThatObject = New Circle ' (3) tạo đối tượng và gán tham khảo. MyCheck = YourObject Is ThisObject '(4) MyCheck = ThatObject Is ThisObject '(5)
MyObject YourObject (1) ThisObject ThatObject (3) Minh họa Tham khảo (địa chỉ) (1) (2) (3) True MyCheck = YourObject Is ThisObject False MyCheck = ThatObject Is ThisObject
Các toán tử luận lý • Các toán tử dùng chung cho phép luận lý và bitwise • Toán tử And : phép toán 'và'. • Toán tử Or : phép toán 'hoặc'. • Toán tử Xor : phép toán loại trừ (khác nhau). • Toán tử Not : phép toán đảo. • Toán tử Eqv : phép toán tương đương (giống nhau). • Toán tử Imp : phép toán kéo theo. • Nếu các toán hạng thuộc kiểu Boolean thì toán tử thực hiện phép luận lý. • Nếu các toán hạng thuộc kiểu số thì toán tử thực hiện phép bitwise.
Toán tử luận lý And • Cú pháp : <b.thức 1>And<b.thức 2> • Tác động : thực hiện phép And luận lý. Kết quả theo bảng sau :
Toán tử luận lý Or • Cú pháp : <b.thức 1>Or<b.thức 2> • Tác động : thực hiện phép Or luận lý. Kết quả theo bảng sau :
Toán tử luận lý Xor • Cú pháp : <b.thức 1>Xor<b.thức 2> • Tác động : thực hiện phép Xor luận lý. Kết quả theo bảng sau :
Toán tử luận lý Eqv • Cú pháp : <b.thức 1>Eqv<b.thức 2> • Tác động : thực hiện phép Eqv luận lý. Kết quả theo bảng sau :
Toán tử bitwise Eqv • Cú pháp : <b.thức 1>Eqv<b.thức 2> • Tác động : thực hiện phép Eqv bitwise trên từng bit tương ứng của 2 toán hạng (thuộc kiểu số). Kết quả trên từng cặp bit được xác định theo bảng sau :
Toán tử luận lý Imp • Cú pháp : <b.thức 1>Imp<b.thức 2> • Tác động : thực hiện phép Imp luận lý. Kết quả theo bảng sau :
Toán tử bitwise Imp • Cú pháp : <b.thức 1>Imp<b.thức 2> • Tác động : thực hiện phép Imp bitwise trên từng bit tương ứng của 2 toán hạng (thuộc kiểu số). Kết quả trên từng cặp bit được xác định theo bảng sau :
Toán tử luận lý và bitwise Not • Cú pháp : Not<b.thức> • Tác động : thực hiện phép Not luận lý theo bảng sau :
Qui trình tính biểu thức • Qui trình tính biểu thức là cách mà máy tính tính biểu thức. • Tính từ trái sang phải, mỗi lần gặp 1 toán tử (CurrentOp) thì phải nhìn trước toán tử đi ngay sau nó (SussesorOp), so sánh độ ưu tiên của 2 toán tử và ra quyết định như sau : • Không có SussesorOp : thực hiện CurrentOp. Hoàn tất biểu thức. • CurrentOp ưu tiên hơn hay bằng SussesorOp : thực hiệnCurrentOp. Sau đó, SussesorOp trở thành CurrentOp. Trở lại bước ban đầu. • CurrentOp kém ưu tiên hơn SussesorOp : cố gắng thực hiện SussesorOp trước. Bây giờ SussesorOp đóng vai trò của CurrentOp. Trở lại bước ban đầu. • Khi thực hiện xong SussesorOp, quay trở lại xét CurrentOpnhư ban đầu.
Thứ tự ưu tiên cụ thể của các toán tử • Thứ tự ưu tiên giảm dần theo các nhóm sau : Số học→ So sánh → Luận lý • Các toán tử so sánh có độ ưu tiên bằng nhau. • Các toán tử số học và luận lý có độ ưu tiên giảm dần như sau : Arithmetic Logical Exponentiation (^) Not Negation (–) And Multiplication and division (*, /) Or Integer division (\) Xor Modulus arithmetic (Mod) Eqv Addition and subtraction (+, –) Imp String concatenation (&)
Ví dụ biểu thức dblDispValue = dblDispValue + intNegative*d* (10 ^-bytPosDigit) + * * ^ - Kết quả 1 1 Kết quả 2 2 Kết quả 3 3 Kết quả 4 4 Kết quả 5 5