Làm trong khi sai
Trong công việc hôm nay, một trong những đồng nghiệp của tôi đã mô tả trường hợp sử dụng để làm trong khi (sai). Người mà anh ta đang nói chuyện nghĩ rằng điều này thật ngớ ngẩn và thật đơn giản nếu những phát biểu sẽ tốt hơn nhiều. Sau đó, chúng tôi đã tiến hành lãng phí một nửa thời gian trong ngày để thảo luận về cách tốt nhất để viết một cái gì đó tương đương với:
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
Đây là một thành ngữ được tìm thấy trong c khá thường xuyên. Chương trình của bạn sẽ tạo ra cùng một đầu ra như mã giả dưới đây tùy thuộc vào các điều kiện.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Do đó, đầu vào có thể là:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
và đầu ra phải là:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
Đây là môn đánh gôn, vì vậy câu trả lời sẽ được đánh giá theo byte. Sơ hở tiêu chuẩn bị cấm.
Vâng, đây là một điều đơn giản, nhưng hy vọng chúng ta sẽ thấy một số câu trả lời sáng tạo, tôi hy vọng sự đơn giản sẽ khuyến khích mọi người sử dụng ngôn ngữ mà họ không tự tin.
return resultthay thế break. Sau đó, bạn nhận được tiền thưởng của khả năng sử dụng lại và đơn giản hóa mã cuộc gọi, quá. Nhưng có lẽ tôi đang thiếu một cái gì đó.
gotovì vì sử dụng gotolà hình thức xấu :)
do{}while(false)là bên trong các macro. Một đơn giản ifkhông đủ, bởi vì nó tương tác xấu với elses xung quanh có thể có mặt. Nếu không có macro, bạn cũng có thể loại bỏ dovà while.