Trong câu lệnh if mà chúng ta đã tìm hiểu trong phần trước, thì khi điều kiện là true thì biểu thức bên trong if mới được thực hiện. Đôi khi chúng ta muốn kết hợp nhiều điều kiện với nhau như: bắt buộc cả hai hay nhiều điều kiện phải đúng hoặc chỉ cần một trong các điều kiện đúng là đủ hoặc không có điều kiện nào đúng...C# cung cấp một tập hợp các toán tử logic để phục vụ cho người lập trình...
Giáo trình hướng dẫn xây dựng trình tự xử lý Ngơntốn Ngữ Lập đại Trình C# tốn tử phép số có độ ưu tiên Trong câu lệnh if mà tìm hiểu phần trước, điều kiện true biểu thức bên if thực Đôi muốn kết hợp nhiều điều kiện với như: bắt buộc hai hay nhiều điều kiện phải cần điều kiện đủ khơng có điều kiện C# cung cấp tập hợp toán tử logic để phục vụ cho người lập trình Bảng 3.5 liệt kệ ba phép toán logic, bảng sử dụng hai biến minh họa x, y x có giá trị y có giá trị Tên toán tử Ký hiệu and && Biểu thức logic (x == 3) && (y == Giá trị false 7) or || (x == 3) || (y == 7) true not ! ! (x == ) true Logic Cả hai điều kiện phải Chỉ cần điều kiện Biểu thức ngoặc phải sai Bảng 3.5: Các toán tử logic (giả sử x = 5, y = 7) Toán tử and kiểm tra hai điều kiện Trong bảng 3.5 có minh họa biểu thức logic sử dụng toán tử and: (x == 3) && (y == 7) Toàn biểu thức xác định sai có điều kiện (x == 3) sai Với tốn tử or, hay hai điều kiện đúng, biểu thức có giá trị sai hai điều kiện sai Do ta xem biểu thức minh họa toán tử or: (x == 3) || (y == 7) Biểu thức xác định giá trị có điều kiện (y == 7) Đối với tốn tử not, biểu thức có giá trị điều kiện ngoặc sai, ngược lại, biểu thức: !( x == 3) có giá trị điều kiện ngoặc tức (x == 3) sai Như biết phép tốn logic and cần điều kiện biểu thức sai toàn biểu thức sai, thật dư thừa kiểm tra điều kiện lại có điều kiện sai Giả sử ta có đoạn chương trình sau: int x = 8; if ((x == 5) && (y == 10)) Khi biểu thức if hai biểu thức (x == 5) (y == 10) Tuy nhiên xét biểu thức thứ giá trị x nên biểu thức (x == 5) sai Khi khơng cần thiết để xác định giá trị biểu thức lại, tức với giá trị biểu thức (y == 10) toàn biểu thức điều kiện if sai 73 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# Tương tự với biểu thức logic or, xác định biểu thức khơng cần phải xác định biểu thức cịn lại, tốn tử logic or cần điều kiện đủ: int x =8; if ( (x == 8) || (y == 10)) Khi kiểm tra biểu thức (x == 8) có giá trị đúng, khơng cần phải xác định giá trị biểu thức (y == 10) Ngơn ngữ lập trình C# sử dụng logic thảo luận bên để loại bỏ tính tốn so sánh dư thừa khơng logic nữa! Độ ưu tiên tốn tử Trình biên dịch phải xác định thứ tự thực toán tử trường hợp biểu thức có nhiều phép tốn, giả sử, có biểu thức sau: var1 = 5+7*3; Biểu thức có ba phép tốn để thực bao gồm (=, +,*) Ta thử xét phép toán theo thứ tự từ trái sang phải, gán giá trị cho biến var1, sau cộng vào 12 cuối nhân với 3, kết trả 36, điều thật có vấn đề, khơng với mục đích u cầu Do việc xây dựng trình tự xử lý toán tử cần thiết Các luật độ ưu tiên xử lý bảo trình biên dịch biết tốn tử thực trước biểu thức.Tương tự phép tốn đại số phép nhân có độ ưu tiên thực trước phép toán cộng, 5+7*3 cho kết 26 kết 36 Và hai phép toán cộng phép toán nhân điều có độ ưu tiên cao phép gán Như trình biên dịch thực phép tốn sau thực phép gán bước cuối Kết câu lệnh biến var1 nhận giá trị 26 Trong ngôn ngữ C#, dấu ngoặc sử dụng để thay đổi thứ tự xử lý, điều giống tính tốn đại số Khi muốn kết 36 cho biến var1 viết: var1 = (5+7) * 3; Biểu thức ngoặc xử lý trước sau có kết 12 phép nhân thực Bảng 3.6: Liệt kê thứ tự độ ưu tiên phép toán C# STT Loại toán tử Phép toán Toán tử Thứ tự (x) x.y f(x) a[x] x++ x—new typeof Trái sizeof checked unchecked Phép nhân */% Phép cộng Dịch bit +> Trái Trái Quan hệ < > = is Trái + - ! ~ ++x –x (T)x Trái Trái 74 Nền Tảng Ngôn Ngữ C# Ngôn Ngữ Lập Trình C# So sánh Phép AND Phép XOR Phải == != toán logic & Trái toán logic ^ Trái 10 11 Phép toán logic OR Điều kiện AND | 12 13 Điều kiện OR Điều kiện || 14 Phép gán = *= /= %= += -= = Trái Trái && Trái Phải ?: &= Phải ^= |= Bảng 3.6: Thứ tự ưu tiên toán tử Các phép toán liệt kê loại có thứ tự theo mục thứ thự bảng: thứ tự trái tức độ ưu tiên phép tốn từ bên trái sang, thứ tự phải phép tốn có độ ưu tiên từ bên phải qua trái Các tốn tử khác loại có độ ưu tiên từ xuống dưới, toán tử loại có độ ưu tiên cao phép tốn gán có độ ưu tiên thấp tốn tử Tốn tử ba ngơi Hầu hết tốn tử địi hỏi có tốn hạng toán tử (++, ) hay hai toán hạng (+,-,*,/, ) Tuy nhiên, C# cung cấp thêm tốn tử có ba tốn hạng (?:) Tốn tử có cú pháp sử dụng sau: ? : Toán tử xác định giá trị biểu thức điều kiện, biểu thức điều kiện phải trả giá trị kiểu bool Khi điều kiện thực hiện, ngược lại điều kiện sai thực Có thể diễn giải theo ngơn ngữ tự nhiên tốn tử có ý nghĩa : “Nếu điều kiện làm cơng việc thứ nhất, cịn ngược lại điều kiện sai làm cơng việc thứ hai” Cách sử dụng tốn tử ba ngơi minh họa ví dụ 3.19 sau Ví dụ 3.19: Sử dụng tốn tử bao ngơi using System; class Tester { public static int Main() { int value1; 75 Nền Tảng Ngôn Ngữ C# Ngơn Ngữ Lập Trình C# int value2; int maxValue; value1 = 10; value2 = 20; maxValue = value1 > value2 ? value1 : value2; Console.WriteLine(“Gia tri thu nhat {0}, gia tri thu hai {1}, gia tri lon nhat {2}”, value1, value2, maxValue); return 0; } } Kết quả: Gia tri thu nhat 10, gia tri thu hai 20, gia tri lon nhat 20 Trong ví dụ minh họa tốn tử ba sử dụng để kiểm tra xem giá trị value1 có lớn giá trị value2, trả giá trị value1, tức gán giá trị value1 cho biến maxValue, ngược lại gán giá trị value2 cho biến maxValue Namespace Chương thảo luận việc sử dụng đặc tính namespace ngôn ngữ C#, nhằm tránh xung đột việc sử dụng thư viện khác từ nhà cung cấp Ngoài ra, namespace xem tập hợp lớp đối tượng, cung cấp định danh cho kiểu liệu đặt cấu trúc phân cấp Việc sử dụng namespace lập trình thói quen tốt, cơng việc cách lưu mã nguồn để sử dụng sau Ngoài thư viện namespace MS.NET hãng thứ ba cung cấp, ta tạo riêng cho namespace C# đưa từ khóa using đề khai báo sử dụng namespace chương trình: using < Tên namespace > Để tạo namespace dùng cú pháp sau: namespace { < Định nghĩa lớp A> < Định nghĩa lớp B > } Đoạn ví dụ 3.20 minh họa việc tạo namespace Ví dụ 3.20: Tạo namespace 76 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# namespace MyLib { using System; public class Tester { public static int Main() { for (int i =0; i < 10; i++) { Console.WriteLine( “i: {0}”, i); } return 0; } } } Ví dụ tạo namespace có tên MyLib, bên namespace chứa lớp có tên Tester C# cho phép namespace tạo namespace khác lồng bên không giới hạn mức độ phân cấp này, việc phân cấp minh họa ví dụ 3.21 Ví dụ 3.21: Tạo namespace lồng namespace MyLib { namespace Demo { using System; public class Tester { public static int Main() { for (int i =0; i < 10; i++) { Console.WriteLine( “i: {0}”, i); } return 0; } } 77 Nền Tảng Ngôn Ngữ C# ... tự ưu tiên toán tử Các phép toán liệt kê loại có thứ tự theo mục thứ thự bảng: thứ tự trái tức độ ưu tiên phép toán từ bên trái sang, thứ tự phải phép tốn có độ ưu tiên từ bên phải qua trái Các. .. toán tử khác loại có độ ưu tiên từ xuống dưới, toán tử loại có độ ưu tiên cao phép tốn gán có độ ưu tiên thấp tốn tử Tốn tử ba ngơi Hầu hết tốn tử địi hỏi có tốn hạng tốn tử (++, ) hay hai toán. .. thật có vấn đề, khơng với mục đích yêu cầu Do việc xây dựng trình tự xử lý tốn tử cần thiết Các luật độ ưu tiên xử lý bảo trình biên dịch biết toán tử thực trước biểu thức.Tương tự phép tốn đại số