The only reason I can think of is that dates are immutable objects, so by calling plusDays you're not adding days to the original object but creating a new one with new properties, but that's very vary subtle.
Questa è esattamente la ragione. Immagina di avere una sorta di API per la manipolazione di intervalli di date per scopi di pianificazione. Potrebbe esporre metodi che ti consentono di formulare una dichiarazione del tipo:
var workdaySchedule = initialSchedule.withoutWeekends();
Questo si legge in modo molto simile alla dichiarazione inglese: "Il programma di lavoro è il programma iniziale senza fine settimana". Non implica modificare la pianificazione iniziale, implica che il programma di lavoro sia una cosa nuova e diversa.
Ora immagina che sia stato nominato:
var workdaySchedule = initialSchedule.removeWeekends();
Questo è confuso. La pianificazione iniziale è stata modificata? Suona sicuramente, perché sembra che stiamo rimuovendo fine settimana da esso. Ma allora perché lo assegniamo a una nuova variabile? Sebbene questi due schemi di denominazione siano molto simili, questo è molto meno evocativo di ciò che sta accadendo. Ciò sarebbe più appropriato se removeWeekends
ha modificato la pianificazione iniziale e restituito nulla, in questo caso withoutWeekends
sarebbe l'opzione di confusione.
Questa è essenzialmente una distinzione dichiarativa rispetto all'imperativo. Siamo dichiarando che la workdaySchedule
è una cosa particolare, o stiamo eseguendo una lista di istruzioni imperative (come "remove") per rendere quella cosa particolare? Solitamente, la denominazione imperativa ha più senso quando si stanno modificando i valori e il dichiarativo ha più senso con valori immutabili, come dimostra l'esempio precedente.
Nel tuo caso, hai esattamente la stessa cosa. Se vedessi: tomorrow.plusDays
, non immaginerei che tomorrow
sia stato mutato, mentre tomorrow.addDays
, penserei che potrebbe essere. Questo è un po ' sottile - ma non necessariamente in modo negativo. Senza doverci pensare troppo, questa denominazione naturalmente imposta il tuo pensiero lungo le linee giuste in termini di se stai mutando o meno. Per rendere più chiara questa distinzione tra questi stili imperativo e dichiarativo: "aggiungi" (e "rimuovi") sono verbi , mentre "più" (e "senza") sono preposizioni .