1. Dövr müqayisəsi: for
vs while
while
dövrünü hansısa komandaları və ya komandalar qrupunu bir neçə dəfə yerinə yetirmək lazım olan istənilən halda istifadə etmək olar. Amma bütün hallardan birini xüsusi qeyd etmək lazımdır.
Bu hal odur ki, proqramist (proqramın müəllifi) əvvəlcədən bilir ki, onun dövrü neçə dəfə yerinə yetirilməlidir. Adətən bu, xüsusi sayğac dəyişəni tətbiq etməklə həll olunur və dövrün hər iterasiyasında dəyişən 1
artırlır (və ya azalır).
Elə bil ki, hər şey lazım olduğu kimi işləyir, amma çox da rahat deyil. Dövrün qarşısında sayğac dəyişəninin başlanğıc qiymətini təyin edirik, sonra şərtdə yoxlayırıq ki, o artıq yekun qiymətinə çatıb ya yox. Amma onu adətən dövr bədəninin ən sonunda dəyişirik.
Bəs dövr bədəni böyükdürsə? Yaxud bir neçə iç-içə dövrümüz varsa? Ümumiyyətlə, belə hallarda sayğac dəyişəni barədə bütün məlumatı bir yerdə toplamaq istərdik. Beləliklə, Java-da for
dövrü yarandı. Onun görünüşü də çox mürəkkəb deyil:
for (komanda1; şərt; komanda2)
{
komandalar bloku
}
Əgər while
dövründə dairəvi mötərizələrdə sadəcə şərt varsa, burada əlavə iki komanda da var, nöqtəli vergüllə ayrılırlar.
Hər şey əslində göründüyündən daha asandır: kompilyator for
dövrünü aşağıdakı kimi adi while
dövrünə çevirir:
komanda1;
while (şərt)
{
komandalar bloku
komanda2;
}
Və ya bunu nümunə ilə göstərsək daha yaxşı olar: aşağıdakı iki nümunə eynidir.
Variant 1 | Variant 2 |
---|---|
|
|
Sadəcə kodun hamısını bir yerdə topladıq, sayğac dəyişəni — i
üçün olan kodu.
komanda1 dövründə for
yalnız bir dəfə dövrdən əvvəl icra olunur (bunu ikinci nümunədə görmək olur)
komanda2 isə dövrün bədəni neçə dəfə icra olunursa, o qədər icra olunur, amma hər dəfə bütün dövr bədəni icra olunandan sonra həyata keçir.
2. Döngü for
harada istifadə olunur
Döngü for
, bəlkə də Java-da ən çox istifadə olunan döngü növüdür. O hər yerdə tətbiq edilir, çünki proqramçılar üçün daha sadə və rahat olan while
döngüsünün bir formasıdır. Demək olar ki, hər bir while
döngüsünü for
döngüsünə çevirmək olar.
Nümunələr:
While döngüsü | For döngüsü |
---|---|
|
|
|
|
|
|
|
|
|
|
Sonuncu nümunəyə diqqət yetirin. Orada döngünün sayğacı ilə iş əmrləri yoxdur. Sayğac yoxdursa — əmrlər də yoxdur.
Java, for
döngüsündə "sayğacın başlanğıc təyin etmə əmri"ni və "sayğacın dəyişdirmə əmri"ni yazmamağa imkan verir. Hətta döngünün şərt ifadəsini də yazmaq lazım deyil.
3. for
dövründən istifadə ilə bağlı incəliklər
for
dövrü və break
və continue
operatorları ilə bağlı vacib bir məqam.
break
operatoru for
dövrü içində while
dövründə olduğu kimi işləyir — dövrün dərhal bitməsinə səbəb olur. Amma continue
, dövrün bədənindən keçməməyə səbəb olur, lakin komanda2
(dövr sayğacını dəyişən) icra olunmağa davam edir.
Gəlin bir də baxaq, for
ilə while
necə əlaqəlidir.
for (komanda1; şərt; komanda2)
{
komandalar bloku
}
komanda1;
while (şərt)
{
komandalar bloku
komanda2;
}
Əgər for
dövrünün komandalar blokunda continue
operatorunu çağırsanız, komandalar blokunun qalan hissəsi atlanacaq, amma komanda2 (bu isə dövr sayğacını dəyişdirən for
) mütləq icra olunacaq.
Gəlin 7-yə bölünən ədədləri keçmək misalımıza qayıdaq.
Bu kod sonsuz dövrə düşəcək | Bu kod mükəmməl işləyəcək |
---|---|
|
|
while
dövrü ilə yazılmış kod işləməyəcək — i heç vaxt 7-dən böyük olmayacaq. Amma for
dövrü ilə yazılmış kod mükəmməl işləyəcək.
4. Dövr for müqayisəsi: Java vs Pascal
Pascal-da da For
dövrü var. Bu ümumilikdə, demək olar ki, bütün proqramlaşdırma dillərində mövcuddur. Ancaq Pascal-da bu çox daha anlaşıqlıdır. Nümunələr:
Pascal | Java |
---|---|
|
|
|
|
|
|
GO TO FULL VERSION