CodeGym /Kurslar /C# SELF /while dövrü: tanışlıq və işləmə nüansları

while dövrü: tanışlıq və işləmə nüansları

C# SELF
Səviyyə , Dərs
Mövcuddur

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.
Dövr olmadan əl ilə təkrarlama — narahatdır!

İ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--;
}
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION