Hướng dẫn which is better if else or switch php? - cái nào tốt hơn nếu khác hoặc chuyển đổi php?

Ví dụ đầu tiên của bạn chỉ đơn giản là sai. Bạn cần elseif thay vì chỉ else.

Nếu bạn sử dụng if..elseif... hoặc switch chủ yếu là vấn đề ưu tiên. Hiệu suất là như nhau.

Tuy nhiên, nếu tất cả các điều kiện của bạn thuộc loại x == value với

if(some_func() == 1) {}
elseif(some_func() == 2) {}
0 giống nhau trong mọi điều kiện, switch thường có ý nghĩa. Tôi cũng chỉ sử dụng switch nếu có nhiều hơn ví dụ: Hai điều kiện.

Một trường hợp trong đó switch thực sự mang lại cho bạn lợi thế hiệu suất là nếu phần biến là một cuộc gọi chức năng:

switch(some_func()) {
    case 1: ... break;
    case 2: ... break;
}

Sau đó

if(some_func() == 1) {}
elseif(some_func() == 2) {}
4 chỉ được gọi một lần trong khi với

if(some_func() == 1) {}
elseif(some_func() == 2) {}

Nó sẽ được gọi là hai lần - bao gồm các tác dụng phụ có thể xảy ra của chức năng xảy ra hai lần. Tuy nhiên, bạn luôn có thể sử dụng

if(some_func() == 1) {}
elseif(some_func() == 2) {}
5 và sau đó sử dụng
if(some_func() == 1) {}
elseif(some_func() == 2) {}
6 trong các điều kiện
if(some_func() == 1) {}
elseif(some_func() == 2) {}
7 của bạn - để bạn có thể tránh được vấn đề này.

Một trường hợp bạn không thể sử dụng công tắc là khi bạn có điều kiện phức tạp hơn - switch chỉ hoạt động cho

if(some_func() == 1) {}
elseif(some_func() == 2) {}
9 với
function studentGrade(marks) {
  if (marks >= 50) {
    return "You have passed the exam! 🥳";
  } else {
    return "You have failed the exam!";
  }
}

console.log(studentGrade(75)); // "You have passed the exam! 🥳"
0 là một giá trị không đổi.cannot use switch at all is when you have more complex conditions - switch only works for
if(some_func() == 1) {}
elseif(some_func() == 2) {}
9 with
function studentGrade(marks) {
  if (marks >= 50) {
    return "You have passed the exam! 🥳";
  } else {
    return "You have failed the exam!";
  }
}

console.log(studentGrade(75)); // "You have passed the exam! 🥳"
0 being a constant value.

Bài viết này ban đầu được xuất bản trên Dasha

Trong trường hợp bạn đang tự hỏi, Dasha là một nền tảng dịch vụ trò chuyện cho phép bạn nhúng các khả năng đàm thoại bằng giọng nói và văn bản vào ứng dụng hoặc sản phẩm của mình. Bắt đầu xây dựng miễn phí!conversational-AI-as-a-service platform that lets you embed realistic voice and text conversational capabilities into your apps or products. Start building for free!


Nếu bạn là người mới lập trình và JavaScript, bạn có thể bị nhầm lẫn về những câu lệnh có điều kiện nào sẽ sử dụng, đặc biệt là giữa các câu lệnh IF-Else và Case.

Khi tôi lần đầu tiên tìm hiểu về các tuyên bố có điều kiện, tôi nghĩ rằng nó đủ đơn giản và tôi có thể sử dụng IF-Else hoặc chuyển đổi trong mọi trường hợp. Nhưng sau đó, khi tôi tìm hiểu thêm về chủ đề này và cố gắng áp dụng nó vào một số vấn đề, tôi đã nhầm lẫn về cái nào tôi nên sử dụng, sự khác biệt chính xác là gì và tôi nên chọn đúng cách nào.

Hướng dẫn which is better if else or switch php? - cái nào tốt hơn nếu khác hoặc chuyển đổi php?

Tôi đã đấu tranh về việc hiểu sự khác biệt và áp dụng của hai tuyên bố có điều kiện này và đào sâu hơn vào chủ đề này.

Trong bài viết này, tôi sẽ giải thích hai khái niệm này và cung cấp một biểu đồ so sánh, vì vậy bạn sẽ hiểu cách bạn có thể sử dụng if-else và trường hợp chuyển đổi trong các kịch bản khác nhau theo sự phức tạp.

Trước khi nhảy vào chi tiết, hãy làm mới bộ nhớ của chúng tôi về lý do tại sao chúng tôi sử dụng các câu lệnh có điều kiện trong các chương trình của chúng tôi.

Là con người, chúng ta đưa ra nhiều quyết định khác nhau trong suốt thời gian ảnh hưởng đến cuộc sống của chúng ta. Ví dụ, nếu chúng ta có thời gian rảnh, chúng ta phải quyết định phải làm gì, có nên nghỉ ngơi, xem một cái gì đó, gọi cho ai đó hoặc có thể làm điều gì đó hiệu quả.

Các tuyên bố có điều kiện cho phép chúng tôi đưa ra quyết định như vậy dựa trên một điều kiện trong JavaScript. Nếu điều kiện là đúng, chúng ta có thể thực hiện một hành động, nếu không, chúng ta có thể thực hiện một hành động khác.

Vì vậy, cả trong trường hợp thay đổi và chuyển đổi cho phép chúng tôi đưa ra các quyết định này dựa trên một điều kiện. Nếu bạn muốn làm mới bộ nhớ của mình về cách hoạt động có điều kiện, hãy xem bài viết MDN này.

Các câu lệnh if-else và else-if

Là người mới, tất cả chúng ta đều yêu thích những tuyên bố IF-Else! 😂

Hướng dẫn which is better if else or switch php? - cái nào tốt hơn nếu khác hoặc chuyển đổi php?

Tuyên bố If-Else có một điều kiện cụ thể và kiểm tra xem điều kiện là sự thật hay giả. Nếu điều kiện là đúng, thì câu lệnh

if(some_func() == 1) {}
elseif(some_func() == 2) {}
7 sẽ thực thi một khối mã cụ thể. Nếu điều kiện là sai, thì câu lệnh else sẽ thực thi một khối mã khác.

Hãy lấy một ví dụ đơn giản để hiểu cách thức hoạt động của nó.

Kịch bản một

Hãy tưởng tượng rằng bạn là giáo viên lớp cho lớp 5, lớp C. Bạn phải kiểm tra điểm số của học sinh dựa trên điểm của họ và bạn chỉ phải kiểm tra xem học sinh đã vượt qua hay thất bại. Chúng ta hãy kiểm tra một trong các điểm của học sinh dựa trên điểm của họ bằng cách sử dụng tuyên bố if-else.

function studentGrade(marks) {
  if (marks >= 50) {
    return "You have passed the exam! 🥳";
  } else {
    return "You have failed the exam!";
  }
}

console.log(studentGrade(75)); // "You have passed the exam! 🥳"

Nhập chế độ FullScreenen EXIT Mode FullScreen

Theo ví dụ trên, chúng tôi đã viết một chức năng đơn giản lấy điểm của học sinh và kiểm tra xem nó trên 50 hoặc dưới 50. Nếu các điểm được nhập từ 50 trở lên, thì khối

if(some_func() == 1) {}
elseif(some_func() == 2) {}
7 thực thi. Nếu nó dưới 50, thì khối else sẽ thực thi.

Kịch bản hai

Bây giờ, hãy tưởng tượng tiến thêm một bước và đưa ra kết quả dựa trên các lớp cụ thể của học sinh. Ví dụ: nếu học sinh nhận được "A+", học sinh nhận được "đóng đinh nó!". Nếu học sinh nhận được "D", kết quả sẽ là "thất bại".

Để có nhiều lựa chọn như thế này, chúng ta có thể sử dụng các câu lệnh khác nếu chuỗi các lựa chọn bổ sung.

Xem mã bên dưới được viết theo kịch bản thứ hai với các câu lệnh khác.

function studentFinalResultIf(grade) {
  if (grade === "A+") {
    return "Nailed It! 🥳";
  } else if (grade === "A") {
    return "Passed 💃";
  } else if (grade === "B+") {
    return "Passed 💃";
  } else if (grade === "B") {
    return "Passed 💃";
  } else if (grade === "C") {
    return "Barely Survived 😌";
  } else if (grade === "D") {
    return "Failed 😢";
  } else {
    return "Failed 😢";
  }
}

cconsole.log(studentFinalResultIf("A+"));   // "Nailed It! 🥳"

Nhập chế độ FullScreenen EXIT Mode FullScreen

Theo ví dụ trên, chúng tôi đã viết một chức năng đơn giản lấy điểm của học sinh và kiểm tra xem nó trên 50 hoặc dưới 50. Nếu các điểm được nhập từ 50 trở lên, thì khối

if(some_func() == 1) {}
elseif(some_func() == 2) {}
7 thực thi. Nếu nó dưới 50, thì khối else sẽ thực thi.

Kịch bản hai

Bây giờ, hãy tưởng tượng tiến thêm một bước và đưa ra kết quả dựa trên các lớp cụ thể của học sinh. Ví dụ: nếu học sinh nhận được "A+", học sinh nhận được "đóng đinh nó!". Nếu học sinh nhận được "D", kết quả sẽ là "thất bại".

Để có nhiều lựa chọn như thế này, chúng ta có thể sử dụng các câu lệnh khác nếu chuỗi các lựa chọn bổ sung.

Xem mã bên dưới được viết theo kịch bản thứ hai với các câu lệnh khác.

Nhập chế độ FullScreenen EXIT Mode FullScreen

Theo ví dụ trên, chúng tôi đã viết một chức năng đơn giản lấy điểm của học sinh và kiểm tra xem nó trên 50 hoặc dưới 50. Nếu các điểm được nhập từ 50 trở lên, thì khối

if(some_func() == 1) {}
elseif(some_func() == 2) {}
7 thực thi. Nếu nó dưới 50, thì khối else sẽ thực thi.

Kịch bản hai

Bây giờ, hãy tưởng tượng tiến thêm một bước và đưa ra kết quả dựa trên các lớp cụ thể của học sinh. Ví dụ: nếu học sinh nhận được "A+", học sinh nhận được "đóng đinh nó!". Nếu học sinh nhận được "D", kết quả sẽ là "thất bại".

Để có nhiều lựa chọn như thế này, chúng ta có thể sử dụng các câu lệnh khác nếu chuỗi các lựa chọn bổ sung.If-elseSwitch-case
Xem mã bên dưới được viết theo kịch bản thứ hai với các câu lệnh khác. Theo chức năng trên, chúng tôi sử dụng các câu lệnh có điều kiện khác nhau để cung cấp kết quả của học sinh tùy thuộc vào cấp độ. Ngoại trừ khối mã đầu tiên, là khối
if(some_func() == 1) {}
elseif(some_func() == 2) {}
7, tất cả các điều kiện khác được kiểm tra trong các khối
function studentGrade(marks) {
  if (marks >= 50) {
    return "You have passed the exam! 🥳";
  } else {
    return "You have failed the exam!";
  }
}

console.log(studentGrade(75)); // "You have passed the exam! 🥳"
6. Và nếu không có điều kiện nào là đúng, thì else cuối cùng sẽ thực hiện khối mã của nó.
Chuyển đổi câu lệnh
Câu lệnh Switch là một câu lệnh lựa chọn trắc nghiệm. Khi bạn đã đưa ra các lựa chọn và biểu thức có liên quan cho mỗi lựa chọn, nó sẽ xem qua các lựa chọn cho đến khi nó tìm thấy sự lựa chọn phù hợp với biểu thức và thực hiện nó. Hãy viết lại kịch bản thứ hai bằng cách sử dụng câu lệnh Switch.
function studentFinalResultSwitch(grade) {
  switch (grade) {
    case "A+":
      return "Nailed It! 🥳";
    case "A":
    case "B+":
    case "B":
      return "Passed 💃";
    case "C":
      return "Barely Survived 😌";
    case "D":
      return "Failed 😢";
    default:
      return "Failed 😢";
  }
}


console.log(studentFinalResultSwitch("A+"));   // "Nailed It! 🥳"
Trong ví dụ trên, chúng tôi có điều kiện chính có nhiều sự lựa chọn. Khi chúng tôi kiểm tra lớp cụ thể, nó sẽ kiểm tra biểu thức nào mà lớp thuộc về và sau đó chạy khối trường hợp đó. Trong trường hợp này, khi lớp là "A+", nó chạy
function studentGrade(marks) {
  if (marks >= 50) {
    return "You have passed the exam! 🥳";
  } else {
    return "You have failed the exam!";
  }
}

console.log(studentGrade(75)); // "You have passed the exam! 🥳"
8 và trả về kết quả "đóng đinh nó!".
Bây giờ bạn có thể suy nghĩ cả về câu lệnh if-else và chuyển đổi khá giống nhau và có thể nếu tôi có vẻ đơn giản hơn khi sử dụng. Và bạn có thể có lý do của bạn để chọn cái này hơn cái kia. Vì vậy, trước khi nhảy vào bất kỳ kết luận nào, chúng ta hãy kiểm tra sự khác biệt giữa các câu lệnh if-else và chuyển đổi. Biểu đồ so sánh
Điều khoản cơ bản Kiểm tra biểu thức kiểm traMột câu lệnh IF-Else có thể kiểm tra biểu thức dựa trên một loạt các giá trị hoặc điều kiện.
Một câu lệnh Switch kiểm tra các biểu thức chỉ dựa trên một số nguyên duy nhất, giá trị được liệt kê hoặc đối tượng chuỗi. Lý tưởng choCác nhánh có điều kiện IF-Else là tuyệt vời cho các điều kiện thay đổi dẫn đến Boolean.
Câu lệnh chuyển đổi là lý tưởng cho các giá trị dữ liệu cố định. Tạo ra bàn nhảyTrong trường hợp IF-Else, chúng tôi không tạo một bảng nhảy và tất cả các trường hợp được thực thi vào thời gian chạy.
Trong trường hợp chuyển đổi, chúng tôi tạo bảng nhảy trên thời gian biên dịch, chỉ có trường hợp được chọn được thực hiện khi chạy. Loại tìm kiếmNếu khác thực hiện tìm kiếm tuyến tính.
Chuyển đổi công tắc nhị phân. Điều kiện & biểu hiệnCó điều kiện khác nhau là có thể.
Chúng ta chỉ có thể có một biểu thức. Sự đánh giáCâu lệnh IF-Else đánh giá số nguyên, ký tự, con trỏ hoặc loại dấu phẩy động hoặc loại boolean.
Tuyên bố chuyển đổi chỉ đánh giá giá trị ký tự hoặc số nguyên. Trình tự thực thiĐó là một trong những câu chuyện nếu sẽ được thực thi, hoặc điều kiện khác được thực thi.
Câu lệnh CASE SWITE thực hiện một trường hợp sau một câu lệnh Break xuất hiện hoặc cho đến khi đạt được câu lệnh chuyển đổi. Thực thi mặc địnhThật dễ dàng để chỉnh sửa các trường hợp chuyển đổi vì chúng được nhận ra dễ dàng.

Theo so sánh ở trên, bạn có thể thấy quyết định lựa chọn có điều kiện là tùy thuộc vào kịch bản và sự phức tạp của nó. Ví dụ: chúng ta có thể chọn cả câu lệnh IF-Else và Switch cho kịch bản thứ hai vì chúng tôi chỉ kiểm tra một báo cáo, điều này có thể không tạo ra bất kỳ sự khác biệt nào về hiệu suất ngoại trừ khả năng đọc.

Hãy tiến thêm một bước và làm cho kịch bản của chúng tôi hơi phức tạp.

Kịch bản ba

Điều gì sẽ xảy ra nếu chúng ta muốn in điểm cho tất cả các học sinh trong tất cả các lớp? Hãy tưởng tượng rằng chúng tôi có mười lớp cho lớp 5. và mỗi lớp bao gồm 50 học sinh. Vì vậy, hoàn toàn, chúng tôi phải kiểm tra và in kết quả cho khoảng 500 sinh viên.

Nếu chúng ta sử dụng câu lệnh IF-Else cho việc này, chúng ta có thể gặp phải một độ trễ hiệu suất nhỏ. Đó là bởi vì, trong quá trình thực thi, câu lệnh if-else luôn thực thi biểu thức để kiểm tra xem điều kiện có thỏa mãn hay không. Mọi thứ sẽ trở nên chậm hơn khi có nhiều điều kiện hơn để kiểm tra và khi các lựa chọn trở nên phức tạp.

Mặt khác, một câu lệnh chuyển đổi hoạt động tương đối nhanh hơn vì trình biên dịch tạo ra một bảng nhảy cho các trường hợp chuyển đổi trong thời gian biên dịch. Vì vậy, khi mã chạy, thay vì kiểm tra các trường hợp nào được thỏa mãn, nó chỉ quyết định trường hợp nào nên được thực thi. Trong kịch bản thứ ba của chúng tôi, để tạo báo cáo cho nhiều sinh viên, trường hợp chuyển đổi có thể là cách tiếp cận tốt hơn.

Tôi hy vọng bây giờ bạn có thể hiểu rằng dựa trên so sánh ở trên và các ví dụ của chúng tôi, cả hai câu lệnh đều có vị trí của chúng trong mã và tùy thuộc vào bạn để chọn một trong những phù hợp với kịch bản nào. Không có cách làm đúng hay sai.

Vậy làm thế nào chúng ta có thể chọn câu nói nào để sử dụng?

Hướng dẫn which is better if else or switch php? - cái nào tốt hơn nếu khác hoặc chuyển đổi php?

Chọn cái này qua cái kia không đơn giản. Dưới đây là một số lời khuyên khi chọn cái này qua cái kia;

Bạn có thể sử dụng IF-Else khi:

  • Kết quả điều kiện là
    function studentGrade(marks) {
      if (marks >= 50) {
        return "You have passed the exam! 🥳";
      } else {
        return "You have failed the exam!";
      }
    }
    
    console.log(studentGrade(75)); // "You have passed the exam! 🥳"
    
    9.
  • Các điều kiện rất phức tạp. Ví dụ, bạn có điều kiện với nhiều toán tử logic.

Bạn có thể sử dụng trường hợp chuyển đổi khi:

  • Có nhiều lựa chọn cho một biểu thức.
  • Điều kiện này dựa trên một tập hợp các giá trị được xác định trước như enum, hằng số, các loại đã biết. Ví dụ: mã lỗi, trạng thái, trạng thái, loại đối tượng, v.v.

Vì vậy, dựa trên hiệu suất, khả năng đọc, khả năng hiểu, khả năng thay đổi, bạn sẽ phải quyết định xem có nên sử dụng các câu lệnh IF-Else hay báo cáo chuyển đổi hay không. Khi bạn đọc thêm mã và viết thêm mã, cuối cùng, bạn sẽ bắt đầu tìm ra cái nào phù hợp với kịch bản nào; Nó đi kèm với thực hành.

Ngoài ra, có nhiều cách tiếp cận hơn nếu bạn muốn tránh các điều kiện nhiều nhất có thể, đặc biệt là trong JavaScript; Tra cứu mảng hoặc tra cứu đối tượng là một vài cách tiếp cận phổ biến.

Bớt tư tưởng

Bạn có thể thấy khó hiểu khi quyết định khi nào nên sử dụng câu nói nào như một người mới, nhưng nó trở nên tốt hơn với thực hành nhiều hơn. Hãy nhớ rằng mọi trường hợp đều yêu cầu một giải pháp cụ thể nhưng không có câu trả lời đúng hay sai. Và tùy thuộc vào bạn để chọn một giải pháp phù hợp dựa trên kinh nghiệm của bạn. Vì vậy, tôi hy vọng rằng sự so sánh được cung cấp ở đây giúp bạn dễ dàng xác định sự khác biệt giữa các câu lệnh IF-Else và chuyển đổi và không chọn một bên.

Nếu công cụ duy nhất bạn có là búa, bạn có xu hướng xem mọi vấn đề như một cái đinh - Abraham Maslow

Mã hóa hạnh phúc!

Hướng dẫn which is better if else or switch php? - cái nào tốt hơn nếu khác hoặc chuyển đổi php?

References:

  • Thuật toán và điều khiển dòng chảy

  • Tuyên bố chuyển đổi

  • Tuyên bố IF-Else

  • Đưa ra quyết định trong mã của bạn - điều kiện

  • Sự khác biệt giữa IF-Else và Case chuyển đổi



Tham gia cộng đồng nhà phát triển Dasha, nơi bạn sẽ gặp các nhà phát triển có cùng chí hướng, những người chia sẻ ý tưởng, câu hỏi và nhận được tất cả sự giúp đỡ họ cần để xây dựng các ứng dụng AI trò chuyện thú vị (tất nhiên là miễn phí).

Công tắc nào nhanh hơn hoặc nếu PHP?

Quy tắc chung là sử dụng công tắc bất cứ khi nào số điều kiện lớn hơn 3 (cho khả năng đọc). Nếu / nếu không / khác linh hoạt hơn (do đó tốt hơn), nhưng công tắc nhanh hơn một chút vì nó chỉ tính toán điều kiện một lần và sau đó kiểm tra đầu ra, trong khi nếu phải làm điều này mỗi lần.switch is slightly faster because it just computes the condition once and then checks for the output, while if has to do this every time.

Tốt hơn là sử dụng công tắc hay nếu

Một câu lệnh chuyển đổi nhanh hơn đáng kể so với thang if-else nếu có nhiều if-else liên quan.Điều này là do việc tạo ra một bảng nhảy cho công tắc trong quá trình biên dịch.Kết quả là, thay vì kiểm tra trường hợp nào được thỏa mãn trong suốt quá trình thực thi, nó chỉ quyết định trường hợp nào phải được hoàn thành.. This is due to the creation of a jump table for switch during compilation. As a result, instead of checking which case is satisfied throughout execution, it just decides which case must be completed.

Công tắc nhanh hơn là gì hoặc nếu

Một câu lệnh Switch hoạt động nhanh hơn nhiều so với thang if-else tương đương.Đó là do trình biên dịch tạo ra một bảng nhảy cho một công tắc trong quá trình biên dịch.Kết quả là, trong quá trình thực hiện, thay vì kiểm tra trường hợp nào được thỏa mãn, nó chỉ quyết định trường hợp nào phải được thực thi.. It's because the compiler generates a jump table for a switch during compilation. As a result, during execution, instead of checking which case is satisfied, it only decides which case has to be executed.

Là chuyển đổi hay nếu hiệu quả hơn?

Hóa ra, câu lệnh chuyển đổi nhanh hơn trong hầu hết các trường hợp khi so sánh với IF-Else, nhưng chỉ nhanh hơn đáng kể khi số lượng điều kiện lớn.Sự khác biệt chính về hiệu suất giữa hai là chi phí gia tăng của một điều kiện bổ sung lớn hơn đối với IF-Else so với đối với Switch.the switch statement is faster in most cases when compared to if-else , but significantly faster only when the number of conditions is large. The primary difference in performance between the two is that the incremental cost of an additional condition is larger for if-else than it is for switch .