1. Giriş
Təsəvvür edin: siz bir kofe dükanı üçün proqram yazırsınız. İstifadəçi içki seçə bilər və siz bu seçimin reaksiyasını təmin etməlisiniz. Əlbəttə, çoxlu if-else if-else istifadə etmək olar, amma bu, o qədər də yaxşı görünmür:
if (choice == 1)
{
System.out.println("Siz espresso seçdiniz.");
}
else if (choice == 2)
{
System.out.println("Siz kapuçino seçdiniz.");
}
else if (choice == 3)
{
System.out.println("Siz latte seçdiniz.");
}
else
{
System.out.println("Belə bir içki yoxdur.");
}
Razılaşın, bu, olduqca həcmli görünür. Bəs variantların sayı 10 və ya 20 olsa? Elə burada switch operatoru köməyə gəlir; o, dəyişənin dəyərinə görə çoxsaylı variantlar arasından seçimi zərif və yığcam şəkildə həyata keçirməyə imkan verir.
Klassik switch-in sintaksisi
Java-da switch-in sintaksisi belədir:
switch (vyrazhenie)
{
case znachenie1:
// ifadə == znachenie1 olduqda görülən əməliyyatlar
break;
case znachenie2:
// ifadə == znachenie2 olduqda görülən əməliyyatlar
break;
...
default:
// heç bir case uyğun gəlmədikdə görülən əməliyyatlar
break;
}
switch operatorunun sintaksisi
Açar elementlər:
- switch (vyrazhenie) — nəticəsi hər bir case ilə müqayisə olunan ifadə.
- case znachenie: — ifadənin müqayisə edildiyi variant.
- break; — switch blokunun icrasını dayandırır (əks halda — növbəti case-ə “fall-through”).
- default: — heç bir case uyğun gəlmədikdə icra olunur.
2. switch-dən istifadə nümunələri
Nümunə 1: Janrın klassikası — içki seçimi
Gəlin, kofe dükanı üçün menyu quraq:
import java.util.Scanner;
public class CoffeeShop
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.println("İçki seçin:");
System.out.println("1 - Espresso");
System.out.println("2 - Kapuçino");
System.out.println("3 - Latte");
int choice = console.nextInt();
switch (choice)
{
case 1:
System.out.println("Siz espresso seçdiniz.");
break;
case 2:
System.out.println("Siz kapuçino seçdiniz.");
break;
case 3:
System.out.println("Siz latte seçdiniz.");
break;
default:
System.out.println("Belə bir içki yoxdur.");
break;
}
}
}
Nə baş verir:
- İstifadəçi içkinin nömrəsini daxil edir.
- choice dəyişəninin dəyəri hər bir case ilə müqayisə olunur.
- Uyğunluq varsa — müvafiq blok icra edilir, sonra break switch-in icrasını dayandırır.
- Heç biri uyğun gəlmirsə — default icra olunur.
Nümunə 2: Sətirlər üzrə keçid
switch daxilində istifadə oluna bilən çox tip yoxdur, amma sətirlər var! Bu, komand menyuları üçün əlverişlidir:
import java.util.Scanner;
public class CommandMenu
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.println("Əmri daxil edin (start, stop, pause):");
String command = console.nextLine();
switch (command)
{
case "start":
System.out.println("Proqramın işə salınması!");
break;
case "stop":
System.out.println("Proqramın dayandırılması.");
break;
case "pause":
System.out.println("Fasilə.");
break;
default:
System.out.println("Naməlum əmr.");
break;
}
}
}
Nəzərə alın: switch-də sətirlərin müqayisəsi registrə həssasdır! "Start" və "start" — fərqli sətirlərdir.
3. Klassik switch hansı tipləri dəstəkləyir?
Klassik switch-də yalnız müəyyən tiplərdən istifadə etmək olar:
- Sadə tam ədədi tiplər: byte, short, char, int
- Enum-lar: enum (onlar haqqında növbəti mühazirədə danışacağıq)
- Sətirlər: String — registr nəzərə alınmaqla müqayisə olunur
İstifadə etmək olmaz: boolean, float, double, massivlər, siniflərin ixtiyari obyektləri (enum və String istisna olmaqla).
char ilə nümunə
char grade = 'B';
switch (grade)
{
case 'A':
System.out.println("Əla!");
break;
case 'B':
System.out.println("Yaxşı.");
break;
case 'C':
System.out.println("Qənaətbəxş.");
break;
default:
System.out.println("Yenidən cəhd edin.");
break;
}
4. break-in məcburiliyi: unutsaq nə baş verər?
Yeni başlayanların ən çox etdiyi səhv — break;-i unutmaqdır. Gəlin baxaq, nə baş verəcək:
int day = 2;
switch (day)
{
case 1:
System.out.println("Bazar ertəsi");
break;
case 2:
System.out.println("Çərşənbə axşamı");
case 3:
System.out.println("Çərşənbə");
break;
default:
System.out.println("Naməlum gün");
break;
}
Nəticə:
Çərşənbə axşamı
Çərşənbə
Niyə? Çünki case 2-dən sonra break yoxdur və icra növbəti case-ə “axır” (buna fall-through deyilir). Bəzən bu, faydalıdır, lakin çox vaxt — səhvdir.
5. case-lərin qruplaşdırılması: bir neçə variant eyni cür davrandıqda
Bir neçə dəyər üçün eyni davranış lazımdırsa, onları ardıcıl yaza bilərsiniz:
int month = 1;
switch (month)
{
case 12:
case 1:
case 2:
System.out.println("Qış");
break;
case 3:
case 4:
case 5:
System.out.println("Yaz");
break;
case 6:
case 7:
case 8:
System.out.println("Yay");
break;
case 9:
case 10:
case 11:
System.out.println("Payız");
break;
default:
System.out.println("Naməlum ay");
break;
}
Burada: əgər month — 12, 1 və ya 2-dirsə, proqram "Qış" çıxaracaq.
6. Müqayisə: switch və if-else
| Ssenari | if-else | switch |
|---|---|---|
| Çox variant | Uzun zəncir, oxunaqlılığı zəifdir | Qısa, bütün variantlar dərhal görünür |
| Aralıqların müqayisəsi | İstifadə etmək olar (if (x > 5 && x < 10)) | Mümkün deyil, yalnız dəqiq dəyərlər |
| Dəstəklənən tiplər | İstənilən | Yalnız müəyyən olanlar (yuxarıya baxın) |
| break ilə tələ | Yox | Bəli, break-ə mütləq nəzarət etmək lazımdır |
7. switch ilə işləyərkən tipik səhvlər
Səhv №1: break-i unutmaq
Səhvlərin ən yayılmış səbəbi: break unudulur — və kod gözlədiyiniz case əvəzinə başqasını icra edir.
Səhv №2: dəstəklənməyən tip
double, float və ya boolean istifadə etməyə cəhd edirsiniz — kompilyator “olmaz” deyəcək.
Səhv №3: müxtəlif registrli sətirlər
İstifadəçi "Start" daxil edib, siz isə "start" gözləyirsiniz — switch işləməyəcək. Sətirləri əvvəlcədən eyni registrə gətirmək daha yaxşıdır:
switch (command.toLowerCase())
{
case "start":
// ...
}
Səhv №4: case-də dəyişən, yoxsa sabit
case-də yalnız sabitlərə icazə verilir. Dəyişən istifadə etsəniz — kompilyasiya xətası olacaq.
Səhv №5: təkrarlanan case-lər
Eyni dəyərə malik iki case — kompilyator bunu bağışlamayacaq.
GO TO FULL VERSION