Jak mówią inni, z pewnością nadal jest to czysta funkcja.
Porozmawiajmy jednak o problemach projektowych. Masz rację, próbując coś zrobić, aby zachować kod DRY, umieszczając wartość tylko w jednym miejscu. Ponadto moim zdaniem należy również wziąć pod uwagę odpowiedni poziom sprzężenia.
Korzystanie z funkcji daje większą elastyczność zmiany implementacji, co oznacza, że podejście funkcyjne oferuje luźniejsze sprzężenie niż zmienna globalna.
Pytanie brzmi, czy ktoś tego potrzebuje, czy nie?
Jeśli konsumenci i dostawca są w tym samym module, a dostawca jest prywatny dla modułu, trudno argumentować, że ten poziom luźnego sprzężenia jest konieczny, ponieważ jeśli dostawca wymaga aktualizacji ze zmiennej prywatnej na zmienną metodą prywatną, proste refaktoryzacja w module może być zastosowana do konsumentów w tym samym czasie. Korzystanie z metody / funkcji, zanim naprawdę będziesz potrzebować, może podlegać YAGNI.
Nawet jeśli konsumenci i dostawca są w różnych modułach, ale moduły są wersjonowane razem (na przykład używasz minifyera, aby moduły konsumenta i dostawcy były w tym samym pliku), może również obowiązywać YAGNI.
Z drugiej strony, jeśli na przykład producent znajduje się w bibliotece lub pakiecie API lub module, który jest wersjonowany oddzielnie od konsumenta (ów), użycie tej funkcji może być odpowiednie. W takim przypadku powinniśmy patrzeć na długowieczność API i zasady takie jak OCP.
(Z drugiej strony, jeśli twój kod ma znaczny rozmiar, zachęcam do używania modułów z polami i metodami zamiast zmiennych globalnych i funkcji).