Qual è la terminologia corretta per questo genere di cose? [chiuso]

2

Un costrutto che uso spesso quando l'elenco di "cose su cui prendere una decisione" diventa troppo grande per essere pratico in un'istruzione if/else o switch è di creare una tabella con valori e callback. Ad esempio, qualcosa come questo (C):

struct keymap {
    int key;
    int (*callback)(struct data *data);

    int end;
};

...

struct keymap controls[] = {
    {'a', move_left},
    {'d', move_right},
    ...
    {.end = 1}
};

...

struct keymap *
keymap_find(int key)
{
    for(struct keymap *selmap = controls; !selmap->end; selmap++)
        if(selmap->key == key)
            return selmap;

    return NULL;
}

...

int
some_exec_function(struct data *data)
{
    struct keymap *selmap = keymap_find(get_key());

    if(selmap == NULL)
        return 0;

    return selmap->callback(data);
}

Ho studiato più "schemi di progettazione" di quanti ne abbia voglia di ammettere e non ho trovato nulla che catturi questo tipo di design. So che il paradigma in particolare è un po ' dichiarativo , perché alla fine i controlli sono definiti dalla tabella, quindi stai dicendo "cosa fare" invece di "come farlo", e quindi aggiungere nuove voci e capire l'intento sono estremamente semplici e facili.

Non ho idea di quale sia la terminologia corretta, e mi piacerebbe studiarla per progetti simili, così da poter migliorare il mio approccio a lungo termine.

    
posta Braden Best 13.03.2017 - 03:07
fonte

1 risposta

5

Sembra che tu stia costruendo una tabella di valori e un indirizzo della routine da chiamare. Questa sembra essere una " tabella di spedizione ".

    
risposta data 13.03.2017 - 04:53
fonte