Come denominare una funzione che copia o rinomina un file / directory

1

Ho una funzione

function name(src, dest, remove) {
    copy(src, dest);
    if (remove) {
       delete(src);
    }
}

Che nome dovrei dare a quella funzione? In alternativa una funzione di ordine superiore come questa:

function name(remove) {
    if (remove) {
        return function(src, dest) {
           copy(src, dest);
           delete(src);
        };
    } else {
        return copy;
    }
}
    
posta jcubic 10.12.2016 - 19:13
fonte

2 risposte

7

Rimuovi il valore booleano e hai due funzioni: sposta e copia.

    
risposta data 10.12.2016 - 20:24
fonte
2

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

    
risposta data 10.12.2016 - 21:50
fonte

Leggi altre domande sui tag