1. Giriş
Proqramlaşdırmada tez-tez eyni hərəkətləri dəfələrlə yerinə yetirmək lazım olur. Məsələn:
- Siyahıdakı bütün elementləri keçmək.
- İstifadəçi lazım olanı daxil edənə qədər klaviaturadan dəyərləri oxumaq.
- 1-dən 100-ə qədər bütün ədədlərin cəmini hesablamaq.
- İstifadəçidən düzgün parol daxil edənə qədər parol istəmək.
Bunların hamısını dövr olmadan yazmağa çalışsan, kod uzun, darıxdırıcı və heç də rahat olmaz. Təsəvvür elə, kalkulyator proqramı yazırsan və 1-dən 10-a qədər ədədləri əl ilə toplamaq qərarına gəlmisən:
int sum = 0;
sum += 1;
sum += 2;
sum += 3;
// ... və belə 10 dəfə. Eh.
İnan, bezəcəksən bitirməmiş! Həll — dövrlərdir. Onlar təkrarlanan əməliyyatları qısa və aydın şəkildə yazmağa imkan verir. Bu gün ən əsas, amma bərk faydalı dövrlə — while ilə tanış olacağıq.
2. while dövrü ilə tanışlıq
Sintaksis və əsas sxem
while dövrü proqramlaşdırmada "papağan" kimidir: bir kod parçasını şərt doğru olduqca təkrar edir. Şərt artıq doğru olmayanda, papağan susur (dövr bitir).
while (şərt)
{
// Dövrün gövdəsi
}
while dövrünün komanda bloku ilə yazılışı
Diaqram
Budur, while dövrünün necə işlədiyini başa düşmək üçün sadə blok-sxem:
3. Nümunələr: while dövrü işdə
Klassik sayğac
Gəlin 1-dən 5-ə qədər sayan və ədədləri çıxaran sadə proqram yazaq:
int i = 1;
while (i <= 5)
{
Console.WriteLine($"Addım № {i}");
i++; // Sayğacı artırmağı unutma!
}
// Çıxacaq:
// Addım № 1
// Addım № 2
// Addım № 3
// Addım № 4
// Addım № 5
Diqqət elə: əgər i dəyişənini artırmağı unutsaq, dövr heç vaxt bitməyəcək (papağan ölməz və əbədi təkrarlayan olacaq). Buna sonsuz dövr deyirlər — qorxulu bir şeydir.
Lazım olan dəyərə qədər klaviaturadan daxil etmə
Tez-tez dövr istifadəçini düzgün cavaba "sıxmaq" üçün istifadə olunur:
string password = "";
while (password != "qwerty")
{
Console.Write("Parolu daxil et: ");
password = Console.ReadLine();
}
Console.WriteLine("Xoş gəldin!");
Burada proqram parolu daxil etməyi istəyir, sən sehrli "qwerty" yazana qədər. Unutma: əgər password = Console.ReadLine(); sətrini silsən, dövr yenə sonsuz olacaq (parol soruşacaq, amma daxil etməni oxumayacaq — həmişəlik donacaq, sındırılmış robot kimi).
4. while dövrünün növləri və istifadə ssenariləri
Adi while dövrü
Bu dövr, yuxarıda göstərildiyi kimi, şərtə ilk iterasiyadan əvvəl baxır. Əgər şərt dərhal yalnışdırsa — dövrün gövdəsi heç vaxt işə düşməyəcək.
Nümunə: şərt dərhal yerinə yetirilmir
int i = 10;
while (i < 5)
{
Console.WriteLine(i); // Heç vaxt işləməyəcək!
}
Əslində, məntiqlidir. Elə burada yazıldığı kimi.
Daxili while dövrləri
Bəzən dövrün içində dövr yazmaq lazım olur. Məsələn, bütün sətrləri keçmək və hər birində bütün simvolları yoxlamaq. Bu mərhələdə bir az avantüradır, amma sadə nümunə belədir:
int i = 1;
while (i <= 3)
{
int j = 1;
while (j <= 2)
{
Console.WriteLine($"i = {i}, j = {j}");
j++;
}
i++;
}
// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2
Daxili dövrləri bir neçə mühazirədən sonra daha ətraflı öyrənəcəyik, sadəcə sizi bir az qorxutmaq istədim :)
Sonsuz dövr
Bəzən dövrlər bitir, bəzən isə — əbədi yaşayır.
while (true)
{
Console.WriteLine("Mən əbədiyəm!");
}
Çox nadir hallarda istifadə olunur, adətən hansısa fon prosesləri üçün (məsələn, server işi), amma praktikada olur.
5. Necə axmaq səhvlər etməmək olar: while ilə tez-tez rast gəlinən səhvlər
Proqramlaşdırmada dövr — elektrik kimidir: əladır, amma təhlükəsizlik qaydalarını bilmək lazımdır.
Problem 1: diqqətsizlikdən sonsuz dövr
Çox vaxt yeni başlayanlar şərtdən asılı olan dəyişəni yeniləməyi unudurlar. Nəticədə dövr "sonsuz" işləyir və proqramı məcburi dayandırmaq lazım olur (məsələn, Ctrl + C kombinasiyası ilə).
int i = 1;
while (i <= 5)
{
Console.WriteLine(i);
// i++; // OOPS! i-ni artırmağı unutduq
}
Problem 2: səhv şərt
Bəzən developer özü-özünə quyu qazır: şərt heç vaxt doğru olmur. Nəticədə dövr ümumiyyətlə işləmir.
int i = 10;
while (i < 5)
{
Console.WriteLine(i); // Bu kod heç vaxt işləməyəcək.
i++;
}
Problem 3: data type ilə səhv
Dövrün şərtində həmişə boolean ifadə olmalıdır — yəni hesablamanın nəticəsi true və ya false olmalıdır.
int number = 5;
while (number) // Səhv! bool gözlənilirdi, int yox.
{
number--;
}
GO TO FULL VERSION