+3

Làm chủ JavaScript: Bí quyết viết code sạch hơn với toán tử 3 ngôi

Trong JavaScript, việc xử lý các quyết định bằng câu lệnh điều kiện là một trong những nhiệm vụ cốt lõi mà bạn thường xuyên gặp phải. Toán tử 3 ngôi là một trong những phương pháp phổ biến nhất cho việc này, nhưng chính xác nó là gì và khi nào nên sử dụng nó thay cho câu lệnh if-else truyền thống?

Khi lập trình bằng JavaScript, việc xử lý các quyết định bằng câu lệnh điều kiện là một trong những nhiệm vụ cốt lõi bạn thường xuyên gặp phải. Một trong những phương pháp phổ biến nhất cho việc này là toán tử 3 ngôi. Nhưng chính xác nó là gì, và khi nào bạn nên sử dụng nó thay cho câu lệnh if-else truyền thống?

Trong bài viết này, chúng ta sẽ đi sâu vào toán tử 3 ngôi, cách nó hoạt động và khi nào nó là lựa chọn đúng so với các cấu trúc điều kiện khác.

Bạn có thể đọc thêm: Viết code là gì? Hướng dẫn cho người mới bắt đầu

Toán tử 3 ngôi là gì?

Toán tử 3 ngôi là một cách viết tắt cho câu lệnh điều kiện trong JavaScript. Nó cho phép bạn thực thi một trong hai biểu thức dựa trên một điều kiện, tất cả chỉ trong một dòng. Mặc dù điều này nghe có vẻ phức tạp, nhưng cú pháp của nó rất đơn giản và trực quan khi bạn hiểu cách nó hoạt động.

Đây là cấu trúc cơ bản:

condition ? expressionIfTrue : expressionIfFalse;

Nói một cách dễ hiểu, nếu condition được đánh giá là đúng, expressionIfTrue sẽ chạy. Nếu nó được đánh giá là sai, expressionIfFalse sẽ chạy. Toán tử 3 ngôi được đặt tên như vậy vì nó bao gồm ba phần: một điều kiện, một biểu thức đúng và một biểu thức sai.

Hãy bắt đầu với một ví dụ cơ bản:

let age = 18;

let canVote = age >= 18 ? 'Yes' : 'No';

console.log(canVote);  // Output: "Yes"

Trong ví dụ này, toán tử 3 ngôi kiểm tra xem age có lớn hơn hoặc bằng 18 hay không. Nếu có, biến canVote được đặt thành 'Yes', ngược lại, nó được đặt thành 'No'. Đây là một cách viết ngắn gọn thay thế cho cấu trúc if-else truyền thống.

Toán tử 3 ngôi so với if-else

Toán tử 3 ngôi thường được sử dụng như một cách viết tắt cho câu lệnh if-else khi điều kiện đơn giản và có thể được thể hiện rõ ràng trong một dòng. Hãy xem cách câu lệnh if-else xử lý cùng một logic từ ví dụ trước:

let age = 18;
let canVote;

if (age >= 18) {
  canVote = 'Yes';
} else {
  canVote = 'No';
}

console.log(canVote);  // Output: "Yes"

Sự khác biệt giữa toán tử 3 ngôi và if-else là gì?

  • Tính ngắn gọn: Toán tử 3 ngôi ngắn hơn đáng kể, vì nó cho phép bạn viết các điều kiện trong một dòng. Điều này có thể làm cho mã của bạn sạch hơn và dễ đọc hơn trong một số trường hợp nhất định.
  • Tính dễ đọc: hãy nhớ rằng tính dễ đọc có thể bị ảnh hưởng nếu điều kiện hoặc biểu thức trở nên quá phức tạp. Nếu bạn đang xử lý nhiều điều kiện hoặc biểu thức dài, toán tử 3 ngôi có thể làm cho mã khó hiểu hơn. Câu lệnh if-else truyền thống rõ ràng hơn và là lựa chọn tốt hơn trong trường hợp này.

Nên sử dụng toán tử 3 ngôi khi nào? Hãy sử dụng toán tử 3 ngôi khi bạn cần đưa ra quyết định nhanh chóng, đơn giản trong mã của mình. Tránh sử dụng nó nếu điều kiện hoặc biểu thức phức tạp. Trong những trường hợp đó, if-else thường là lựa chọn tốt hơn để đảm bảo tính rõ ràng.

Toán tử 3 ngôi lồng nhau và lý do nên tránh chúng

Một cạm bẫy phổ biến khi sử dụng toán tử 3 ngôi là lồng chúng. Mặc dù có thể lồng các toán tử 3 ngôi, nhưng nó có thể nhanh chóng dẫn đến mã khó đọc và bảo trì.

Dưới đây là một ví dụ về toán tử 3 ngôi lồng nhau:

let score = 85;

let grade = score >= 90 ? 'A' : score >= 80 ? 'B' : 'C';

console.log(grade);  // Output: "B"

Mặc dù mã này hoạt động, nhưng nó không dễ đọc. Mã của bạn sẽ trở nên lộn xộn rất nhanh chóng và khi cộng tác trong một dự án với các thành viên khác trong nhóm, nó có thể trở thành vấn đề nếu mã của bạn không dễ đọc.

Vậy làm thế nào để tái cấu trúc lại toán tử 3 ngôi lồng nhau

Thay vì lồng các toán tử 3 ngôi, thường tốt hơn nên sử dụng cấu trúc if-else hoặc sử dụng một cách tiếp cận khác như câu lệnh switch nếu có nhiều điều kiện.

Đây là cách logic ở trên sẽ trông như thế nào với if-else:

let score = 85;
let grade;

if (score >= 90) {
  grade = 'A';
} else if (score >= 80) {
  grade = 'B';
} else {
  grade = 'C';
}

console.log(grade); 
// Output: "B"

Phiên bản này dễ đọc và bảo trì hơn nhiều, đặc biệt nếu bạn có thêm các điều kiện để kiểm tra.

Toán tử 3 ngôi so với switch

Trong khi toán tử 3 ngôi và câu lệnh if-else xử lý logic điều kiện tốt, đôi khi bạn sẽ cần so sánh một biến duy nhất với nhiều giá trị hoặc kết quả có thể xảy ra. Trong trường hợp này, câu lệnh switch là lựa chọn tốt nhất của bạn.

Cách sử dụng câu lệnh Switch: Chúng ta sử dụng switch khi có một số giá trị có thể có cho một biến. Toán tử 3 ngôi rất phù hợp cho các kiểm tra đúng/sai đơn giản, nhưng switch giúp dễ dàng xử lý nhiều tùy chọn hơn.

let day = 3;
let dayName;

switch (day) {
  case 1:
    dayName = 'Monday';
    break;
  case 2:
    dayName = 'Tuesday';
    break;
  case 3:
    dayName = 'Wednesday';
    break;
  default:
    dayName = 'Unknown';
}

console.log(dayName);
// Output: "Wednesday"

Trong đoạn mã này:

  • Chúng ta đặt day thành 3. Mục tiêu là khớp số này với một ngày trong tuần.
  • Chúng ta sử dụng câu lệnh switch để kiểm tra giá trị của day:
    • Nếu day là 1, nó gán 'Monday' cho dayName và break thoát khỏi khối switch.
    • Nếu day là 2, nó gán 'Tuesday' cho dayName và break thoát khỏi khối switch.
    • Nếu day là 3, nó gán 'Wednesday' cho dayName và break thoát khỏi khối switch.
  • Nếu day không phải là 1, 2 hoặc 3, trường hợp default sẽ chạy, đặt dayName thành 'Unknown'. Vì day là 3 trong ví dụ này, dayName được đặt thành 'Wednesday', và đó là những gì được in ra.

Khi nào nên sử dụng switch thay vì toán tử 3 ngôi?

  • Nhiều điều kiện: Nếu bạn đang kiểm tra nhiều giá trị có thể có cho một biến duy nhất, switch phù hợp hơn toán tử 3 ngôi hoặc if-else.
  • Tính dễ đọc: Câu lệnh switch tổ chức logic điều kiện phức tạp một cách dễ đọc, trong khi cố gắng đạt được kết quả tương tự với toán tử 3 ngôi sẽ rất cồng kềnh và khó bảo trì.

Cân nhắc về hiệu suất

Từ góc độ hiệu suất, có rất ít sự khác biệt giữa việc sử dụng toán tử 3 ngôi và câu lệnh if-else. Các công cụ JavaScript được tối ưu hóa để xử lý cả hai một cách hiệu quả.

Mối quan tâm thực sự là tính rõ ràng và khả năng bảo trì của mã. Nếu toán tử 3 ngôi của bạn làm cho mã khó đọc hơn, thì việc tăng hiệu suất nhẹ (nếu có) sẽ không đáng.

Ví dụ trường hợp sử dụng cho toán tử 3 ngôi

Trong các framework JavaScript hiện đại như React, toán tử 3 ngôi thường được sử dụng để render có điều kiện. Dưới đây là một ví dụ:

const isLoggedIn = true;

return (
  <div>
    {isLoggedIn ? <p>Welcome back!</p> : <p>Please log in.</p>}
  </div>
);

Điều này làm cho mã ngắn gọn và dễ đọc, đặc biệt là khi xử lý logic render UI, nơi cần đưa ra quyết định đơn giản dựa trên trạng thái hoặc prop.

Kết luận

Toán tử 3 ngôi là một công cụ mạnh mẽ trong JavaScript, cho phép bạn viết các câu lệnh điều kiện ngắn gọn và rõ ràng. Tuy nhiên, nó không phải lúc nào cũng là lựa chọn tốt nhất. Nếu điều kiện của bạn phức tạp hoặc tính dễ đọc bị ảnh hưởng, tốt hơn nên sử dụng câu lệnh if-else hoặc thậm chí là câu lệnh switch.

Những điểm chính cần lưu ý:

  • Sử dụng toán tử 3 ngôi cho các điều kiện đơn giản, một dòng.
  • Tránh lồng các toán tử 3 ngôi để giữ cho mã của bạn dễ đọc.
  • Đối với các điều kiện phức tạp hoặc nhiều kiểm tra, if-else hoặc switch là những lựa chọn tốt hơn.

Với việc luyện tập, bạn sẽ cảm nhận được khi nào toán tử 3 ngôi phù hợp, giúp bạn viết mã JavaScript sạch hơn và hiệu quả hơn.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí