นี่เป็นวิธีที่นิยมมากที่สุด (ดูเหมือนฉัน) ในการตรวจสอบว่าค่าอยู่ในอาร์เรย์หรือไม่:
for (int x : array)
{
if (x == value)
return true;
}
return false;
อย่างไรก็ตามในหนังสือที่ฉันอ่านเมื่อหลายปีก่อนโดยอาจ Wirth หรือ Dijkstra มันก็บอกว่าสไตล์นี้ดีกว่า (เมื่อเทียบกับ while-loop ที่มีทางออกด้านใน):
int i = 0;
while (i < array.length && array[i] != value)
i++;
return i < array.length;
วิธีนี้เงื่อนไขการออกเพิ่มเติมกลายเป็นส่วนหนึ่งที่ชัดเจนของลูปค่าคงที่ไม่มีเงื่อนไขที่ซ่อนอยู่และออกจากภายในลูปทุกอย่างชัดเจนมากขึ้นและมากขึ้นด้วยวิธีการเขียนโปรแกรมแบบมีโครงสร้าง ฉันมักจะแนะนำนี้รูปแบบหลังเมื่อใดก็ตามที่เป็นไปได้และใช้for
-loop เพียงสำทับจากไปa
b
ถึงกระนั้นฉันก็ไม่สามารถพูดได้ว่ารุ่นแรกนั้นมีความชัดเจนน้อยกว่า บางทีมันอาจจะชัดเจนและเข้าใจง่ายกว่าอย่างน้อยก็สำหรับผู้เริ่มต้น ดังนั้นฉันยังคงถามตัวเองว่าคำถามใดดีกว่ากัน?
บางทีใครบางคนสามารถให้เหตุผลที่ดีแก่คนใดคนหนึ่งในวิธีการ?
อัปเดต: นี่ไม่ใช่คำถามของจุดคืนค่าฟังก์ชัน, lambdas หรือการค้นหาองค์ประกอบในอาร์เรย์ต่อคำถาม มันเกี่ยวกับวิธีการเขียนลูปที่มีค่าคงที่ที่ซับซ้อนกว่าความไม่เท่าเทียมเพียงครั้งเดียว
อัปเดต: โอเคฉันเห็นจุดของคนที่ตอบและแสดงความคิดเห็น: ฉันผสมวง foreach ที่นี่ซึ่งตัวมันเองนั้นชัดเจนและอ่านได้มากกว่าในขณะที่วนซ้ำ ฉันไม่ควรทำอย่างนั้น แต่นี่ก็เป็นคำถามที่น่าสนใจดังนั้นเราควรปล่อยให้มันเป็นแบบนี้: foreach-loop และเงื่อนไขพิเศษภายในหรือ while-loop ที่มีค่าคงที่ loop ที่ชัดเจนและ post-condition หลังจากนั้น ดูเหมือนว่า foreach-loop ที่มีเงื่อนไขและ exit / break กำลังชนะ ฉันจะสร้างคำถามเพิ่มเติมโดยไม่มี foreach-loop (สำหรับรายการที่ลิงก์)
collection.contains(foo)