Bu en popüler yolu bir değer Bir dizide olup olmadığını kontrol etmeyi (bana öyle geliyor):
for (int x : array)
{
if (x == value)
return true;
}
return false;
Ancak, yıllar önce, muhtemelen Wirth veya Dijkstra tarafından okuduğum bir kitapta, bu stilin daha iyi olduğu söylendi (içinde bir çıkış olan bir süre döngüsüyle karşılaştırıldığında):
int i = 0;
while (i < array.length && array[i] != value)
i++;
return i < array.length;
Bu şekilde, ek çıkış koşulu, döngü değişmezinin açık bir parçası haline gelir, döngü içinde gizli koşullar olmaz ve çıkışlardan çıkar, her şey yapılandırılmış bir şekilde daha açık ve daha açıktır. Genel olarak bu ikinci kalıbı mümkün olduğunda tercih ettim ve for
-loop'u yalnızca -'den yinelemek için a
kullandım b
.
Yine de ilk versiyonun daha az net olduğunu söyleyemem. Belki de en azından yeni başlayanlar için anlaşılması daha açık ve kolaydır. Yani hala kendime hangisinin daha iyi olduğu sorusunu soruyorum ?
Belki birisi yöntemlerden biri lehine iyi bir gerekçe verebilir mi?
Güncelleme: Bu, çoklu işlev dönüş noktaları, lambdalar veya bir dizide kendiliğinden bir öğe bulma sorunu değildir. Tek bir eşitsizlikten daha karmaşık değişmezlerle döngüler nasıl yazılır.
Güncelleme: Tamam, cevap veren ve yorum yapan kişilerin anlamını görüyorum: Burada bir for döngüsünden çok daha net ve okunabilir olan foreach döngüsünü karıştırdım. Bunu yapmamalıydım. Ancak bu da ilginç bir soru, bu yüzden onu olduğu gibi bırakalım: foreach-loop ve içeride ekstra bir durum veya açık bir döngü değişmezi ve sonrası bir post-condition ile bir while döngüsü. Görünüşe göre koşulu olan bir foreach döngüsü ve bir çıkış / ara kazanıyor. Ben foreach döngü olmadan ek bir soru oluşturacak (bağlantılı bir liste için).
collection.contains(foo)