這就是我的意思是通過對-while循環:是否有任何編程語言具有for-while循環?
for (<init>; <update>) <body> while (<test>);
它大致翻譯爲:
<init>
<body>
while (<test>) {
<update>
<body>
}
這似乎是一個very common programming pattern。然而,我所知道的任何語言都沒有這樣的控制結構。因此,一個常見的解決方法是實施它如下代替:
<init>
while (true) {
<body>
unless (<test>) break;
<update>
}
雖然這個工程,它感覺非常笨重。我認爲,在無限的while循環中進行有條件的中斷會違背結構化編程的精神。
下面是需要,而一個激勵的例子循環:
function swap(arr, i, j) {
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
return arr;
}
function heapify(heap, i) {
var len = heap.length;
for (var min = i; swap(heap, i, min), i = min) {
var left = 2 * i + 1;
var right = 2 * (i + 1);
if (left < len && heap[left] < heap[min]) min = left;
if (right < len && heap[right] < heap[min]) min = right;
} while (min !== i);
return heap;
}
正如你所看到的,控制是很容易跟蹤和代碼比解決方法清潔了很多:
function swap(arr, i, j) {
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
return arr;
}
function heapify(heap, i) {
var len = heap.length;
var min = i;
do (true) {
var left = 2 * i + 1;
var right = 2 * (i + 1);
if (left < len && heap[left] < heap[min]) min = left;
if (right < len && heap[right] < heap[min]) min = right;
if (min === i) break;
swap(heap, i, min);
i = min;
}
return heap;
}
無論如何,你知道任何具有這種控制結構的編程語言嗎? Lisp不計算因爲它主要是功能性的,我正在尋找一個主要是命令式編程語言。
這樣的*「非常常見的編程模式」*,我不認爲我在我四十年的日誌生涯中見過嗎?:-) – paxdiablo
@paxdiablo也許你不會寫很多需要的程序這個控制結構,這很好。然而,在我十多年的編程經驗中,我幾次遇到過這種模式。這不是一個很常見的模式。不過,我認爲這足以保證新的控制結構。 –
@paxdiablo下面是一個[Python增強建議](https://www.python.org/dev/peps/pep-0315/),其中的控制結構與我所描述的類似。這表明我所描述的編程模式確實並不少見。 –