Forse, il difficile momento per nominare la funzione è causato dall'evidenza che sta violando il principio SLA . Vedi anche Principio di singola responsabilità
Citando il link:
All statements of a method should belong to the same level of
abstraction. If there is a statement which belongs to a lower level of
abstraction, it should go to a private method which comprises
statements on this level. Doing so will result in smaller methods.
Copia, sposta e cancella sono diverse astrazioni . Non sono loro? Sono funzioni con differenti responsabilità .
Come menzionato @ErikEidt, sarebbe più facile trovare il nome, se applichiamo uno dei due principi:
function copy(src, dest){
//...
return cp;
}
function delete(src){
//...
}
function move(src, dest){
var cp = copy(src,dest);
delete(src);
return cp;
}
function copyOrMove(src, dest, copy){
if(copy){
return copy(src,dest);
}
return move(src,dest);
}
L'ultima "astrazione" sta solo incapsulando un'istruzione if
. Potrebbe avere senso se ci aspettiamo di occuparci spesso di quel disgiuntivo. Il fatto è che ora vediamo chiaramente cosa fa e qual è il nome possibile.
Quindi, penso, la risposta alla domanda potrebbe essere:
-
copyOrMove per la funzione di livello superiore
-
sposta per la funzione di livello inferiore
Nonostante il numero delle funzioni, manteniamo il principio DRY , perché non abbiamo ripetuto alcun livello di astrazione. Finora ne abbiamo creato uno nuovo ( copyOrMove ).
Nota: ho mantenuto i nomi delle funzioni forniti dall'OP per rendere più semplice il refactoring da seguire. Come al solito, potrebbe essere migliorato, ad esempio, eliminando delete (). Ho mantenuto delete () perché penso che sia una funzione legit da sola con una responsabilità / astrazione ben definita