Spesso quando scrivo un insieme di funzioni di utilità, mi ritrovo a volere una funzione che applica una logica a più elementi, oltre a una funzione che fa lo stesso con un singolo elemento. Ci sono molte potenziali soluzioni a questo, ma mi trovo sempre a capovolgere avanti e indietro.
- Potrei scrivere una versione esclusivamente singolare della funzione (
modify_item(item)
) e usaremap
, comprensione o foreach esternamente. Però non voglio farlo ogni volta che lo chiamo con più elementi. - Potrei scrivere una versione esclusivamente esplicitamente plurale della funzione (
modify_items(items)
) che esegue l'iterazione all'interno. Ma non voglio nemmeno chiamarlo con una lista ogni volta. Meglio che sempre singolare, ma ancora difficile da chiamare. Ciò supporterà anche le operazioni di massa. - Potrei scrivere una funzione agnostica che controlla il tipo di input (
modify_item(item)
). Se non è iterabile, lo inserirà in un elenco e quindi itererà. Questa sembra essere l'opzione migliore, ma il richiamo degli operatori di stelle mi fa sempre ... - Potrei scrivere una funzione agnostica che prende un numero variabile di input (modify_item (* items)) e itera su di essi. Questo mi dà una buona sintassi di chiamata e impacchetta automaticamente gli elementi in un iterabile per me. Il problema che mi imbatto sempre qui è che aggiungere argomenti successivi o argomenti di parole chiave è scomodo.
- Infine, potrei semplicemente alzare le mani e scrivere una funzione plurale come sopra, e una singolare che avvolgerebbe il parametro in una lista e lo passerebbe al plurale. Quindi dovrei scrivere il doppio delle funzioni, il che è sciocco.
Sembra che le librerie javascript di solito facciano l'opzione di controllo del tipo (n. 3), ed è quella che mi piace di più. In tal caso, hai la domanda di denominare le convenzioni. Penso di preferire il singolare, ma non ne sono sicuro.
Gli esempi sono in python, ma questa domanda potrebbe essere applicata alla maggior parte delle lingue.