Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีการใช้ Ruby Ternary Operator (?:)

โอเปอเรเตอร์ 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 แล้ว โอเปอเรเตอร์นี้ช่วยให้คุณเขียนคำสั่งแบบมีเงื่อนไขแบบย่อ ซึ่งจะทำให้โค้ดของคุณอ่านง่ายขึ้นหรือยากขึ้นขึ้นอยู่กับสถานการณ์

ตอนนี้ถึงตาคุณแล้ว! ฝึกฝนสิ่งที่คุณเรียนรู้เพื่อนำความรู้นี้ไปใส่ในสมองของคุณ

ขอบคุณที่อ่านนะคะ 🙂