นี่เป็นคำตอบทางอ้อม แต่คำถามนี้ทำให้ฉันคิดถึงตรรกะที่อยู่เบื้องหลังและฉันคิดว่านี่อาจคุ้มค่าที่จะแบ่งปัน
อย่างที่ใคร ๆ พูดกันคุณใช้do ... while
ลูปเมื่อคุณต้องการเรียกใช้ร่างกายอย่างน้อยหนึ่งครั้ง แต่คุณต้องการทำเช่นนั้นภายใต้สถานการณ์ใด?
ดีชั้นที่ชัดเจนที่สุดของสถานการณ์ที่ฉันสามารถคิดจะเมื่อเริ่มต้นค่า ( "unprimed") สภาพการตรวจสอบเป็นเช่นเดียวกับเมื่อคุณต้องการที่จะออกจาก ซึ่งหมายความว่าคุณจำเป็นต้องเรียกใช้งาน loop body หนึ่งครั้งเพื่อกำหนดเงื่อนไขให้เป็นค่าที่ไม่ได้ออกจากนั้นจึงทำการทำซ้ำตามเงื่อนไขนั้น เกิดอะไรขึ้นกับโปรแกรมเมอร์ที่ขี้เกียจมากมีคนตัดสินใจที่จะรวมสิ่งนี้ไว้ในโครงสร้างการควบคุม
ตัวอย่างเช่นการอ่านอักขระจากพอร์ตอนุกรมที่มีการหมดเวลาอาจอยู่ในรูปแบบ (ใน Python):
response_buffer = []
char_read = port.read(1)
while char_read:
response_buffer.append(char_read)
char_read = port.read(1)
# When there's nothing to read after 1s, there is no more data
response = ''.join(response_buffer)
หมายเหตุการทำซ้ำรหัส: char_read = port.read(1)
. ถ้า Python มีdo ... while
ลูปฉันอาจใช้:
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
ประโยชน์เพิ่มเติมสำหรับภาษาที่สร้างขอบเขตใหม่สำหรับลูป: char_read
ไม่ทำให้เนมสเปซของฟังก์ชันก่อมลพิษ แต่โปรดทราบด้วยว่ามีวิธีที่ดีกว่าในการทำเช่นนี้และนั่นคือการใช้None
ค่าของ Python :
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
ดังนั้นนี่คือประเด็นสำคัญของฉัน: ในภาษาที่มีประเภทที่เป็นโมฆะสถานการณ์จะinitial_value == exit_value
เกิดขึ้นน้อยกว่ามากและนั่นอาจเป็นสาเหตุที่คุณไม่พบเจอ ฉันไม่ได้บอกว่ามันไม่เคยเกิดขึ้นเพราะยังมีบางครั้งที่ฟังก์ชันจะกลับมาNone
แสดงถึงเงื่อนไขที่ถูกต้อง แต่ในความเห็นที่รีบร้อนและพิจารณาสั้น ๆ สิ่งนี้จะเกิดขึ้นอีกมากหากภาษาที่คุณใช้ไม่อนุญาตให้มีค่าที่บ่งบอกว่าตัวแปรนี้ยังไม่ได้เริ่มต้น
นี่ไม่ใช่การให้เหตุผลที่สมบูรณ์แบบ: ในความเป็นจริงตอนนี้ค่า null เป็นเรื่องธรรมดาพวกเขาเพียงสร้างองค์ประกอบอีกหนึ่งชุดของชุดค่าที่ถูกต้องซึ่งตัวแปรสามารถรับได้ แต่ในทางปฏิบัติโปรแกรมเมอร์มีวิธีแยกแยะระหว่างตัวแปรที่อยู่ในสถานะที่เหมาะสมซึ่งอาจรวมถึงสถานะการออกจากลูปและอยู่ในสถานะที่ไม่ได้เริ่มต้น