Devo inserire le newline prima o dopo gli operatori binari? [chiuso]

11

Quando sei in Python o Javascript, dovresti sempre mettere gli operatori binari nella fine della riga precedente, in modo da impedire che le nuove righe interrompano prematuramente il tuo codice; ti aiuta a cogliere errori.

Ma in C o C ++, questo non è un problema, quindi mi chiedo:

C'è qualche motivo per me di preferire la seconda versione al primo?

return lots_of_text
       + 1;

vs

return lots_of_text +
       1;

(Ad esempio, uno di questi aiuta a prevenire altri tipi di errori? O uno di essi è considerato più leggibile?)

    
posta Mehrdad 12.08.2012 - 04:40
fonte

4 risposte

18

Come puoi vedere dalle risposte, non c'è consenso su questo argomento. A meno che tu non lavori in una squadra, usa ciò che tu ti fa più comodo.

I preferisco inserire una nuova riga prima degli operatori.

Ogni volta che devo interrompere le linee, di solito metto al massimo un termine dello stesso "livello" su una riga:

Legge di gravitazione di Newton in Python:

force = (
    gravitational_constant
    * mass_1
    * mass_2
    / (distance * distance)
)

Confronta questo per:

force = (
    gravitational_constant *
    mass_1 *
    mass_2 /
    (distance * distance)
)

Voglio sapere che "divido di distanza al quadrato", non voglio sapere, che "mass_2 ottiene diviso", perché non è così Penso alle espressioni matematiche.

Inoltre, di solito voglio sapere prima, cosa sto facendo (operatore), prima di preoccuparmi di ciò che faccio cose con (operandi).

Oppure considera questa dichiarazione SQL complicata:

WHERE
  a = 1
  AND b = 2
  AND c = 3
  AND ( -- or put the OR on one line together with the AND
    d = 3 
    OR e = 1)
  AND x = 5

Questo mi permette di vedere come le singole condizioni sono collegate molto facilmente, semplicemente scorrendo dall'alto verso il basso senza dover leggere ogni riga fino alla fine per trovare l'operatore al contrario di:

WHERE
  a = 1 AND
  b = 2 AND
  c = 3 AND
  ( 
    d = 3 OR
    e = 1) AND
  x = 5

Penso al primo in termini di " X è vero", quindi correggo dicendo: " E questo è anche vero" che sente altro naturale per me rispetto al contrario. Inoltre, trovo il primo molto più facile da analizzare visivamente.

O un esempio PHP:

$text = "lorem ipsum"
      . "dolor sit amet, "
      . "consectetur adipisicing elit, "
      . "sed do eiusmod tempor";

Ancora una volta, posso semplicemente leggere la lettura in verticale per vedere che sto semplicemente concatenando il testo, perché la maggior parte delle volte sento che non mi interessa davvero cosa c'è dentro le stringhe / condizioni.

Naturalmente, non applicherei questo stile incondizionatamente. Se inserisco una nuova riga dopo che un operatore sembra avere più senso per me, lo farei, ma al momento non riesco a pensare ad un esempio.

    
risposta data 13.08.2012 - 13:49
fonte
11

Ho quasi sempre interrotto le linee prima degli operatori binari per chiarire ai lettori del codice che questa è la continuazione di un'espressione e non la prossima affermazione. Questo è importante se la prossima affermazione sarebbe normalmente rientrata. Ad esempio, considera un'istruzione if con un'espressione condizionale complessa:

if (first_part_of_condition &&
    second_part_of_condition) {
    statement_within_then_part;
}

La seconda parte dell'espressione condizionale è facilmente confusa con la prima affermazione della parte allora. Questo può essere abbastanza confuso se la prima parte della condizione è lunga e il & & finisce sulla destra. Confronta questo con l'alternativa:

if (first_part_of_condition
    && second_part_of_condition) {
    statement_within_then_part;
}

Questo sembra un po 'strano, ma rende abbastanza chiaro che la seconda parte della condizione non è l'inizio di una dichiarazione.

Lo faccio anche in altri contesti, ma l'if-statement è il più importante, poiché l'indentazione è ambigua. Certamente, si potrebbe cambiare il rientro o il posizionamento del tutore, ma anche questo sembra strano.

tl; dr l'estremità sinistra della linea è più significativa per una rapida comprensione della lettura, quindi mettere l'operatore all'estremità sinistra è un marcatore più prominente che è un'espressione continua, non un'affermazione.

    
risposta data 13.08.2012 - 09:28
fonte
8

Userei sempre il primo. Vuoi che sia chiaro cosa stai facendo con quello lì. Se l'avessi visto e sopra c'era un muro di testo 1 non avrei idea di cosa succedesse fino all'utilizzo di quel 1.

Il '+' accanto all'1 indica che al minimo sto facendo qualcosa con l'1 in questione piuttosto che uscire in giro "Sono tutto nel tuo codice ..." senza una ragione apparente .

    
risposta data 12.08.2012 - 04:44
fonte
6

Sento che aiuta a leggere la comprensione tremendamente quando una linea indica che l'istruzione continua nella riga successiva avendo l'operatore binario alla fine e rendendo così l'istruzione incompleta. Il punto e virgola mancante non è abbastanza per me da capire immediatamente.

Questo può essere semplicemente una questione di abitudine ma a meno che non lavori esclusivamente in lingue che richiedono il punto e virgola (che trovo piuttosto irrealistico data la pervasività di script, makefile e linguaggi come Python) probabilmente non avrai quell'abitudine sia.

EDIT: Giorgio fa un punto eccellente nei commenti: questo uso riecheggia la punteggiatura comune , sia in matematica che in lingue naturali. Scriveresti

I sink,
therefore I swam

non scrivi

I sink
, therefore I swam

    
risposta data 13.08.2012 - 12:05
fonte

Leggi altre domande sui tag