กลับไปหน้าบทความ

อ่าน 3 นาที

ผู้ดำเนินการเอลวิส

ในภาษา โปรแกรมคอมพิวเตอร์ บางภาษา ตัว ดำเนินการเอลวิส (Elvis operator) ซึ่งมักเขียนว่า `elvis_true` ?

ผู้ดำเนินการเอลวิส

เอลวิส เพรสลีย์ ผู้มีผมที่ดูคล้ายกับผู้ควบคุมเครื่องจักรที่มองจากด้านข้าง

ในภาษาโปรแกรมคอมพิวเตอร์ บางภาษา ตัว ดำเนินการเอลวิส (Elvis operator)ซึ่งมักเขียนว่า `elvis_true` ?:เป็นตัวดำเนินการไบนารีที่ส่งคืนตัวถูกดำเนินการตัวแรกหากค่าของมันเป็นจริงทางตรรกะ (ตามข้อตกลงที่ขึ้นอยู่กับภาษา กล่าวคือ ค่า ที่เป็นจริง ) หรือส่งคืนตัวถูกดำเนินการตัวที่สองหากตัวถูกดำเนินการตัวแรกไม่เป็นจริง นั่นคือ มันเป็นตัว ดำเนิน การลัดวงจร (short-circuitOR ) ที่ส่งคืนตัวถูกดำเนินการตัวแรกที่เป็นจริง

ไวยากรณ์ของตัวดำเนินการเอลวิสได้รับแรงบันดาลใจจากตัวดำเนินการเงื่อนไขแบบสามตัวแปร , ? :, เนื่องจากนิพจน์ของตัวดำเนินการเอลวิสA ?: Bเทียบเท่ากับนิพจน์เงื่อนไขแบบสามตัวแปรโดยA ? A : Bประมาณ

เรียกว่า "ตัวดำเนินการเอลวิส" เพราะสัญลักษณ์นี้?:เมื่อมองจากด้านข้าง จะมีลักษณะคล้ายอีโมติคอนของเอลวิส เพรสลีย์ที่มีทรงผมอันเป็นเอกลักษณ์[ 1 ]

ตัวดำเนินการที่คล้ายกันคือตัวดำเนินการรวมค่าว่างซึ่งการตรวจสอบความจริง (หรือความเป็นความจริง) ของบูลีนจะถูกแทนที่ด้วยการตรวจสอบว่าไม่ใช่ค่าว่างโดยปกติจะเขียนแบบนี้??และสามารถพบได้ในภาษาต่างๆ เช่นC# [ 2 ]หรือDart [ 3 ]

ไวยากรณ์ทางเลือก

ในหลายภาษา เช่นCommon Lisp , Clojure , Lua , Object Pascal , Perl , Python , RubyและJavaScriptไม่จำเป็นต้องใช้ตัวดำเนินการ Elvis เนื่องจาก ตัวดำเนิน การแยกตรรกะ ของภาษา (โดยทั่วไปคือ ` ||or` or) เป็นแบบ short-circuitingและจะคืนค่าตัวถูกดำเนินการตัวแรกหากค่าที่ได้เป็นจริงและคืนค่าตัวถูกดำเนินการตัวที่สองหากค่าที่ได้เป็นเท็จ (ไม่ใช่ค่าบูลีนจริงหรือเท็จเหมือนในภาษา C และ C++) ความหมายเหล่านี้เหมือนกับตัวดำเนินการ Elvis ทุกประการ

ตัวอย่าง

ตัวแปรบูลีน

ในภาษาที่รองรับตัวดำเนินการเอลวิส จะมีลักษณะดังนี้:

x = f() ?: g()

จะกำหนดให้xเท่ากับผลลัพธ์ของf()ถ้าผลลัพธ์นั้นเป็นค่าจริง และเท่ากับผลลัพธ์ของg()มิเช่นนั้น

ซึ่งเทียบเท่ากับตัวอย่างนี้ โดยใช้ตัวดำเนินการแบบไตรภาคที่มีเงื่อนไข :

x = f() ? f() : g()

ยกเว้นว่ามันจะไม่ถูกประเมินf()สองครั้งหากผลลัพธ์เป็นค่าที่เป็นจริง โปรดสังเกตความเป็นไปได้ของพฤติกรรมที่ไม่แน่นอนหากf()ไม่ใช่ฟังก์ชันที่ไม่ขึ้นกับสถานะซึ่งจะส่งคืนผลลัพธ์เดียวกันเสมอ

ตัวแปรอ้างอิงวัตถุ

โค้ดนี้จะส่งผลให้ได้ค่าอ้างอิงถึงอ็อบเจ็กต์ที่รับประกันว่าจะไม่เป็นค่าว่าง (null) ฟังก์ชันf()จะคืนค่าอ้างอิงถึงอ็อบเจ็กต์แทนที่จะเป็นค่าบูลีน และอาจคืนค่าว่าง (null) ซึ่งโดยทั่วไปถือว่าเป็นค่าเท็จ:

x = f() ?: "default value"

ภาษาที่รองรับตัวดำเนินการเอลวิส

  • ใน GNU CและC++ (นั่นคือ ใน C และ C++ ที่มี ส่วนขยาย GCC ) ตัวถูกดำเนินการตัวที่สองของตัวดำเนินการแบบไตรภาคเป็นตัวเลือก[ 4 ]นี่เป็นกรณีมาตั้งแต่ GCC 2.95.3 เป็นอย่างน้อย (มีนาคม 2001) และดูเหมือนจะเป็นตัวดำเนินการ Elvis ดั้งเดิม[ 5 ]
  • ในApache Groovyนั้น "ตัวดำเนินการ Elvis" ?:ได้รับการบันทึกไว้เป็นตัวดำเนินการที่แตกต่างกัน[ 6 ]คุณสมบัตินี้ถูกเพิ่มใน Groovy 1.5 [ 7 ] (ธันวาคม 2007) Groovy แตกต่างจาก GNU C และ PHP ตรงที่ไม่ยอม ให้ละเว้นตัวถูก ดำเนินการตัวที่สองของตัวดำเนินการแบบไตรภาคได้?:แต่ตัวดำเนินการแบบไบนารี?:จะต้องเขียนเป็นตัวดำเนินการเดียวโดยไม่มีช่องว่างคั่นกลาง
  • ในPHPสามารถละเว้นส่วนกลางของตัวดำเนินการแบบไตรภาคได้ตั้งแต่ PHP 5.3 [ 8 ] (มิถุนายน 2552)
  • ภาษา โปรแกรม Fantomมี?:ตัวดำเนินการไบนารีที่เปรียบเทียบตัวถูกดำเนินการตัวแรกกับnull.
  • ในKotlinตัวดำเนินการ Elvis จะส่งคืนด้านซ้ายมือหากไม่ใช่ค่าว่าง และส่งคืนด้านขวามือในกรณีอื่น[ 9 ]รูปแบบทั่วไปคือการใช้ร่วมกับreturnดังนี้:valfoo=bar()?:return
  • ในGosuตัว?:ดำเนินการจะคืนค่าตัวถูกดำเนินการด้านขวาหากด้านซ้ายเป็นค่าว่างเช่นกัน
  • ในC#ตัวดำเนินการเงื่อนไขค่าว่าง?.เรียกว่า "ตัวดำเนินการเอลวิส" [ 10 ]แต่มันไม่ได้ทำหน้าที่เดียวกันตัวดำเนินการรวมค่าว่าง??ทำหน้าที่นั้น แทน
  • ในColdFusionและCFMLตัวดำเนินการ Elvis ถูกนำมาใช้โดยใช้?:ไวยากรณ์ดังนี้
  • ภาษา การเขียนโปรแกรม Xtendมีตัวดำเนินการ Elvis [ 11 ]
  • ใน Closure Templatesของ Google ตัวดำเนินการ Elvis เป็นตัวดำเนินการรวมศูนย์ที่เป็นศูนย์ซึ่งเทียบเท่ากับisNonnull($a) ? $a : $b. [ 12 ]
  • ในBallerinaตัวดำเนินการ Elvis L ?: Rจะส่งคืนค่าของLถ้าไม่ใช่ค่าว่าง มิฉะนั้น จะส่งคืนค่าRของ[ 13 ]
  • ในJavaScript ตัวดำเนินการ nullish coalescing ( ??) เป็นตัวดำเนินการตรรกะที่ส่งคืนตัวถูกดำเนินการด้านขวามือเมื่อตัวถูกดำเนินการด้านซ้ายมือเป็นnullหรือundefinedและส่งคืนตัวถูกดำเนินการด้านซ้ายมือในกรณีอื่น ๆ[ 14 ]
  • ในPerlมีตัวดำเนินการแยกทางตรรกะแบบลัดวงจร||และลำดับความสำคัญที่ต่ำกว่าที่คล้ายกันor[ 15 ] พวกมันแตกต่างจากตัวดำเนินการ orแบบบิต|ซึ่งประเมินตัวถูกดำเนินการทั้งสองโดยไม่ลัดวงจร นอกจากนี้ยังมีตัวดำเนินการกำหนดค่าที่สอดคล้องกัน||=ซึ่งประเมินตัวถูกดำเนินการด้านขวาและกำหนดให้กับตัวถูกดำเนินการด้านซ้าย เว้นแต่ว่าค่าตรรกะของตัวถูกดำเนินการด้านซ้ายจะเป็นจริง นอกจากนี้ยังมีตัวดำเนินการdefined -or// แบบลัดวงจร ซึ่งประเมินตัวถูกดำเนินการด้านขวาและส่งคืนค่าก็ต่อเมื่อตัวถูกดำเนินการด้านซ้ายไม่ได้กำหนดไว้ สุดท้าย ตัวดำเนินการกำหนดค่าที่สอดคล้องกันคือ ตัว ดำเนินการ exclusive-or//= ที่ คล้ายกันไม่ใช่ ตัวดำเนินการ Elvisเนื่องจากไม่ลัดวงจร ตัวดำเนินการแบบลัดวงจรอื่นๆ คือตัวดำเนินการandทาง ตรรกะ และแต่พฤติกรรมของพวกมันตรงกันข้ามกับตัวดำเนินการElvis&&and

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Elvis_operator&oldid=1352624481 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ผู้ดำเนินการเอลวิส

ในภาษา โปรแกรมคอมพิวเตอร์ บางภาษา ตัว ดำเนินการเอลวิส (Elvis operator) ซึ่งมักเขียนว่า `elvis_true` ?

ไวยากรณ์ทางเลือก

ในหลายภาษา เช่น Common Lisp , Clojure , Lua , Object Pascal , Perl , Python , Ruby และ JavaScript ไม่จำเป็นต้องใช้ตัวดำเนินการ Elvis เนื่องจาก ตัวดำเนิน การแยกตรรกะ ของภาษา (โดยทั่วไปคือ ` || or` or ) เป็น แบบ short-circuiting...

ตัวแปรบูลีน

ในภาษาที่รองรับตัวดำเนินการเอลวิส จะมีลักษณะดังนี้:

ตัวแปรอ้างอิงวัตถุ

โค้ดนี้จะส่งผลให้ได้ค่าอ้างอิงถึงอ็อบเจ็กต์ที่รับประกันว่าจะไม่เป็นค่าว่าง (null) ฟังก์ชัน f() จะคืนค่าอ้างอิงถึงอ็อบเจ็กต์แทนที่จะเป็นค่าบูลีน และอาจคืนค่าว่าง (null) ซึ่งโดยทั่วไปถือว่าเป็นค่าเท็จ: