Câu lệnh điều kiện trong Java

1. Câu lệnh điều kiện trong Java

Câu lệnh điều kiện là câu lệnh đơn giản nhất trong lập trình. Nó được thể hiện dưới dạng nếu … thì … mà trong Tiếng anh là if … else … Câu lệnh điều được xem là phương pháp rẽ nhánh của dòng chảy dữ liệu. Nếu bạn đã học qua các chương trình cao đẳng đại học thì câu điều kiện này không cần bàn thêm nhiều.

Ngoài câu lệnh if … else … thì Java có thêm câu lệnh switch … case ….  Hai câu lệnh này có thể thay thế cho nhau được. Tuy nhiên, nó có điểm đặc trưng sử dụng riêng nên Java mới tạo ra hai câu lệnh chứ không phải một.

2. Câu lệnh if … else ...

Như đã nói ở trên câu lệnh if … else … xem như là câu lệnh rẽ nhánh. Sau đây là đoạn mã thể hiện câu điều kiện rẽ nhánh.

// condition is a variable boolean or compare expression
 if (condition) {
     command_line_1;
     // command line for true;
 } else {
     command_line_2;
     // command line for false;
 }

Dưới là đoạn mã ví dụ câu lệnh điều kiện trong Java.

boolean exists = true;
if(exists) {
     System.out.println("Exists Student.");
 }

Nếu biến exists bằng true (nó thuộc boolean chỉ có một trong hai giá trị: true/ false) thì Java sẽ in ra dòng chữ Exists Student.

boolean exists = true;
f(exists) {
     System.out.println("Exists Student.");
 } else {
     System.out.println("Not exists Student.");
 }

Trong đoạn mã này ta thấy if sau đó đến else Điều này đồng nghĩa với nếu … thì … ngược lại …. Nếu existstrue thì máy tính sẽ in ra dòng Exists
Student
, ngược lại thì máy tính in ra Not exists Student.

Trong ví dụ trên biến exists là biến kiểu dữ liệu boolean. Nhưng ta có thể dùng các biểu thức so sánh để đặc trong biểu thức điều kiện. Các biểu thức quan hệ có thể được đặt ở đây: <, <=, ==, >, >= và !=.

Trên là cách viết đầy đủ của một câu lệnh if. Nhưng trong thực tế ta có thể thấy được biết thức điều kiện được viết ngắn gọn hơn. Dưới đây là biểu thức của nó.

String name = exists ? "Nguyen Van Tien" : "-- Empty --";

Câu lệnh trên cũng được xem là câu lệnh if nhưng nó không có từ khóa if trong đó. Mà if … else … được thay thế bằng ký tự ? … : … Câu lệnh ngắn thường được viết trên 1 dòng mã với mục tiêu gán một giá trị cho 1 biến theo một điều kiện nào đó.

3. Câu lệnh if … elseif … else…

Nếu câu điều kiện của ta có nhiều điều kiện cần thực hiện thì sao? If … elseif … else … sẽ hỗ trợ giúp ta làm điều đó.

int score = 7;
 if(score > 8) {
     System.out.println("Your are best Student.");
 } else if(score > 7) {
     System.out.println("Your are good Student.");
 } else if(score > 5) {
     System.out.println("Your are middle Student.");
 } else {
     System.out.println("Your are not good Student.");
 }

Trên là đoạn mã Java khi ta cần xét nhiều điều kiện. Điểm (score) của một sinh viên sẽ được xếp hạng dựa vào các điều kiện >8, >7, >5 và <= 5 sẽ tương ứng với thứ hạng như giỏi, khá, trung bình, không tốt. Ta thấy else if được đặt ở giữa if … else … để xét thêm các điều kiện.

Với nhiều điều kiện ta cũng có thể viết theo cách viết ngắn gọi như:

String rank = score > 8 ? "Best Student" : (score > 7 ? \n
    "Good Student" : (score > 5 ?  "Middle Student" : "Not Good"));

Tuy nhiên cách viết này theo tôi không mang lại tính đơn giản hơn cách bình thường vì ta đã sử dụng () để thay đổi độ ưu tiên của biểu thức.

4. Câu lệnh switch … case …

Ngoài câu lệnh if chúng ta có thêm một câu lệnh điều kiện khác đó là switch … case …  Đây được xem là câu lệnh rẻ nhiều nhánh đơn giản hơn if. Nếu xét nhiều nhánh ta cần sẽ dụng thêm else ifelse. Nhưng với switch ta sẽ kiểm tra điều kiện của mỗi nhánh bằng case.

String levelName = "STUDENT";
switch (levelName) {

    // levelName = “STUDENT”
    case "STUDENT":
        System.out.println("I am Student");
        break;  // End of block

    // levelName = “TEACHER”
    case "TEACHER":
        System.out.println("I am Teacher");
        break;  // End of block

    // levelName != “STUDENT” and levelName != “TEACHER” 
    default:
        System.out.println("I don't know");
}

Mục tiêu đoạn mã trên là muốn in ra dòng chữ ta là ai dựa trên biến levelName. Sử dụng câu lệnh switch để thực hiện điều đó. Trong đây ta cần lưu ý đến 3 từ khóa chính: switch, case, break, default.

Sau switch là biến mà ta cần xét và sau case là giá trị mà ta cần xét bằng cách so sánh giá trị với biến mà ta sử dụng để kiểm tra có bằng với giá trị trong case không? Nếu bằng thì thực câu lệnh bên trong case. Ta có thể xem lại các dòng ghi chú trong đoạn mã trên để dể dàng hiểu hơn.

Điều lưu ý:

  1. Cần câu lệnh break sau các case để kết thúc khối lệnh mà không tiếp tục thực hiện các case khác. Nếu không nó sẽ đi qua tất cả các case nếu thỏa điều nhiều được thực hiện tiếp.
  2. Riêng từ khóa default được thực thi khi các case không được thỏa hoặc sẽ được thực thi khi ta quên thêm vào câu lệnh break trong các case.

5. Điểm khác nhau giữa ifswitch

IfSwitch điều là hai câu lệnh
thuộc dạng rẽ nhánh. Hiện chưa có chứng mình nào nói về sự khác nhau về hiệu suất làm việc của chúng. Do đó ta có thể tin rằng nó gần giống nhau. Nếu có sự chênh lệch thì gần như không đáng kể. Nhưng nó có vài điểm khác nhau:

  1. Điều kiện trong câu lệnh if linh động hơn câu lệnh switch. Chẳng hạn nếu sử dụng câu lệnh rẽ nhánh trong việc phân chia loại học viên thông qua điểm số thì if là một giải pháp tốt. Nhưng nếu ta cần thực hiện khối lệnh để in ra màn hình là sinh viên hay là giáo viên dựa trên một biến levelName (ví dụ ở trên) thì switch là câu lệnh tối ưu hơn.
  2. Số lượng rẽ nhánh (số lượng case) trong câu lệnh switch thì quá nhỏ. Nếu chương trình cần nhiều nhánh (nhiều điều kiện) thì mã nguồn sẽ rất là dài. Các case thì rời rạc nhau. Chúng không thường dùng trong các trường hợp không liên tiếp nhau.

Trên là hai điểm khác chính của ifswitch mà ta dể dàng nhận thấy khi xem xét qua cứu pháp của nó. Ngoài ra ta sẽ có những điểm khác nhau về cơ chế hoạt động, hành vi trong bộ nhớ… Nhưng bài này chỉ dừng ở mức cơ bản này giúp đơn giản hơn khi quyết định lựa chọn.

Bạn có thể tham khảo mã nguồn ở 6. Tóm lược

Java đã cung cấp ta sẽ 2 câu lệnh để rẽ nhánh trong luồng thực thi mã. Đó là câu lệnh if và câu lệnh switch. Mặc dù mục đích sử dụng có giống nhau song nó cũng có những điểm đặc trưng để ta quyết định nên chọn câu lệnh nào để sử dụng cho tối ưu.

Trong bài này chỉ cần ta hiểu được cứu pháp của câu lệnh if và câu lệnh switch và khi nào nên sử dụng chúng là đã đủ để có thể lập trình. Nhưng nếu cần đi sâu vào nghiên cứu thì cần thêm thời gian phân tích cơ chế hoạt động của nó trong máy tính.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *