For İle While Farkı?
-
Selam arkadaşlar, hobi olarak C# öğrenmeye devam ediyorum. While döngüsünü öğrendim bugün.
for ile çok benzettim, parantezin içinde değişken tanımlaması yapılamayan for sanki. Bir yazılımcı da şöyle bir yazı yazmış.
Kafam karıştı, sizin görüşlerinizi almak istedim. Saygı ve sevgiler.
"Merhaba sevgili programlamaya başlayan arkadaşlar.
C programlama dilini öğrenmeye başladım. Döngüler konusuna gelince while ve for döngüleri arasında kaldım. Sonuçta ikisi de döngü, istediğimiz zaman istediğimizi kullanabiliyoruz. Ama kafama takılan şu; neden iki tane döngü var bunların arasında hiç bir fark yok mu ? Bu sorudan yola çıkarak başladım araştırmaya ve bazı bilgiler öğrendim. Şimdi öncelikle şunu belirtmeliyim ki
for döngüsü while döngüsünden sonra ortaya çıkmış bir döngüdür. Bu durumun beraberinde getirdiği bazı kolaylıklar bulunmaktadır. Örnek verecek olursak;
while döngüsü ile i‘yi öncelikle döngünün dışarısında tanımlamamız gerekiyor daha sonra yine döngünün dışında i’ye bir değer atamamız gerekiyor ve i‘yi döngü her döndüğünde 1 arttırmak için döngünün içerisinde kullanmamız gerekiyor. 1
int i;
2
3
i = 0;
4
5
while
(i <20){
6
7
// işlemler
8
9
i++
10
}
for döngüsünde ise bunları ayrı ayrı yazmaya gerek yok çünkü aşağıdaki gibi direk olarak parantezlerin içerisinde tanımlayabiliyoruz; 1
int i;
2
3
for
( i = 0; i <20; i++){
4
// islemler
5
}
Yani hem zamandan hem de kod yığınından tasarruf yapabiliyoruz. "
-
for da bir başlangıç değeri ve bitiş değeri verirsin o döner geçer.
while da koşul verirsin koşul sağlandığı sürece döner. yani a=20 while(a<=30) dediğinde while sürekli çalışır taki sen içerisinde a yı 30 dan büyük yapana kadar. şöyle basit bir örnek verirsem;
mesela elinde bi data listesi var. Title,SkipNext şimdi bu datalistesinde skipNext değeri true yada false olsun. eğer true olan satır var ise o satırdan sonra ki 2 satırı döndürmek istemiyorum o zaman index değerini while içinde 2 arttırıp arada ki satırları hiç işleme dahil etmem. bunu while ile yapabilirsin. ama for verdiğin koşula göre dönmeye devam eder.
c# bilmediğimden kod yanlış olabilir ama mantık olarak anlarsın herhal;
i=0;
dataList=[.....];
while(i<count(dataList)){
bi işlem
if(dataList[i][skipNext]){
i=i+2;
}else{i++;
}
} -
Derleme sırasında, çeşitli farkları olsa da, bazı dillerde for'daki initialization ile scope yapısından uzaklaştırma gibi durumlar olsa da for while'ın gelişmiş halidir olarak yaklaşılabilir.
Forun tanımı: for (initializer; condition; iterator) initializer başladığı anda çalıştırılacak kod, condition çalışma şartı kodumuz, iterator her tekrar başlamadan önce çalıştırılacak kod
Bazı yazılım dillerinde for yapısı initializer, condition1, condition2, condition3, ..., iterator olarak birden fazla şart ile kullanabiliyorsun.
Örnek ifade:
for(int i = 0; i < 10; i++) { // initializer; condition; iterator
// ..
}Örnek ifadenin eş değeri:
int i = 0; // initializer
while(i < 10) { // condition
i++; // iterator
// ..
}For'da i değerini döngünün içinde değiştirip for'dan çıkabildiğimiz bir örnek yazayım:
for(int i = 0; i < 10; i++) {
Console.WriteLine(i);
if(i > 2) { i = 100; }
Console.WriteLine(i);
}
Programın vereceği çıktı:
0
0
1
1
2
2
3
100 -
bir de foreach döngüsü var :)
ve yine while'in yaninda do-while döngüsü de var :) hocam bunlar hep ihtiyaca göre sekillenen seyler..
Arkadaslara katki olarak
Genelde kullanilan döng for döngüsü, cünkü baslangic ve bitis degerlerin belli oldugu icin daha rahat.. foreach'e girmeyecegim ama kisaca o da enumarable türünü döngüye sokuyor ve elemanlari [i] gibi deger vermeden direk erisebiliyorsun döngü icinde
while ile do-while arasinda ince bir fark var. While döngüsü ilk olarak sarta bakar, sart (parantez icindeki) dogruysa döngü calisir yani sart ilk durumda yanlissa döngüye girmeden cikar. Ancak bazi durumlarda kodun bir kere calismasini ve duruma göre döngüye sokmak istemen halinde do-while kullanilir.
var isim= ""; do{ Console.Write("Lutfen isminizi girin: "): isim = Console.ReadLine(); if(!isim.Trim().Equals("")) //isim bos degilse döngüyü kir break; Console.WriteLine("Isminizi girmediniz!!"); }while (isim.Trim().Equals("")) //isim bos oldukca tekrar sor
üsttekileri ögrenince fikir vermesi acisindan simdiden yaziyorum :)
Kisaca: birden fazla döngüler var ve hepsinin kullanim amaci farkli. Foreach, for döngüsüne göre daha rahattir ama ayni zamanda daha yavas calisir.. Bunlarin da birer maliyeti var :)
kolay gelsin basarilar
Edit: kücük bir teknik detay. Evet foreach enumarable'lerde kullanilir ve evet c#'daki arrayler de IEnumarable dan türemistir.
- Array types are reference types derived from the abstract base type Array. Since this type implements IEnumerable and IEnumerable<T>, you can use foreach iteration on all arrays in C#.
-
o bahsedilen yazılımcı arkadas while ile for dongusu nasil kullanılırı aslında anlarmış. aynı sebebden kullanacaksan git for kullan.
ama while'in unbalanced'in da anlattiği gibi cok daha farkli kulllanım alanları vardır. while , genellik ile kaç defa döneceğini bilmediğin işlerde kullanılır (onun için yaratılmıştır)
adam bir datayi girip girmediğin kontrolu,
okudugun bir stream'in devamlılığı,
Biraz saçma belki ama;
var strText = "bu bir bosluk lu metin yazısı bosluk topla";
while (strText.indexOf(" ") > -1)
{
strText = strText.Replace(" "," ");
}
( edit : en fazla boşluk olan "lu metin" kısmı için değerlendirme yapıyorum)
metnin içinde ki cift boslukları tek boşluğa cektim ama 5 bosluk olan bir yerde;
ilk dönüşünde;
ilk 2 boslugu tek bosluga cevirdi. ikinci 2 boslugu tek bosluga cevirdi. (5 bosluk olan yer, 3 bosluga döndü) while şartı sağlanıyor tekrar dönecek
ikinci dönüşünde
ilk 2 boslugu tek boşluğa cevirdi. (3 bosluk vardı, 2 tane bosluk kaldı) while şartı sağlanıyor tekrar dönecek
üçüncü dönüşünde
tek çift boşluk var, onu tek boşluğa cevirdi ve while şarti hala sağlanmıyor, donguden cikti. -
Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.
Şunu bırakayım :)
-
ComputerWolf bunu yazdı
Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.
Şunu bırakayım :)
süpermiş, şöyle anlatanımız olmamıştı bizim :)
-
MaviGozluDev bunu yazdıComputerWolf bunu yazdı
Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.
Şunu bırakayım :)
süpermiş, şöyle anlatanımız olmamıştı bizim :)
sinirlerim bozuldu. ^^D`
İhtiyaca göre,
boşluk,
,.
(NoktalıVirgül: ., (yatay))
(Ula mâdem alıntı içerisindeki fotoları sildiniz, boşlukları da sileydiniz ya) {kefir, kefir tanesi, keçi sütü, PreBiotik/ProBiotik}
RitmFarbRacourci tarafından 23/Nis/20 15:23 tarihinde düzenlenmiştir -
ComputerWolf bunu yazdı
Döngüleri karşılaştığın sorunların çözümüne göre seçersin, evirip çevirirsin.
Şunu bırakayım :)
aslında özelden de sorabilirdim ama, buradan da sorayım ( gülerek başlamak güne güzel oluyor, bir de ^^D` {durup durup gülüyorum}). Bu tarz karikatürlerin olduğu bir TeleGram hesabı,grubu vs. var mı?
bir tane vardı, ama tekrâra bağlayınca, unuttum gitti. ( www.t.me/ProgrammerJokes gibi birşeydi. Gerçi, int. sitesi de olur.)
şimdi düşündüm de @PcK0'nun şu ifâdesi de güzelmiş " For'un tanımı: for (initializer; condition; iterator) :initializer, başladığı anda çalıştırılacak kod; condition, çalışma şartı kod'umuz; iterator, her tekrar başlamadan önce, çalıştırılacak kod . "
~@~
@whopper , niye ya, her yıl yeni (konuya dair fikri olmayan)çocuk doğuyor, fikirlere aç. İnsan, yeni alanlara yelken açıyor. Güzel anlatan bulunmuyor. yada anlattığı şeyi güzel anlatamıyor sayfasında. Belki de arama handikap'lıdır. ... diye uzâaar gider.
-
yıl oldu 2020 hala şu sorulara konu açılıyor vay arkadaş :D
-
whopper bunu yazdı
yıl oldu 2020 hala şu sorulara konu açılıyor vay arkadaş :D
Ne alaka yılla, herkes programlamayı ana karnında mı öğrendi?