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.