Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Vier bewaarde patronen voor gebruiksgedefinieerde functies in C

Vier bewaarde patronen voor gebruiksgedefinieerde functies in C

Ontdek vier verschillende manieren om een gebruiksgedefinieerde functie te implementeren die controleert of een getal een priemgetal is, en leer welke benadering de grootste duidelijkheid en herbruikbaarheid biedt.

Hieronder tonen vier complete programma's hoe dezelfde logische taak kan worden uitgedrukt met verschillende functiesignaturen. Alle vier produceren identieke output, maar de ontwerpkeuzes variëren, wat de belangrijke afwegingen in functie-ontwerp illustreert.


Voorbeeld 1: Geen argumenten, geen retourwaarde

#include <stdio.h>
void checkPrimeNumber();
int main() {
    checkPrimeNumber(); // geen argument wordt doorgegeven
    return 0;
}
// return type is void, dus het retourneert geen waarde
void checkPrimeNumber() {
    int n, i, flag = 0;
    printf("Voer een positief geheel getal in: ");
    scanf("%d", &n);
    for(i = 2; i <= n/2; ++i) {
        if(n % i == 0) {
            flag = 1;
        }
    }
    if (flag == 1)
        printf("%d is geen priemgetal.", n);
    else
        printf("%d is een priemgetal.", n);
}

De checkPrimeNumber()-functie is verantwoordelijk voor het lezen van gebruikersinvoer, het uitvoeren van de priemtest en het printen van het resultaat. Omdat het retourtype void is, communiceert het de uitsluitend via bijwerkingen (side effects).


Voorbeeld 2: Geen argumenten, wel een retourwaarde

#include <stdio.h>
int getInteger();
int main() {
    int n, i, flag = 0;
    // geen argument wordt doorgegeven
    n = getInteger();
    for(i = 2; i <= n/2; ++i) {
        if(n % i == 0) {
            flag = 1;
            break;
        }
    }
    if (flag == 1)
        printf("%d is geen priemgetal.", n);
    else
        printf("%d is een priemgetal.", n);
    return 0;
}
// retourneert het door de gebruiker ingevoerde gehele getal
int getInteger() {
    int n;
    printf("Voer een positief geheel getal in: ");
    scanf("%d", &n);
    return n;
}

Hier kapselt getInteger() de invoerroutine in en retourneert de waarde naar main, die vervolgens de logica voor de priemcontrole afhandelt. Deze scheiding maakt de invoerstap herbruikbaar in verschillende contexten.


Voorbeeld 3: Argument doorgegeven, geen retourwaarde

#include <stdio.h>
void checkPrimeAndDisplay(int n);
int main() {
    int n;
    printf("Voer een positief geheel getal in: ");
    scanf("%d", &n);
    // n wordt aan de functie doorgegeven
    checkPrimeAndDisplay(n);
    return 0;
}
// return type is void, dus het retourneert geen waarde
void checkPrimeAndDisplay(int n) {
    int i, flag = 0;
    for(i = 2; i <= n/2; ++i) {
        if(n % i == 0) {
            flag = 1;
            break;
        }
    }
    if(flag == 1)
        printf("%d is geen priemgetal.", n);
    else
        printf("%d is een priemgetal.", n);
}

In dit patroon wordt de verantwoordelijkheid voor het weergeven van het resultaat naar de helper-functie verplaatst. Hoewel dit main slank houdt, koppelt de functie nu het algoritme aan I/O, wat de herbruikbaarheid vermindert.


Voorbeeld 4: Argument doorgegeven en een retourwaarde

#include <stdio.h>
int checkPrimeNumber(int n);
int main() {
    int n, flag;
    printf("Voer een positief geheel getal in: ");
    scanf("%d", &n);
    // n wordt aan de checkPrimeNumber()-functie doorgegeven
    // de geretourneerde waarde wordt toegewezen aan de flag-variabele
    flag = checkPrimeNumber(n);
    if(flag == 1)
        printf("%d is geen priemgetal", n);
    else
        printf("%d is een priemgetal", n);
    return 0;
}
// int wordt geretourneerd vanuit de functie
int checkPrimeNumber(int n) {
    int i;
    for(i = 2; i <= n/2; ++i) {
        if(n % i == 0)
            return 1;
    }
    return 0;
}

Dit ontwerp houdt het geïsoleerd en retourneert een simpele statusvlag. De aanroeper beslist hoe het resultaat gepresenteerd wordt, wat de functie hoogst herbruikbaar maakt in bibliotheken of grotere applicaties.


Het optimale patroon kiezen

Hoewel alle vier implementaties dezelfde output produceren, is de meest onderhoudbare en testbare benadering Voorbeeld 4: het doorgeven van het getal als argument en het retourneren van een Booleaanse-stijl vlag. Dit patroon volgt het single-responsibility-principe, stelt unit-testing van checkPrimeNumber toe zonder I/O-afhankelijkheden, en kan eenvoudig geïntegreerd worden in complexere systemen.

Uiteindelijk hangt de keuze af van de architectuur van je project. Als de functie direct met de gebruiker moet interageren, kan Voorbeeld 3 volstaan. Voor bibliotheekcode of services waar I/O elders wordt afgehandeld, biedt Voorbeeld 4 de grootste flexibiliteit.

C Taal

  1. Namespaces in C#: organisatie, scope en best practices
  2. C Datatypes Uitgelegd: int, float, char en Meer – Een Complete Gids
  3. C Programmeeroperatoren Beheersen: Een Uitgebreide Gids
  4. C Standaardbibliotheek-functies onder de knie krijgen: Een praktische gids
  5. C++ Variabelen en Datatypes: Expert‑handleiding voor int, double, char, string, bool
  6. Pointers in C: Een Uitgebreide Gids naar Typen, Gebruik en Best Practices
  7. C-programmeren leren: Uitgebreide tutorial voor beginners
  8. C-datatypes begrijpen: Een complete gids
  9. C-functies: Structuur, declaratie, aanroep en argumenten
  10. Variabele Argumenten in C: Een Praktische Gids
  11. Variabelen in C# Begrijpen: Typen, Opslag en Gebruik