Funzioni che contengono una singola istruzione?

5

Va bene avere funzioni che hanno istruzioni singole?

Solitamente realizzo funzioni con istruzioni singole. Credo che questi aumentino la leggibilità del codice e io sia in grado di scrivere codice più velocemente in quanto rendono il codice più simile al linguaggio naturale. Queste funzioni sono spesso funzioni di utilità che richiamo almeno a 2 posizioni.

RegExp.escape = function(text) {
  return text.replace(/[-[\]{}()*+?.,\^$|\s]/g, "\$&");
};

function makeSelector(text) {
  return '#' + RegExp.escape(text);
}
    
posta Gaurav Grover 29.11.2016 - 15:52
fonte

3 risposte

2

Affinché il refactoring di una funzione sia utile,

  1. La funzione dovrebbe incapsulare un po 'significativo di funzionalità riutilizzabile
  2. Il nome della funzione dovrebbe incorporare in modo significativo tale funzionalità.

Il tuo esempio specifico sembra utile, a condizione che la prima funzione sia utilizzata in più di una posizione. In caso contrario, potrebbe essere meglio includerlo semplicemente nella seconda funzione, in quanto si semplificherebbe il codice avendo meno funzioni di cui preoccuparsi.

    
risposta data 29.11.2016 - 16:01
fonte
0

È un argomento controverso, ma come risposta accettata a una domanda recente, Il mio capo mi chiede di smettere di scrivere piccole funzioni e fai tutto nello stesso ciclo , mostra, la maggior parte delle persone sembra concordare sul fatto che le singole funzioni di istruzione aiutano a migliorare la leggibilità.

Gli svantaggi di questo approccio sono che se la funzione non ha un nome appropriato, devi saltare il codice, leggendo cosa fa e questo può rallentare lo sviluppatore.

Una riga di codice è facile da ragionare e quindi tali funzioni tendono ad essere altamente leggibili, specialmente se la funzione ha un nome appropriato. Quindi, a conti fatti, è meglio scrivere funzioni brevi e ben denominate rispetto alle funzioni lunghe, indipendentemente da come vengono denominate queste ultime.

    
risposta data 29.11.2016 - 15:55
fonte
0

Oltre agli ovvi miglioramenti di leggibilità (presupponendo ovviamente funzioni ben definite / con scope), questo ha anche il strong vantaggio di fornire un punto di astrazione per la funzionalità.

Supponiamo di avere 30 posizioni nel codice in cui si desidera utilizzare questa funzionalità, e si fa non per mettere un wrapper di funzione su di esso. Quindi, se tale funzionalità deve cambiare, è necessario trovarla e modificarla in 30 luoghi, il che è molto soggetto a errori (specialmente in JS, dove gli strumenti di refactoring sono al massimo immaturi).

Se quello era in una funzione, basta cambiare il contenuto della funzione (un cambio di codice di un punto) e il resto è isolato.

Forse il tuo codice specifico nella domanda non è il miglior esempio di quanto possa essere importante, ma è un concetto molto strong in generale, IMNSHO. Non uso molto la parola 'sempre', ma preferirei quasi sempre un wrapper di funzioni per quel solo punto di astrazione, indipendentemente dai vantaggi di denominazione / organizzazione aggiunti.

In realtà, la tua funzione è un esempio decente del mio punto. Se mai (per qualche ragione che non riesco a capire al momento, ma questo è oltre il punto) volevo cambiare il modo in cui sfuggi alla stringa o allontanati dall'espressione regolare, dovresti solo cambiare il corpo della funzione, non trovare ogni si utilizza RegEx.escape

    
risposta data 29.11.2016 - 16:04
fonte

Leggi altre domande sui tag