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 result
thay 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ì đó.
goto
vì vì sử dụng goto
là hình thức xấu :)
do{}while(false)
là bên trong các macro. Một đơn giản if
không đủ, bởi vì nó tương tác xấu với else
s xung quanh có thể có mặt. Nếu không có macro, bạn cũng có thể loại bỏ do
và while
.