Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách sử dụng Toán tử Ruby Ternary (? :)

Toán tử bậc ba trong Ruby là gì?

Toán tử bậc ba được tạo thành từ ba phần, đó là nguồn gốc của từ "bậc ba". Những phần này bao gồm câu lệnh điều kiện & hai kết quả có thể có .

Nói cách khác, một hệ ba cung cấp cho bạn cách viết một biểu thức if / else nhỏ gọn chỉ trong một dòng mã.

Ví dụ :

if apple_stock > 1
  :eat_apple
else
  :buy_apple
end

Có thể trở thành cái này :

apple_stock > 1 ? :eat_apple : :buy_apple

Cảm ơn nhà điều hành bậc ba!

Câu hỏi…

Điều này hoạt động như thế nào, chính xác và cú pháp thích hợp là gì?

Hãy cùng tìm hiểu.

Mẫu để viết Ternary của riêng bạn

Nếu chúng tôi tổng quát hóa cú pháp cho toán tử bậc ba, bạn sẽ nhận được loại mẫu "điền vào chỗ trống".

Có vẻ như thế này :

điều kiện
condition ? true : false

Phần đầu tiên của toán tử bậc ba là điều kiện , như trong điều kiện bạn muốn kiểm tra xem điều đó có đúng hay không.

Sau đó, chúng ta có một dấu chấm hỏi (? ).

Đó là một phần của cú pháp!

Đó là cách Ruby biết rằng bạn đang viết một toán tử bậc ba.

Tiếp theo :

Chúng tôi có bất kỳ mã nào bạn muốn chạy nếu điều kiện trở thành true , kết quả đầu tiên có thể có .

Sau đó là dấu hai chấm (: ), một phần tử cú pháp khác .

Cuối cùng, chúng tôi có mã bạn muốn chạy nếu điều kiện là false , kết quả thứ hai có thể có .

Ví dụ :

"chocolate".size > 4 ? "More than four characters" : "Less than four characters"
  • Điều kiện => "chocolate".size > 4
  • If True => "More than four characters"
  • Khác => "Less than four characters"

Ba phần này là thành phần của mọi biểu thức bậc ba.

Đừng quên ? của bạn giữa điều kiện và các kết quả có thể xảy ra, ngay cả khi tên phương thức kết thúc bằng dấu chấm hỏi.

Ví dụ :

"".empty? ? "Yes" : "No"

Cái này rất dễ bị bỏ qua, vì vậy hãy chú ý khi viết loại mã này.

Các toán tử bậc ba phức tạp

Toán tử bậc ba có thể được sử dụng không chính xác.

Nó bắt đầu trở thành một ý tưởng tồi bất cứ khi nào bạn muốn làm điều gì đó phức tạp với nó.

Ví dụ :

Bạn có thể gán kết quả của một biểu thức bậc ba cho một biến.

a = 10 > 5 ? "yes" : "no"

Tốt thôi.

Nhưng nó bắt đầu phức tạp hơn khi kết quả có thể có của bạn có khoảng trống trong đó.

Đây là một ví dụ :

10 > 5 ? (puts "yes") : (puts "no")

Chúng ta phải sử dụng dấu ngoặc đơn ở đây.

Tại sao?

Bởi vì nếu không, bạn sẽ nhận được SyntaxError .

Các dấu ngoặc đơn này làm cho mã này khó hiểu hơn một chút hiểu , điều này làm mất đi khả năng đọc &phong cách lợi ích của việc sử dụng một con ba ba.

Hãy ghi nhớ điều đó khi chọn sử dụng chim ba ba hay không.

Nhà điều hành bậc ba &Quyền ưu tiên của nhà điều hành

Một vấn đề khác xảy ra với biểu thức bậc ba là quyền ưu tiên của toán tử.

Đây là một ví dụ :

[].tap { |a| a << "ccccc".size == 0 ? "empty" : "not empty" }

# [5]

Tôi mong đợi "empty" hoặc "not empty" , hai kết quả có thể xảy ra cho bậc ba của chúng ta, nhưng chúng ta đã nhận được 5 thay vào đó.

Chuyện gì đang xảy ra?

Hóa ra là Ruby và hầu hết các ngôn ngữ lập trình xử lý các biểu thức với các mức độ ưu tiên khác nhau.

Điều này xảy ra ngay cả trong số học đơn giản!

Như bạn đã biết, phép nhân được đánh giá trước phép cộng và phép trừ.

Tương tự, trong Ruby, một cuộc gọi phương thức (<< &size ) được ưu tiên hơn toán tử bậc ba, giải thích hành vi trong ví dụ cuối cùng.

Bạn có thể giải quyết vấn đề này bằng dấu ngoặc đơn :

[].tap { |a| a << ("bbbbb".size == 0 ? "empty"  : "not empty") }

# ["not empty"]

Một điều khác cần ghi nhớ khi viết toán tử bậc ba của bạn!

Hướng dẫn bằng video

Tóm tắt

Bạn đã tìm hiểu về toán tử điều kiện bậc ba trong Ruby, toán tử này cho phép bạn viết các câu lệnh điều kiện nhỏ gọn có thể làm cho mã của bạn dễ đọc hơn hoặc khó đọc hơn tùy thuộc vào tình huống.

Bây giờ đến lượt của bạn! Thực hành những gì bạn đã học để bạn có thể cài đặt kiến ​​thức này vào bộ não của mình.

Cảm ơn vì đã đọc 🙂