คำถามติดแท็ก short-circuiting

คุณลักษณะของบางภาษาในการข้ามโค้ดบางอย่างในขณะรันไทม์ซึ่งไม่ส่งผลต่อผลลัพธ์โดยเฉพาะอย่างยิ่งเมื่อทดสอบเงื่อนไขผสม

3
มีผู้ประกอบการที่ประกอบไปด้วยเงื่อนไขใน VB.NET หรือไม่?
ใน Perl (และภาษาอื่น ๆ ) ผู้ประกอบการที่มีเงื่อนไขสามารถแสดงได้ดังนี้: my $foo = $bar == $buz ? $cat : $dog; มีผู้ประกอบการที่คล้ายกันใน VB.NET หรือไม่?




14
SQL WHERE clause ได้รับการประเมินหรือไม่
นิพจน์บูลีนใน SQL คำสั่งที่มีการประเมินการลัดวงจรอยู่ ที่ไหน? ตัวอย่างเช่น: SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) ถ้า@key IS NULLประเมินว่าเป็นจริง@key ไม่ได้เป็น NULL และ @key = t.Keyประเมินหรือไม่ ถ้าไม่ทำไมล่ะ ถ้าใช่มันรับประกันหรือไม่? มันเป็นส่วนหนึ่งของ ANSI SQL หรือเป็นฐานข้อมูลเฉพาะหรือไม่ ถ้าฐานข้อมูลเฉพาะ SqlServer ออราเคิล? MySQL?

7
ตัวดำเนินการเชิงตรรกะที่ลัดวงจรได้รับคำสั่งหรือไม่? และลำดับการประเมินผล?
มาตรฐาน ANSI กำหนดให้ตัวดำเนินการเชิงตรรกะต้องทำการลัดวงจรใน C หรือ C ++ หรือไม่? ฉันสับสนเพราะฉันจำได้ว่าหนังสือ K&R บอกว่ารหัสของคุณไม่ควรขึ้นอยู่กับการดำเนินการเหล่านี้เพราะไฟฟ้าลัดวงจรเพราะอาจไม่ได้ ใครช่วยกรุณาชี้ให้เห็นว่าในมาตรฐานมันกล่าวว่าตรรกะ ops จะลัดวงจรเสมอ? ฉันสนใจ C ++ เป็นส่วนใหญ่คำตอบสำหรับ C ก็ยอดเยี่ยมเช่นกัน ฉันยังจำการอ่าน (จำไม่ได้ว่าอยู่ที่ไหน) ลำดับการประเมินนั้นไม่ได้ถูกกำหนดอย่างเข้มงวดดังนั้นโค้ดของคุณไม่ควรขึ้นอยู่กับหรือฟังก์ชั่นภายในนิพจน์จะถูกดำเนินการตามลำดับเฉพาะ: ในตอนท้ายของคำสั่ง จะได้รับการเรียก แต่คอมไพเลอร์มีอิสระในการเลือกคำสั่งที่มีประสิทธิภาพที่สุด มาตรฐานระบุลำดับการประเมินผลของนิพจน์นี้หรือไม่ if( functionA() && functionB() && functionC() ) cout<<"Hello world";

9
มีเหตุผลจริงหรือไม่ที่ทำให้เกิดการ && และ || มากเกินไป อย่าลัดวงจร?
พฤติกรรมการลัดวงจรของผู้ปฏิบัติงาน&&และ||เป็นเครื่องมือที่ยอดเยี่ยมสำหรับโปรแกรมเมอร์ แต่ทำไมพวกเขาถึงสูญเสียพฤติกรรมนี้เมื่อทำงานหนักเกินไป? ฉันเข้าใจว่าตัวดำเนินการเป็นเพียงน้ำตาลเชิงซ้อนสำหรับฟังก์ชั่น แต่ผู้ปฏิบัติงานboolมีพฤติกรรมนี้ทำไมจึงต้อง จำกัด ประเภทเดียวนี้ มีเหตุผลทางเทคนิคที่อยู่เบื้องหลังสิ่งนี้หรือไม่?

2
ตัวดำเนินการ Ternary ใน Java ประเมินเพียงนิพจน์เดียวตั้งแต่ Java 7 - Java 1.6 และต่ำกว่านั้นแตกต่างกันหรือไม่
การเตรียมตัวสำหรับการสอบ Oracle Certified Associate Java SE 8 Programmer 1 ฉันพบย่อหน้าต่อไปนี้เกี่ยวกับนิพจน์ด้านท้ายในคู่มือการศึกษาอย่างเป็นทางการ: การประเมินนิพจน์ Ternary ณ Java 7 นิพจน์ทางขวามือเดียวของตัวดำเนินการ ternary จะได้รับการประเมินที่รันไทม์ ในลักษณะที่คล้ายกับตัวดำเนินการลัดวงจรหากหนึ่งในสองนิพจน์ขวามือในตัวดำเนินการที่เกี่ยวข้องมีผลข้างเคียงก็อาจไม่สามารถใช้ในรันไทม์ได้ ขอยกตัวอย่างหลักการนี้ด้วยตัวอย่างต่อไปนี้: [... ] มันบอกว่ามีการประเมินเพียงหนึ่งในสองนิพจน์โดยแสดงให้เห็นด้วยตัวอย่างต่อไปนี้: int y = 1; int z = 1; int a = y < 10 ? y++ : z++; ที่นี่yเพิ่มขึ้นเท่านั้นแต่zไม่เป็นไปตามที่คุณคาดหวัง สิ่งที่ฉันสะดุดคือจุดเริ่มต้นของย่อหน้า (ทำเครื่องหมายด้วยสีเหลือง) ซึ่งมีข้อความว่า "As of Java 7, ... …

2
JavaScript มีการประเมิน "ลัดวงจร" หรือไม่
ฉันต้องการทราบว่า JavaScript มีการประเมิน "ลัดวงจร" เช่น && Operator ใน C # หรือไม่ ถ้าไม่ฉันต้องการทราบว่ามีวิธีแก้ปัญหาที่เหมาะสมในการนำไปใช้หรือไม่


10
คำสั่ง if - การประเมินการลัดวงจรเทียบกับความสามารถในการอ่าน
บางครั้งคำสั่งจะมีความซับซ้อนมากกว่าหรือยาวดังนั้นเพื่อประโยชน์ของการอ่านมันจะดีกว่าที่จะดึงสายซับซ้อนก่อนifif เช่นนี้: if (SomeComplicatedFunctionCall() || OtherComplicatedFunctionCall()) { // do stuff } ในสิ่งนี้ bool b1 = SomeComplicatedFunctionCall(); bool b2 = OtherComplicatedFunctionCall(); if (b1 || b2) { //do stuff } (ตัวอย่างเช่นระบุไม่ใช่ว่าไม่ดีก็เพียงเพื่อประกอบการอธิบาย ... จินตนาการสายอื่น ๆ ที่มีข้อโต้แย้งหลายอื่น ๆ ) แต่ด้วยการสกัดนี้ฉันสูญเสียการประเมินการลัดวงจร (SCE) ฉันแพ้ SCE ทุกครั้งหรือไม่? มีสถานการณ์บางอย่างที่คอมไพเลอร์ได้รับอนุญาตให้ "ปรับให้เหมาะสม" และยังคงให้ SCE อยู่หรือไม่ มีวิธีการรักษาความสามารถในการอ่านที่ดีขึ้นของตัวอย่างข้อมูลที่สองโดยไม่สูญเสีย SCE หรือไม่

3
ทำตัวดำเนินการลัดวงจร || และ && มีอยู่สำหรับบูลีนที่เป็นโมฆะ? บางครั้ง RuntimeBinder ก็คิดเช่นนั้น
ฉันอ่านข้อกำหนดภาษา C # บนตัวดำเนินการตรรกะแบบมีเงื่อนไข ||และ&&หรือที่เรียกว่าตัวดำเนินการทางตรรกะที่ลัดวงจร สำหรับฉันแล้วมันดูเหมือนไม่ชัดเจนว่าสิ่งเหล่านี้มีอยู่สำหรับบูลีนที่เป็นโมฆะหรือไม่เช่นประเภทตัวถูกดำเนินการNullable<bool>(เขียนด้วยbool?) ดังนั้นฉันจึงลองด้วยการพิมพ์แบบไม่ไดนามิก: bool a = true; bool? b = null; bool? xxxx = b || a; // compile-time error, || can't be applied to these types ดูเหมือนจะช่วยชำระคำถามได้ (ฉันไม่เข้าใจข้อกำหนดอย่างชัดเจน แต่สมมติว่าการใช้งานคอมไพเลอร์ Visual C # ถูกต้องตอนนี้ฉันรู้แล้ว) อย่างไรก็ตามฉันก็อยากลองdynamicผูกด้วยเช่นกัน ดังนั้นฉันจึงลองสิ่งนี้แทน: static class Program { static dynamic A { get { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.