Nomi variabili di lunghezza uguale: trucchi o alternative? [chiuso]

6

Questa potrebbe essere una domanda super stupida, simile a OCD, stupida, ma ... mi piace quando le variabili correlate hanno nomi di uguale lunghezza, in modo tale che quando scritti l'uno sotto l'altro, si allineano bene. Ad esempio:

  • min / max:

    int min;
    int max;
    
  • indice / lunghezza: idx / len

  • interno / esterno:

    SpaceTime inner;
    SpaceTime outer;
    

Tuttavia, ci sono molte parole che non si adattano, come:

  • inizio / fine
  • start / stop
  • larghezza / altezza
  • alto / basso
  • sinistra / destra
  • prima / ultima
  • di apertura / chiusura

Ci sono trucchi o alternative conosciute per coppie di parole come queste che si allineano?

Odio vedere qualcosa del genere:

double openPrice = lerpPrice(openTime, previousCloseTime, currentOpenTime, priceStart, priceStop);
double closePrice = lerpPrice(closeTime, previousCloseTime, currentOpenTime, priceStart, priceStop);

Una lunga riga, che si allinea perfettamente se open e close avrebbero avuto lo stesso numero di caratteri:

double opennPrice = lerpPrice(opennTime, previousCloseTime, currentOpenTime, priceStart, priceStop);
double closePrice = lerpPrice(closeTime, previousCloseTime, currentOpenTime, priceStart, priceStop);

L'aggiunta di spazi potrebbe funzionare, se il mio formattatore non li rimuovesse automaticamente.

    
posta Martijn Courteaux 09.07.2018 - 21:09
fonte

3 risposte

10

Oh mio Dio, vorrei che non sapessi esattamente di cosa stai parlando.

È così allettante mettere in fila le cose in modo visivamente piacevole. Ma te ne occuperai in uno dei modi più dannosi che potresti.

Se devi allineare

double openPrice = lerpPrice(openTime, previousCloseTime, currentOpenTime, priceStart);
double closePrice = lerpPrice(closeTime, previousCloseTime, currentOpenTime, priceStart);

per amore della leggibilità non rinominare openPrice in opennPrice ! Sembra un errore di battitura. Non torturarti con le coppie di nomi. Se l'allineamento significa molto per te, usi lo spazio bianco.

double openPrice  = lerpPrice(openTime,  previousCloseTime, currentOpenTime, priceStart);
double closePrice = lerpPrice(closeTime, previousCloseTime, currentOpenTime, priceStart);

La tua guida di stile potrebbe accigliarsi su di essa, il tuo IDE potrebbe continuare a provare a risolverlo, e probabilmente i tuoi colleghi programmatori non lo rispetteranno. Ma almeno non hai lasciato che il tuo OCD creasse la cosa più malvagia del software: un brutto nome.

Sei in buona compagnia. La fama di Josha Bloch di Giava è afflitta anche da questa ossessione. Ma lo esprime così:

equesto

Effective-Java

Non è richiesto nessun nome sciocco.

Ora, per favore, non prendere questo come approvazione per accoppiare visivamente le linee usando spazi bianchi. Ho lottato con questo me stesso e conosco il lato negativo. Una volta che inizi a essere contento da loro mettendoti in coda, perdi tempo cercando di tenerli allineati. Rinuncia a buone opportunità di refactoring che ti spingono in avanti solo perché non vuoi rovinare la tua simmetria accidentale. Ma peggio ancora, si inizia ad avere guerre di modifica con codificatori ignari che si fidavano ingenuamente della correzione di stile predefinita dell'IDE per correggere il loro codice. Cambiano accidentalmente il tuo codice senza sapere che l'hanno toccato. Giurano su e giù in una revisione del codice che hanno cambiato solo una riga. Eppure c'è nel controllo del codice sorgente. 105 linee modificate. Sigh.

Mi piace anche il codice visivamente piacevole. Ma questa non è una collina che vale la pena morire. Se hai questo tipo di energia da risparmiare, vieni con me nella lotta contro i pagani che usano le schede empie piuttosto che gli spazi dati da Dio.

Anche se ammetto che I leggermente maneggia i nomi predefiniti per accoppiarli nei miei test di unità.

expect
actual

Possano gli spazi perdonarmi.

    
risposta data 09.07.2018 - 23:24
fonte
1

Le persone tendono ad avere tali problemi perché ripetono il codice. Se potessi scrivere così:

var pi = new Interpolator(previousCloseTime, currentOpenTime, priceStart, priceStop);
double openPrice = pi.interpolate(openTime);
double closePrice = pi.interpolate(closeTime);

Ci sarebbe molto meno fastidio.

    
risposta data 10.07.2018 - 07:43
fonte
-3

Recentemente ho visto una raccomandazione sulla formattazione in questo modo: sposta le informazioni importate il più a sinistra possibile.

Un metodo medio sarebbe simile a questo allora:

public void doSomething(
            String firstParamter,
            int secondParameter
) throws Exception {
   double localVariable =
       getValueForLocalVariable(
            firstParamter, 
            secondParameter);
   if(isConditionMet(
            localVariable,                
            secondParameter)
   ){
       throw new Exception(
            String.format(
                 "reason %s %d %f",
                 firstParamter,                
                 secondParameter, 
                 localVariable));
   }
}

Il punto è che tutti i parametri (dichiarazione e utilizzo) si trovano nella stessa colonna (all'interno dello stesso blocco).

Sì, è necessario un po 'di abituazione, ma penso che abbia alcuni vantaggi, specialmente quando tengo a mente le SCM che potrebbero avere più possibilità di risoluzione automatica dei conflitti.

    
risposta data 09.07.2018 - 22:02
fonte

Leggi altre domande sui tag