Come dicono gli altri, certo, è pur sempre una funzione pura.
Tuttavia, parliamo dei problemi di progettazione. Hai ragione a provare a fare qualcosa per mantenere il codice ASCIUTTO, mettendo il valore in una sola volta. Inoltre, quello che penso dovrebbe essere considerato è il livello di accoppiamento appropriato.
L'uso di una funzione ti dà più flessibilità nel cambiare l'implementazione, il che significa che l'approccio alla funzione offre un accoppiamento più lento di una variabile globale.
La domanda è se ce n'è bisogno o no?
Se i consumatori e il provider si trovano nello stesso modulo e il provider è privato per il modulo, è difficile sostenere che questo livello di accoppiamento lento sia necessario, perché se il provider richiede l'aggiornamento da un privato variabile con un metodo privato, un semplice refactoring all'interno del modulo può essere applicato ai consumatori allo stesso tempo. L'utilizzo di un metodo / funzione prima che tu abbia realmente bisogno potrebbe cadere sotto YAGNI.
Anche se il (i) consumatore (i) e il fornitore si trovano in moduli diversi, eppure i moduli sono messi insieme (ad esempio, si usa un minificatore, in modo che i moduli dei consumatori e del fornitore si trovino nello stesso file), YAGNI può applica anche.
D'altra parte, se, per esempio, il produttore si trova in una libreria o in un pacchetto o modulo API che è versionato separatamente dal / i consumatore / i, allora l'uso della funzione potrebbe essere appropriato. In tal caso dovremmo considerare la longevità dell'API e principi come l'OCP.
(In un'altra nota, se il tuo codice ha dimensioni significative, incoraggerei l'uso di moduli con campi e metodi piuttosto che variabili e funzioni globali.)