Kihagyás

Vezérlési szerkezetek

Az alábbiakban áttekintjük a JavaScript fontosabb vezérlési szerkezeteit.

Szelekciós vezérlés

JavaScriptben a szelekciós vezérlés megvalósítására az if, else, else if és switch utasításokat használjuk. Ezek működése megegyezik a korábban tanultakkal.

A vizsgálandó feltételek megadására az előzőekben tanult feltételes és logikai operátorokat használhatjuk.

Példa: Egy program, amely eldönti a felhasználóról, hogy nagykorú-e vagy sem

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const age = 17;    // user's age

if (age < 18) {
    console.log("You are a minor.");
    console.log("You will be of legal age in " + (18 - age) + " years.");
} else if (age >= 20 && age <= 29) {
    console.log("You are in your twenties.");
} else {
    console.log("You are of legal age.");
}

Kimenet

You are a minor.

You will be of legal age in 1 years.

Példa: Egy program, amely kiírja egy érdemjegynek megfelelő szöveges értékelést.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const grade = 5;    // the grade in question

switch (grade) {
    case 1:
        console.log("Fail");
        break;
    case 2:
        console.log("Pass");
        break;
    case 3:
        console.log("Satisfactory");
        break;
    case 4:
        console.log("Good");
        break;
    case 5:
        console.log("Excellent");
        break;
    // if none of the above cases match, the default branch runs
    default:
        console.log("Invalid grade!");
        break;
}

Kimenet

Excellent

Fontos megjegyzés a switch-ről

A break utasítások használata elengedhetetlen a switch szerkezetben. Ha kihagyjuk őket, a program "átesik" a következő case ágra is (fall-through viselkedés). Ez néha hasznos lehet, de általában hibaforrás.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const grade = 1;    // the grade in question

switch (grade) {
    case 1:
        console.log("Fail");
    case 2:
        console.log("Pass");
    case 3:
        console.log("Satisfactory");
    case 4:
        console.log("Good");
    case 5:
        console.log("Excellent");
    // if none of the above cases match, the default branch runs
    default:
        console.log("Invalid grade!");
        break;
}

Kimenet

Fail

Pass

Satisfactory

Good

Excellent

Invalid grade!

Egy kis érdekesség, hogy azokat a feltételeket, amelyek csupán egy if és egy else ágból állnak, ternary operátor segítségével JavaScriptben is lerövidíthetjük (hasonlót láthattunk Pythonból, C-ből, vagy Javaból).

Szintaxisa: feltetel ? muvelet ha igaz : muvelet ha hamis.

1
2
3
4
5
6
7
8
// condition checking without using ternary operator
const number = 42;

if (number % 2 === 0) {
    console.log("Even.");
} else {
    console.log("Odd.");
}

Ugyanez, rövidebben:

1
2
const number = 42;
console.log(number % 2 === 0 ? "Even." : "Odd.");

Ismétléses vezérlés (Ciklusok)

JavaScriptben a while, do... while, illetve for utasításokat használjuk ismétléses vezérlés megvalósítására.

Példa: Írassuk ki az egész számokat 1-től 10-ig mindhárom ciklussal!

1
2
3
4
5
6
7
// while loop
let i = 1;

while (i <= 10) {
    console.log(i);
    i++;
}
1
2
3
4
5
6
7
// do-while loop
let i = 1;

do {
    console.log(i);
    i++;
} while (i <= 10);
1
2
3
4
// for loop
for (let i = 1; i <= 10; i++) {
    console.log(i);
}

Megjegyzés

A for-ciklust használhatjuk a Pythonban tanultakhoz hasonló módon is, elemsorozatok bejárására. Ezzel a következő gyakorlaton ismerkedünk meg.

Ciklusok irányítása

A ciklusok futását két fontos kulcsszóval irányíthatjuk:

  • break: Azonnal kilép a ciklusból
  • continue: Átugorja az aktuális iteráció hátralevő részét és folytatja a következő iterációval

Példa: Páros számok kiírása 1-10 között, de megállunk az 8-nál

1
2
3
4
5
6
7
8
9
for (let i = 1; i <= 10; i++) {
    if (i % 2 !== 0) {
        continue; // skip odd numbers
    }
    if (i > 8) {
        break; // stop when we reach numbers greater than 8
    }
    console.log(i);
}

Kimenet

2

4

6

8

Beágyazott vezérlési szerkezetek

A vezérlési szerkezetek egymásba ágyazhatók, ami összetettebb logika megvalósítását teszi lehetővé.

Példa: Szorzótábla kiírása beágyazott ciklusokkal

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
console.log("Multiplication table:");

for (let i = 1; i <= 5; i++) {
    let row = "";
    for (let j = 1; j <= 5; j++) {
        // row += (i * j).toString().padStart(3) + " "; // add some visual enhancement by padding numbers
        row += (i * j) + " ";
    }
    console.log(row);
}

Végtelen ciklusok elkerülése

Sokféleképpen előfordulhat, hogy írunk egy olyan kódot, ami valahol végtelen ciklusba ragad, azaz olyan ciklusba kerül, aminek a kilépési feltétele sose fog teljesülni.

Tekintsük az alábbi példát:

1
2
3
4
5
6
7
8
let attempts = 0;
const maxAttempts = 100;

while (attempts < maxAttempts) {
    // some operation
    console.log("Doing attempt #" + attempts);
    attempts++;
}

Akár már egy ilyen kis programnál is előfordulhat, hogy figyelmetlenségből végtelen ciklust készítünk, például egy rosszul álló operátor miatt, vagy éppen egy elmaradó növelés/csökkentés miatt. Vagy éppen egy rossz szemantikájú utasítás miatt.

1
2
3
4
5
6
7
8
let attempts = 0;
const maxAttempts = 100;

while (attempts < maxAttempts) {
    // some operation
    console.log("Doing attempt #" + attempts);
    attempts--;
}

Egy másik példa:

1
2
3
4
5
6
7
8
let attempts = 0;
const maxAttempts = 100;

while (attempts !== maxAttempts) {
    // some operation
    console.log("Doing attempt #" + attempts);
    attempts+=3;
}

Figyelmeztetés

Mindig figyeljünk arra, hogy ciklusainknak legyen kilépési feltétele (és az elérhető legyen), különben végtelen ciklusba kerülhetünk, ami a program lefagyásához vezethet.