Döngü, son döngüsü (Loop End) ulaşırsa sadece Kod Segment yürütmek

3 Cevap php

Nerede bir döngü sona ermiş ise sadece daha önce (mola veya iade yoluyla) iptal edildi kalmadan, yürütür bir kod bloğu için en verimli pozisyon?

Soru banal görünüyor, açık cevap, yine de ben güvensiz miyim!

Verimlilik / teori profesyonellerden çok hoş Cevap!


  1. Provided: "Bazı Kod X" sadece farklı Code Segment Pozisyonlar 1 ve 2 at, her zaman aynıdır.

  2. I assume: 2 1 olarak aynı güvenilirliği ile idam edilecektir muyum yanlış.?

  3. I know: 2 sadece döngü $ limit kez koştu kez sonrasında denir olan parça eğer koşul $ limiti kez denir 1 ile karşılaştırıldığında, belli ki daha verimli, ve bir kez doğruysa, kod kendisi olarak adlveırılır. Bu durumda, efficiency difference olan if-condition queried $limit times.

Dolayısıyla ben sonuçlveırmak: benim varsayım yanlış olmadıkça, Code Segment 2 ziyade Kod Segment 1 kullanmayı tercih için!


for ($i = 0; $i <= $limit; $i++) {
    // Some Code A [...]
    // Executed every iteration.

    // If condition is met, abort the loop ve return $result
    if (condition) {
    	return $result;
    }

    // Code Segment 1, only executed in last iteration if no abortion happened previously. If-condition checked $limit times!
    if ($i == $limit) {
    	// Some Code X [...]
    	return $result
    }
}
// Code Segment 2, only executed if no abortion happened. At most executed only once!
// Some Code X [...]
return $result

3 Cevap

Böyle bir şey?:

$aborted = false;
for ($i = 0; $i <= $limit; $i++) {
    // Code
    if ($condition) {
        // Code
        $aborted = true;
        break;
    } else {
        // Code
    }
}

if ($aborted) {
    // Code
} else {
    // Code
}

return $result;

Eğer bir dizi (veya başka iterable yapısı) üzerinden gidiyoruz, bir foreach döngüsü kullanmak ve onu izleyen "tamamlandı döngü" kod koymak.

Doğru .. kesimi 2 zaten belirttiğimiz nedenlerden dolayı çok daha verimli segmentinde 1. .. daha varmışlardır.

Ben karmaşıklık terimler durumunda döngü için u O (n) var (n = $ limit) ve segmentinde 2 örtmek o (1) .. yani evet kesimi 2 gitmek için yoludur sürekli O'dur.

Eğer bir döngü durdurmak zaman geri dönüşü kullanıyorsanız dönüş tüm işlevini durdurur, sonra döngü sonra ikinci blok her zaman, idam edilecektir.

Eğer mola kullanıyorsanız. Eğer varsa if ($ i == $ limit) deyimi gibi bir şey gayet iyi.