01 Iterasiya nədir?
Iterasiya kod blokunun bir neçə dəfə təkrarlanması prosesidir. JavaScript-də dövrlər iterasiyanı əldə etməyin əsas yoludur. Onlar müəyyən şərt ödənilənə qədər kodu təkrarlamağa imkan verir.
JavaScript-də dövr növləri
JavaScript üç əsas dövr növü təqdim edir:
- for dövrü - Təkrarların sayını əvvəlcədən bildiyiniz zaman ən yaxşısıdır
- while dövrü - Təkrarların sayı naməlum olduqda ən yaxşısıdır
- do-while dövrü - Kodu ən azı bir dəfə işlədiyinə zəmanət verir
02 For dövrü
For dövrü ən çox istifadə olunan dövr növüdür. Kodu tam olaraq neçə dəfə təkrarlamaq istədiyinizi bildiyiniz zaman mükəmməldir. Dövrün üç hissəsi var: başlanğıc, şərt və artırma.
Sintaksis
for (başlanğıc; şərt; artırma) { icra ediləcək kod }
// Əsas for dövrü
for (let i = 0; i < 5; i++) {
console.log('Təkrarlama: ' + i);
}
// Nəticə:
// Təkrarlama: 0
// Təkrarlama: 1
// Təkrarlama: 2
// Təkrarlama: 3
// Təkrarlama: 4
// Hesablama üçün istifadə et
let sum = 0;
for (let i = 1; i <= 10; i++) {
sum += i;
}
console.log('Cəm: ' + sum); // Nəticə: Cəm: 55
// Massiv üzərində iterasiya et
let fruits = ['alma', 'banan', 'albalı'];
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
// Nəticə:
// alma
// banan
// albalı1. Başlanğıc: Dövr başlamazdan əvvəl bir dəfə işləyir (let i = 0)
2. Şərt: Hər təkrarda yoxlanılır; şərt doğru olduqda dövr davam edir (i < 5)
3. Artırma: Hər təkrardan sonra işləyir (i++)
Müxtəlif dövr nümunələri
Müxtəlif davranışlar əldə etmək üçün for dövrləri ilə müxtəlif nümunələrdən istifadə edə bilərsiniz.
// Geri sayım
for (let i = 5; i > 0; i--) {
console.log(i);
}
// Nəticə: 5, 4, 3, 2, 1
// 2-yə artırma
for (let i = 0; i <= 10; i += 2) {
console.log(i);
}
// Nəticə: 0, 2, 4, 6, 8, 10
// Çoxlu dəyişənlər
for (let i = 0, j = 10; i < 5; i++, j--) {
console.log('i: ' + i + ', j: ' + j);
}
// Nəticə:
// i: 0, j: 10
// i: 1, j: 9
// i: 2, j: 8
// i: 3, j: 7
// i: 4, j: 6İç-içə dövrlər
Cədvəl, matris və ya iç-içə massivlər kimi çoxölçülü strukturlarla işləmək üçün dövrləri bir-birinin içərisinə yerləşdirə bilərsiniz.
// Vurma cədvəli
for (let i = 1; i <= 3; i++) {
for (let j = 1; j <= 3; j++) {
console.log(i + ' × ' + j + ' = ' + (i * j));
}
console.log('---');
}
// Nəticə:
// 1 × 1 = 1
// 1 × 2 = 2
// 1 × 3 = 3
// ---
// 2 × 1 = 2
// 2 × 2 = 4
// 2 × 3 = 6
// ---
// 3 × 1 = 3
// 3 × 2 = 6
// 3 × 3 = 9
// ---💡 Performans məsləhəti: İç-içə dövrlər tez yavaşlaya bilər! n × m dövrü n*m təkrarlar icra edəcək. Böyük məlumat dəstləri ilə performansa diqqət yetirin.
For dövrlərindən nə vaxt istifadə etməli
- Təkrarların dəqiq sayını bildiyiniz zaman
- Massivlər və ya kolleksiyalar üzərində iterasiya edərkən
- Sayğac dəyişəninə ehtiyacınız olduqda
- İndeksli məlumat strukturları ilə işləyərkən
03 While dövrü
While dövrü şərt doğru olduqda kodu təkrarlayır. For dövründən fərqli olaraq, daxili sayğacı yoxdur. Əvvəlcədən neçə təkrara ehtiyacınız olacağını bilmədiyiniz zaman idealdır.
Sintaksis
while (şərt) { icra ediləcək kod }
// Əsas while dövrü
let count = 0;
while (count < 5) {
console.log('Sayğac: ' + count);
count++;
}
// Nəticə:
// Sayğac: 0
// Sayğac: 1
// Sayğac: 2
// Sayğac: 3
// Sayğac: 4While və ya For: Hər birindən nə vaxt istifadə etməli
For dövründən istifadə edin:
- Təkrarların sayını bildiyiniz zaman
- İndekslərlə massiv üzərində iterasiya edərkən
- Sayğac dəyişəninə ehtiyacınız olduqda
- Əksər ümumi iterasiya ssenariləri üçün
While dövründən istifadə edin:
- Təkrarların sayını bilmədiyiniz zaman
- İstifadəçi girişi alınana qədər dövr edərkən
- Şərt daha mürəkkəb və ya dinamik olduqda
- Xarici hadisə və ya şərt gözləyərkən
04 Do-While dövrü
Do-while dövrü while-a bənzəyir, lakin vacib fərq var: şərt əvvəlcə yalan olsa belə, kod blokunu ən azı bir dəfə icra edir, çünki şərt yoxlaması dövrün sonunda baş verir.
Sintaksis
do { icra ediləcək kod } while (şərt);
// Əsas do-while
let count = 0;
do {
console.log('Sayğac: ' + count);
count++;
} while (count < 5);
// Nəticə:
// Sayğac: 0
// Sayğac: 1
// Sayğac: 2
// Sayğac: 3
// Sayğac: 4
// Vacib fərq: Ən azı bir dəfə icra olunur
let num = 10;
do {
console.log('Bu göstəriləcək!');
num++;
} while (num < 5);
// Nəticə: Bu göstəriləcək!
// (şərt əvvəlcə yalan olsa belə)
// Müqayisə: Adi while heç vaxt icra olunmur
let num2 = 10;
while (num2 < 5) {
console.log('Bu heç vaxt göstərilməyəcək');
num2++;
}
// Çıxış yoxdur (şərt əvvəlcə yalandır)Praktik nümunə: menyu sistemi
Do-while dövrləri menyunu ən azı bir dəfə göstərmək və istifadəçi çıxışı seçənə qədər davam etdirmək istədiyiniz zaman menyu sistemləri üçün mükəmməldir.
let choice;
do {
console.log('--- Menyu ---');
console.log('1. Başla');
console.log('2. Parametrlər');
console.log('3. Çıxış');
// Təxmini: Real tətbiqdə istifadəçi seçimini alardınız
choice = 2; // Seçimi simulyasiya etmək
if (choice === 1) {
console.log('Oyun başlayır...');
} else if (choice === 2) {
console.log('Parametrlər açılır...');
} else if (choice === 3) {
console.log('Sahib ol!');
} else {
console.log('Etibarsız seçim!');
}
} while (choice !== 3);
// Menyu ən azı bir dəfə göstəriləcəkDo-while vs While
Əsas fərq şərtin nə vaxt yoxlanılmasıdır:
Do-while: Şərti sonunda yoxlayır, buna görə də kod ən azı bir dəfə işləyir
While: Şərti başlanğıcda yoxlayır, buna görə də kod heç vaxt işləməyə bilər
05 Break və continue
Break və continue dövrlərin normal axınını dəyişdirməyə imkan verən idarəetmə ifadələridir. Onlar dövrlərin nə vaxt dayandırılmalı və ya təkrarların atlanmalı olduğunu dəqiq idarə etməyə imkan verir.
Break ifadəsi
Break ifadəsi dövrü tamamilə dayandırır və dərhal ondan çıxır. İcra dövrün sonrasındakı kodla davam edir.
// müəyyən dəyər tapıldıqda break
for (let i = 0; i < 10; i++) {
if (i === 5) {
console.log('5 tapıldı! Dayandırılır.');
break;
}
console.log(i);
}
// Nəticə: 0, 1, 2, 3, 4, "5 tapıldı! Dayandırılır."
// Massivdə axtarış
let numbers = [10, 23, 45, 67, 34, 89];
let target = 67;
let found = false;
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === target) {
console.log('İndeksdə tapıldı: ' + i);
found = true;
break; // Tapılsa dayandır
}
}
if (!found) {
console.log('Tapılmadı');
}
// Nəticə: İndeksdə tapıldı: 3Ümumi istifadə yerləri:
- Şərt ödənildikdə erkən çıxış
- Kolleksiyada element axtarışı
- Səhvlərin və ya etibarsız vəziyyətlərin idarə edilməsi
Continue ifadəsi
Continue ifadəsi cari təkrarın qalan hissəsini atlayır və dövrün növbəti təkrarına keçir. Dövrün özü işləməyə davam edir.
// Tək ədədləri atla
for (let i = 0; i < 10; i++) {
if (i % 2 !== 0) {
continue; // Tək ədədləri atla
}
console.log(i);
}
// Nəticə: 0, 2, 4, 6, 8 (yalnız cüt ədədlər)
// Müəyyən dəyərləri atla
let fruits = ['alma', 'banan', 'albalı', 'xurma', 'üzüm'];
for (let i = 0; i < fruits.length; i++) {
if (fruits[i] === 'albalı') {
continue;
}
console.log(fruits[i]);
}
// Nəticə: alma, banan, xurma, üzüm
// Yalnız müsbət ədədləri emal et
let nums = [5, -3, 8, -1, 12, 0, 7];
let sum = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] <= 0) {
continue;
}
sum += nums[i];
}
console.log('Müsbət ədədlərin cəmi: ' + sum);
// Nəticə: Müsbət ədədlərin cəmi: 32Ümumi istifadə yerləri:
- Etibarsız və ya istənməyən dəyərləri atlamaq
- Kolleksiyada yalnız müəyyən elementləri emal etmək
- Lazımsız işi atlayaraq dövrləri optimallaşdırmaq
Break: Dövrü tamamilə dayandırır və dərhal çıxır
Continue: Yalnız cari təkrarı atlayır, dövr davam edir
İç-içə dövrlərdə break və continue
Break və continue yalnız olduqları ən yaxın dövrə təsir edir. İç-içə dövrlərdən çıxmaq üçün etiketlərdən istifadə etmək lazım ola bilər (orta dərəcəli mövzu).
06 Ümumi səhvlər və onlardan necə qaçmaq
Dövrləri öyrənmək ümumi tələlərlə gəlir. Bu səhvləri başa düşmək daha yaxşı, daha etibarlı kod yazmağa kömək edəcək.
❌ Sonsuz dövrlər
Dövr dəyişənini yeniləməyi unutmaq proqramınızı dondura biləcək sonsuz dövr yaradır.
// ❌ Səhv - Sonsuz dövr!
let i = 0;
while (i < 5) {
console.log(i);
// i++ yoxdur - i heç vaxt artmır!
}
// ✅ Düzgün
let j = 0;
while (j < 5) {
console.log(j);
j++; // Dəyişəni yeniləyin!
}
// ❌ Səhv - Sonsuz dövr!
let k = 0;
for (k = 0; k > 0; k++) {
console.log(k);
}
// Nəticə: 0, 1, 2, 3, 4 ...
// ✅ Düzgün
let l = 0;
for (l = 0; l < 5; l++) {
console.log(l);
l++; // Dəyişəni yeniləyin!
}
// Nəticə: 0, 1, 2, 3, 4
Həmişə dövr gövdəsinin içərisində dövr dəyişəninizin yeniləndiyinə əmin olun.
❌ Off-by-one səhvləri
Dövr sərhədlərində < və <= ilə səhvlər son elementi qaçırmağa və ya etibarsız indeksə daxil olmağa səbəb ola bilər.
let arr = [10, 20, 30];
// ❌ Səhv - Son element qaçırılıb
for (let i = 0; i < arr.length - 1; i++) {
console.log(arr[i]);
}
// Nəticə: 10, 20 (30 atlandı)
// ✅ Düzgün
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
// ✅ Düzgün
for (let i = 0; i <= arr.length - 1; i++) {
console.log(arr[i]);
}
// Nəticə: 10, 20, 30Dövr şərtlərinizi iki dəfə yoxlayın.
❌ Iterasiya zamanı massivi dəyişdirmək
Massiv üzərində iterasiya edərkən ona elementlər əlavə etmək və ya silmək gözlənilməz davranışa səbəb ola bilər.
Massivi dəyişdirmək lazımdırsa, yeni massiv yaratmağı və ya geriyə iterasiya etməyi düşünün.
❌ Səhv dövr növündən istifadə etmək
Səhv dövr növünü seçmək kodu oxumağı və saxlamağı çətinləşdirə bilər.
Təkrarları bildiyiniz zaman for, bilmədiyiniz zaman while, ən azı bir icra lazım olduqda do-while istifadə edin.
Xülasə
Təklifiniz var, səhv və ya xəta tapdınız? Zəhmət olmasa bizimlə əlaqə saxlayın.