โอเปอเรเตอร์ ternary ใน Ruby คืออะไร
ternary operator ประกอบด้วยสามส่วน นั่นคือที่มาของคำว่า "ternary" ส่วนเหล่านี้รวมถึง คำสั่งเงื่อนไข &สองผลลัพธ์ที่เป็นไปได้ .
กล่าวอีกนัยหนึ่ง ternary ช่วยให้คุณสามารถเขียนนิพจน์ if/else แบบย่อในโค้ดเพียงบรรทัดเดียว
ตัวอย่างเช่น :
if apple_stock > 1 :eat_apple else :buy_apple end
กลายเป็นสิ่งนี้ได้ :
apple_stock > 1 ? :eat_apple : :buy_apple
ขอบคุณโอเปอเรเตอร์ ternary!
คำถาม…
มันทำงานอย่างไรกันแน่ &ไวยากรณ์ที่ถูกต้องคืออะไร?
มาหาคำตอบกัน
เทมเพลตสำหรับเขียน Ternary ของคุณเอง
หากเราสรุปไวยากรณ์สำหรับโอเปอเรเตอร์ ternary คุณจะได้รับเทมเพลตประเภท "กรอกข้อมูลในช่องว่าง"
หน้าตาเป็นแบบนี้ :
condition ? true : false
ส่วนแรกของ ternary operator คือ เงื่อนไข ตามเงื่อนไขที่ต้องการตรวจสอบว่าจริงหรือไม่
หลังจากนั้นเราก็มีเครื่องหมายคำถาม (?
)
นั่นเป็นส่วนหนึ่งของไวยากรณ์!
Ruby รู้ได้อย่างไรว่าคุณกำลังเขียนโอเปอเรเตอร์แบบไตรภาค
ถัดไป :
เรามีโค้ดที่คุณต้องการเรียกใช้หากเงื่อนไขกลายเป็น true
, ผลลัพธ์แรกที่เป็นไปได้ .
แล้วโคลอน (:
) องค์ประกอบไวยากรณ์ another อื่น .
สุดท้าย เรามีรหัสที่คุณต้องการเรียกใช้หากเงื่อนไขเป็น false
, ผลลัพธ์ที่เป็นไปได้ที่สอง .
ตัวอย่าง :
"chocolate".size > 4 ? "More than four characters" : "Less than four characters"
- สภาพ =>
"chocolate".size > 4
- ถ้าเป็น True =>
"More than four characters"
- Else =>
"Less than four characters"
ทั้งสามส่วนนี้เป็นส่วนประกอบของนิพจน์ไตรภาคทุกส่วน
อย่าลืม ?
ระหว่างเงื่อนไขและผลลัพธ์ที่เป็นไปได้ แม้ว่าชื่อเมธอดจะลงท้ายด้วยเครื่องหมายคำถาม
ตัวอย่าง :
"".empty? ? "Yes" : "No"
อันนี้มองข้ามได้ง่าย ดังนั้นโปรดใส่ใจเมื่อเขียนโค้ดประเภทนี้
ตัวดำเนินการแบบสามส่วนที่ซับซ้อน
สามารถใช้ตัวดำเนินการ ternary ได้ไม่ถูกต้อง
มันเริ่มกลายเป็นความคิดที่ไม่ดีเมื่อใดก็ตามที่คุณต้องการทำอะไรที่ซับซ้อนกับมัน
ตัวอย่างเช่น :
คุณสามารถกำหนดผลลัพธ์ของนิพจน์ไตรภาคให้กับตัวแปรได้
a = 10 > 5 ? "yes" : "no"
ไม่เป็นไร
แต่มันเริ่มซับซ้อนขึ้นเมื่อผลลัพธ์ที่เป็นไปได้ของคุณมีช่องว่างในตัวมัน
นี่คือตัวอย่าง :
10 > 5 ? (puts "yes") : (puts "no")
เราต้องใช้วงเล็บตรงนี้
ทำไม?
เพราะถ้าคุณไม่ทำ คุณจะได้รับ SyntaxError
.
วงเล็บเหล่านี้ทำให้โค้ดนี้เข้าใจยากขึ้นเล็กน้อย ซึ่งนำออกจาก ความสามารถในการอ่าน &สไตล์ประโยชน์ของการใช้ไตรภาค
พึงระลึกไว้เสมอว่าเมื่อเลือกใช้ไตรภาคหรือไม่
Ternary Operators &Operator Precence
ปัญหาอีกประการหนึ่งที่เกิดขึ้นกับนิพจน์ไตรภาคคือลำดับความสำคัญของตัวดำเนินการ
นี่คือตัวอย่าง :
[].tap { |a| a << "ccccc".size == 0 ? "empty" : "not empty" } # [5]
ฉันคาดหวังว่า "empty"
หรือ "not empty"
สองผลลัพธ์ที่เป็นไปได้สำหรับไตรภาคของเรา แต่เราได้ 5
แทน
เกิดอะไรขึ้น
ปรากฎว่า Ruby และภาษาโปรแกรมส่วนใหญ่ประมวลผลนิพจน์ที่มีระดับความสำคัญต่างกัน
สิ่งนี้เกิดขึ้นได้แม้ในทางคณิตศาสตร์อย่างง่าย!
ดังที่คุณทราบ การคูณจะถูกประเมินก่อนการบวกและการลบ
ในทำนองเดียวกันใน Ruby การเรียกเมธอด (<<
&size
) มีผลเหนือกว่าตัวดำเนินการ ternary ซึ่งอธิบายพฤติกรรมในตัวอย่างที่แล้ว
คุณแก้ได้ด้วยวงเล็บ :
[].tap { |a| a << ("bbbbb".size == 0 ? "empty" : "not empty") } # ["not empty"]
อีกสิ่งหนึ่งที่ควรคำนึงถึงเมื่อเขียนโอเปอเรเตอร์ไตรภาคของคุณ!
วิดีโอสอน
สรุป
คุณได้เรียนรู้เกี่ยวกับโอเปอเรเตอร์เงื่อนไขแบบไตรภาคใน Ruby แล้ว โอเปอเรเตอร์นี้ช่วยให้คุณเขียนคำสั่งแบบมีเงื่อนไขแบบย่อ ซึ่งจะทำให้โค้ดของคุณอ่านง่ายขึ้นหรือยากขึ้นขึ้นอยู่กับสถานการณ์
ตอนนี้ถึงตาคุณแล้ว! ฝึกฝนสิ่งที่คุณเรียนรู้เพื่อนำความรู้นี้ไปใส่ในสมองของคุณ
ขอบคุณที่อ่านนะคะ 🙂