Đây là một câu trả lời gián tiếp, nhưng câu hỏi này khiến tôi suy nghĩ về logic đằng sau nó, và tôi nghĩ điều này có thể đáng được chia sẻ.
Như mọi người đã nói, bạn sử dụng do ... while
vòng lặp khi bạn muốn thực thi phần thân ít nhất một lần. Nhưng bạn muốn làm điều đó trong hoàn cảnh nào?
Chà, loại tình huống rõ ràng nhất mà tôi có thể nghĩ đến sẽ là khi giá trị ban đầu ("không có mã") của điều kiện kiểm tra giống như khi bạn muốn thoát . Điều này có nghĩa là bạn cần thực thi phần thân của vòng lặp một lần để điều kiện nguyên tố thành giá trị không thoát, và sau đó thực hiện lặp lại thực tế dựa trên điều kiện đó. Điều gì xảy ra với việc các lập trình viên quá lười biếng, ai đó đã quyết định gói gọn điều này trong một cấu trúc điều khiển.
Vì vậy, ví dụ: đọc các ký tự từ một cổng nối tiếp với thời gian chờ có thể có dạng (bằng 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)
Lưu ý việc sao chép mã: char_read = port.read(1)
. Nếu Python có một do ... while
vòng lặp, tôi có thể đã sử dụng:
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
Lợi ích bổ sung cho các ngôn ngữ tạo phạm vi mới cho các vòng lặp: char_read
không gây ô nhiễm không gian tên hàm. Nhưng cũng lưu ý rằng có một cách tốt hơn để làm điều này, đó là sử dụng None
giá trị của Python :
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
Vì vậy, đây là mấu chốt của quan điểm của tôi: trong các ngôn ngữ có kiểu nullable, tình huống này initial_value == exit_value
ít xảy ra hơn rất nhiều và đó có thể là lý do tại sao bạn không gặp phải nó. Tôi không nói rằng nó không bao giờ xảy ra, bởi vì vẫn có những lúc một hàm sẽ quay trở lại None
để biểu thị một điều kiện hợp lệ. Nhưng theo ý kiến vội vã và được cân nhắc ngắn gọn của tôi, điều này sẽ xảy ra nhiều hơn nếu các ngôn ngữ bạn sử dụng không cho phép giá trị biểu thị: biến này chưa được khởi tạo.
Đây không phải là lý luận hoàn hảo: trong thực tế, hiện nay giá trị null đã phổ biến, chúng chỉ đơn giản là tạo thành một phần tử nữa của tập giá trị hợp lệ mà một biến có thể nhận. Nhưng trên thực tế, các lập trình viên có một cách để phân biệt giữa một biến đang ở trạng thái hợp lý, có thể bao gồm trạng thái thoát vòng lặp và biến ở trạng thái chưa được khởi tạo.