C keele enum seletus ja praktilised näited algajatele

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.

年収訴求