Trong bài này chúng ta sẽ tìm hiểu:

– Khai báo biến luận lý (declare Boolean variables)

– Toán tử luận lý (Boolean operators)

– Lệnh if (if statements)

– Lệnh switch (switch statements)

Khai báo các biến luận lý

Mệnh đề (hay biểu thức) luận lý là các mệnh đề chỉ nhận giá trị đúng (true) hay sai (false).

C# cung cấp kiểu dữ liệu bool là kiểu dữ liệu luận lý. Một biến kiểu luận lý chỉ chứa một trong hai giá trị là true hay false.

Các toán tử luận lý

Trả về giá trị true hay false từ việc kết hợp nhiều biểu thức. Một số toán tử

Toán tử Chức năng
& Trả về true nếu tất cả các biểu thức đều trả về true
| Trả về true nếu ít nhất một biểu thức trả về true
! Trả về true nếu biểu thức là false và ngược lại
&& Tương tự & nhưng sẽ không kiểm tra các biểu thức còn lại nếu biểu thức đầu tiên quyết định kết quả trả về.
|| Tương tự | nhưng sẽ không kiểm tra các biểu thức còn lại nếu biểu thức đầu tiên quyết định kết quả trả về.

Ví dụ:


int num1 = 3;

int num2 = 7;

num1 == 3 & num2 == 7   // true

num1 == 2 & num2 == 7  // false

num1 == 3 | num2 == 11  // true

!(num1 == 5)  // true

num1 == 2 && num2 == 7 //trả về false vì num1 khác 2 và không

//cần kiểm tra biểu thức num2 = 7

Bên cạnh các toán tử luận lý còn có toán tử quan hệ hay bằng >, <, >=, <=, ==, ! dùng để tạo các biểu thức luận lý và độ ưu tiên của các toán tử. Có thể tham khảo lại chương II.

Các lệnh điều kiện (conditional statement): if và switch        

Khi viết code, chúng ta hay gặp những tình huống phải đưa ra những hành động khác nhau trong những điều kiện khác nhau. Để làm điều này, chúng ta sử dụng các lệnh điều kiện (conditional statements).

Lệnh if, cú pháp:

if (logical expression){ 

statement

}

Flowchart

Nếu biểu thức logical expression nhận giá trị true thì thực hiện lệnh (hay khối lệnh) statement, ngược lại không làm gì.

Ví dụ:


if tuoi < 18){

thongbao = "Ban chua du tuoi";

}

Lệnh if…else, cú pháp:

if (logical expression){

statement1

}

else {

statement2

}

Flowchart

Nếu biểu thức logical expression nhận giá trị true thì thực hiện lệnh (hay khối lệnh) statement1, ngược lại thực hiện lệnh (hay khối lệnh) statement2.

Ví dụ:


if (tuoi < 18){

thongbao = "Ban chua du tuoi";

}

else {

thongbao = "Chao mung ban den voi website chung toi!";

}

Lệnh if…else if…else, cú pháp:

if (logical expression 1){

statement1

}

else if (logical expression 2){

statement2

}

else {

statement3

}

Nếu biểu thức logical expression 1 nhận giá trị true thì thực hiện lệnh (hay khối lệnh) statement1, ngược lại (biểu thức logical expression 1 nhận giá trị false) nếu biểu thức logical expression 2 nhận giá trị true thực hiện lệnh (hay khối lệnh) statement2 và nếu biểu thức logical expression 2 nhận giá trị false thì thực hiện lệnh (hay khối lệnh) statement3.

Ví dụ:


if (time < 10){

greeting = "Good morning";

}

else if (time < 20){

greeting = "Good day";

}

else {

greeting = "Good evening";

}

Cũng là lệnh điều kiện giống if dùng để đưa ra những hành động khác nhau trong những điều kiện khác nhau, chúng ta có thể dùng lệnh switch trong C#. Cú pháp:

switch (expression){

case value 1:

statement1

break;

……

case value n:

statementn

break;

default:

statements

break;

}

Flowchart

Ví dụ:


DateTime today = DateTime.Now;

double discountPercentage = 0;

switch (today.DayOfWeek)

{

case DayOfWeek.Monday:

discountPercentage = 40;

break;

case DayOfWeek.Tuesday:

discountPercentage = 30;

break;

case DayOfWeek.Wednesday:

discountPercentage = 20;

break;

case DayOfWeek.Thursday:

discountPercentage = 10;

break;

default:

discountPercentage = 0;

break;

}

Một số lưu ý khi sử dụng lệnh switch:

– Chỉ dùng switch với các kiểu dữ liệu sơ cấp (primitive data types) như int hay string. Với các kiểu dữ liệu khác (bao gồm cả floatdouble), chúng ta phải dùng if.

– Nhãn cho mỗi case phải là hằng, như 42 hay “42”, nếu là một biểu thức cần được xử lý trong thời điểm run time thì phải sử dụng if.

– Mỗi nhãn cho mỗi case phải là duy nhất.

– Nếu muốn thực hiện một (hay khối) lệnh cho nhiều giá trị nhãn case, chúng ta có thể cung cấp một danh sách các nhãn case liên tục (không bị ngắt bởi các lệnh hay break) và các lệnh thực thi cho nhãn case cuối cùng cũng chính là cho tất cả các nhãn trong danh sách. Ví dụ: nếu biến ch nhận các giá trị “a”, “b”, “c” thì xuất ra màn hình “Hello”


char ch;

switch (ch)

{

case "a":

case "b":

case "c":

Label1.Text = "Hello";

break;

}

Nếu viết như sau sẽ bị lỗi:


char ch;

switch (ch)

{

case "a":

case "b":

Label1.Text = "Hello";

case "c":

Label1.Text = "Hello";

break;

}

Tạo ứng dụng đơn giản với switch chuyển một kí tự sang định dạng XML. Một số kí tự như >, <, nháy đơn, nháy kép, & sẽ có ý nghĩa đặc biệt trong XML, ví dụ kí tự > trong XML sẽ là &gt;

Ứng dụng minh hoạ lệnh switch

Tạo một ứng dụng WPF tên switchstatement có giao diện như sau:

Mã cho sự kiện click của nút Copy:


private void copyClick(object sender, RoutedEventArgs e)

{

target.Text = "";

string from = source.Text;

for (int i = 0; i != from.Length; i++)

{

char current = from[i];

copyOne(current);

}

}

Mã cho phương thức copyOne:


private void copyOne(char current)

{

switch (current)

{

case '<': target.Text += "&lt;"; break; case '>':

target.Text += "&gt;";

break;

case '&':

target.Text += "&amp;";

break;

case '\"':

target.Text += """;

break;

case '\'':

target.Text += "'";

break;

default:

target.Text += current;

break;

}

}

Chạy chương trình:

Học C# và WPF >