1. Sissejuhatus
enum
(loenditüüp) keeles C on oluline tööriist, mis aitab parandada programmi loetavust ja hooldatavust. Selles artiklis selgitame üksikasjalikult enum
-i põhikasutust ja edasijõudnud võimalusi. Alates algajatest kuni kesktasemel programmeerijateni — see juhend aitab sul mõista enum
-i kasutamist ja kirjutada tõhusamat C-koodi.
2. Mis on enum
?
enum
-i määratlus ja roll
enum
, ehk loenditüüp, on andmetüüp, mida kasutatakse seotud konstantide kogumi määratlemiseks. Tavaliselt kasutatakse seda selleks, et anda mitu omavahel seotud konstandile tähendusrikkad nimed. Näiteks värvide käsitlemine programmis ainult numbritega võib olla ebaintuitiivne. Kuid kasutades enum
-i, saame määratleda värvid nagu RED
, GREEN
, BLUE
, mis on arusaadavamad.
Miks kasutada enum
-i?
enum
-i kasutamine pakub mitmeid eeliseid:
- Parem loetavus: Kuna väärtused esitatakse nimedena, mitte numbritena, muutub kood lihtsamaks mõista.
- Lihtsam hooldada: Kui konstantide kogumit tuleb muuta, aitab
enum
hoida muudatuste mõju kogu koodis minimaalsena. - Vigade vältimine: Kui soovid piirata väärtuseid kindla kogumiga, aitab
enum
vältida valede väärtuste kasutamist.

3. enum
-i põhiline kasutamine
Kuidas enum
-i määratleda
enum
-i määratlemise põhisüntaks näeb välja järgmine:
enum { RED, GREEN, BLUE };
Sellisel juhul omistatakse RED
-ile väärtus 0, GREEN
-ile 1 ja BLUE
-le 2 automaatselt. Kui soovid anda enum
-ile nime, tee seda järgmiselt:
enum Color { RED, GREEN, BLUE };
See loob nimega Color
loenditüübi ja seda nime saab kasutada muutujate deklareerimisel.
Praktiline näide koodist
Allpool on lihtne näide, kuidas enum
-i kasutada:
#include <stdio.h>
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color;
color = RED;
printf("%dn", color); // Väljund: 0
return 0;
}
Selles näites prinditakse välja RED
väärtus, mis on 0
.
4. enum
-i detailsem kasutamine
Automaatne ja käsitsi väärtuste määramine
enum
omistab vaikimisi väärtused alates 0
, 1
, 2
jne. Kuid soovi korral saab väärtusi määrata ka käsitsi.
enum Days {
MONDAY = 1,
TUESDAY,
WEDNESDAY,
THURSDAY = 10,
FRIDAY
};
Selles näites saab MONDAY
väärtuseks 1
, TUESDAY
automaatselt 2
ja THURSDAY
määratakse käsitsi väärtusega 10
. FRIDAY
saab seejärel automaatselt 11
.
enum
kasutamine switch-case
lauses
enum
sobib hästi kasutamiseks koos switch-case
konstruktsiooniga, et tingimuslaused oleksid selgemad ja loetavamad.
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color = BLUE;
switch(color) {
case RED:
printf("Redn");
break;
case GREEN:
printf("Greenn");
break;
case BLUE:
printf("Bluen");
break;
default:
printf("Tundmatu värvn");
}
return 0;
}
Selles koodis kuvatakse vastav tekst sõltuvalt color
muutujast. switch-case
koos enum
-iga muudab koodi loetavamaks ja selgemaks.
enum
massiivi indeksina
enum
väärtuseid saab kasutada ka massiivi indeksitena.
enum Color { RED, GREEN, BLUE };
char* color_names[] = { "Red", "Green", "Blue" };
printf("%sn", color_names[RED]); // Väljund: Red
Selles näites kasutatakse enum
väärtust, et saada vastav string massiivist.

5. enum
-i kasutamise tähelepanekud ja parimad tavad
Väärtuste dubleerimine ja väärtused väljaspool määratlust
enum
-is on küll võimalik määrata korduvaid väärtusi, kuid loetavuse ja hooldatavuse huvides tuleks seda vältida.
enum Days {
MONDAY = 1,
FRIDAY = 1
};
Selles näites on MONDAY
ja FRIDAY
mõlemal väärtus 1
, mis võib põhjustada segadust või ootamatut käitumist. Samuti on võimalik määrata enum
tüüpi muutujale väärtus, mis pole loetelus defineeritud — seda tuleks samuti vältida.
enum Days { MONDAY = 1, TUESDAY = 2 };
enum Days day = 8; // See ei anna kompileerimisviga
enum
-i kasutamine loetavuse parandamiseks
enum
aitab koodi muuta loetavamaks ning seetõttu tasub seda aktiivselt kasutada. Kui kasutada enum
-i tingimuslausetes või väärtuste määramisel, muutub koodi loogika selgemaks ja vähenevad vead.
6. Näited enum
-i praktilisest kasutamisest
Võrdlus: ilma enum
-ita ja koos enum
-iga
Vaatame, kuidas erineb kood, kui enum
-i ei kasutata, ja kui seda kasutatakse.
Ilma enum
-ita
void findNearest(int day) {
switch(day) {
case 0:
printf("Täna\n");
break;
case 1:
printf("Eile\n");
break;
// Lühendatud
}
}
Kasutades enum
-i
enum Days { TODAY, YESTERDAY };
void findNearest(Days day) {
switch(day) {
case TODAY:
printf("Täna\n");
break;
case YESTERDAY:
printf("Eile\n");
break;
// Lühendatud
}
}
enum
-i kasutamine muudab koodi selgemaks ja näitab paremini programmi loogikat. See aitab vältida arusaamatusi ja parandada hooldatavust.

7. Kokkuvõte
enum
on võimas funktsioon C keeles, mis aitab parandada koodi loetavust ja hooldatavust. Kui mõistad, kuidas enum
-i õigesti kasutada, saad kirjutada tõhusamat ja veakindlamat koodi. Selle artikli abil oled õppinud nii enum
-i põhialuseid kui ka edasijõudnud kasutusvõimalusi — loodetavasti saad neid teadmisi rakendada oma igapäevases programmeerimistöös.