bugün

1. ing. devam ettiği sürece

2. her programlama dilinde* bulunan döngü keyword'u. istenilen şart gerçekleştiği sürece döngü devam eder.

genel kullanımı:

while(şart) { çalıştırılacak kod bloğu }

mesela while(true) { System.out.println("seni seviyorum askim"); } kodunu bir derleyici** ile derlerseniz sevgilinize sonsuza kadar sürecek bir hediye vermiş olursunuz*

bir de do while vardır ki onun farkı da döngüye girip kodu bir kere çalıştırdıktan sonra şarta bakmasıdır.
for if döngüsünü tercih ederim hemde ordaki if manidar olacaktr.
while(1) ve while(10) arasında bariz farklar bulunmaktadır.

örnek: while 1 sonsuz bir döngüyü temsil eder. zaten başlangıç değeri 1 olur. true'nun 1, 5, 10, 100, 10.5, -1, -2, -3, -4, -5, -10.5 gibi değerler aldığını söylemek gerekiyor.

o yüzden true, 0 olmayan her durum demek. bu da while'ı o durumda sonsuz döngü yapıyor.

nasıl yani 0 olmayan her durum der iseniz:

0 tanımsız olduğundan negatif olarak geliyor. yok edici, yutan, nan gibi. hatta sıfırın kesirli hali dahi false çıktısı verir.

0.0 ile 0 arasında da fark yoktur. while her 0 durumunu false olarak kabul eder ve işlem yapmaz.

x > 0 durumlarında ise olay değişiyor:

while(1) durumu için:

1 = 00000001

while(10) durumu için:

10 = 00001010

o zaman burada bariz fark ortaya çıkmakta. gördüğümüz gibi bitsel karşılıkları farklı. bunların assembly ortamında akış kontrolünü sağlayan jmp instruction'ı performansı eğer ki optimizasyon etmezseniz milisaniyelik gecikmelere sebebiyet verir.

1 = 00000001 -> kontrol et başa dön.

10 = 0000101[0] -> kontrol et başa dön.

10 = 000010[1]0 -> kontrol et başa dön.

10 = 00001[0]10 -> kontrol et başa dön.

10 = 0000[1]010 -> kontrol et başa dön.

bit bit kontrol var. yazmaç 32 bitlik ise bu kontrol tek seferde yapıldığından(lojik devrelerde tek saat çevriminde üretebilir) while 1 durumunda yapılan call ile while 10 durumunda yapılan call farklı olacaktır. sistem kaynağı tüketme konusunda biraz daha fazla kaynak tüketilecektir.

peki ne olursa olsun nasıl oluyor da true oluyor?

eğer ki bir break koymazsanız 10 daima true oluyor. bu durumda while 10'un adresi jmp instruction'ı oluyor. jmp instruction'ına kendi adresini tanımlarsanız sonsuz döngü oluşur.

diyelim ki while(10)
her defasında 1 artırılan değişken var.

if değişken 10 ise

break;

değişkeni ++

o durumda jmp end olduğundan bitiyor. o ana kadar sürekli jmp L20 git oralara işte. (l20 burada rastgele bir örnek)

böyle bir while anım oldu işte.

düzenlemek gerekiyor dediler ak kafası gibi davrananlar varmış. laf sokuyormuş. bu bilgiyi ihtiyacı olan görüp alır belki.
(bkz: what).
Anladık amk bi programlama biliyorsun.
bilgi paylaşmak yerine memeli, götlü başlıklara ağzımın suyunu akıta akıta entryler girmeliydim.
ing, -iken.