La chiusura della parentesi sulla propria riga è inaccettabile? [chiuso]


8

Uso Emacs da parecchi anni ormai, ma solo di recente mi sono imbattuto negli standard di codifica . Lì si afferma:

Non prendere l'abitudine di mettere le parentesi chiuse sulle linee da sole; I programmatori di Lisp lo trovano sconcertante.

Questa è esattamente l'abitudine che ho sviluppato, poiché trovo che il codice sia più facile da leggere. Vedo stili misti nei pacchetti forniti con Emacs. La mia domanda è se questo sconcerto è comune alla maggior parte dei programmatori elisp.

Modifica: guardando il mio codice, non sto seguendo rigorosamente questo. Quindi il codice sarebbe abbastanza orribile. È principalmente defun, let, if e così via. Ma sembra essere contrario, quindi probabilmente dovrei smettere di farlo. Saluti per l'input.

(Basato su un'opinione borderline, ma sembra legato alla chiusura di parentesi graffe in C ++, dove non dovrebbe essere controverso affermare che generalmente dovrebbero essere sulla propria linea).


4
Non inaccettabile, basta davvero fastidioso :)
abo-ABO

4
Pensalo come un linguaggio di spazi bianchi, tranne le parentesi rimuovono la possibile ambiguità - in lisp ben formattato dovresti essere in grado di leggerlo senza guardare le parentesi
Squidly

1
Sono curioso di sapere quali pacchetti consegnati con emacs non aderiscono a questo.
Malabarba,

3
@Malabarba Una ricerca con agle fonti lisp mi dà 3414 candidati per la ^\s*?\)$regex che compongono 468 file che appartengono a circa 200 pacchetti?
Wasamasa,

1
@wasamasa Buona idea. L'ho inserito attraverso un altro paio di pipe e ho ottenuto che il 90% dei .elfile ha meno di 10 istanze di questo. Significa che questi file non lo adottano come uno stile, lo usano solo in alcuni punti convenienti (come per finire funzioni molto lunghe).
Malabarba,

Risposte:


6

Bene una breve risposta è "non è necessario". Poiché Emacs può analizzare le espressioni s di LISP, sa esattamente dove si bilanciano i moduli e può rientrare correttamente nel codice. In questo caso, spostare una parentesi verso il basso sulla sua stessa linea semplicemente spreca una linea aggiuntiva di spazio e allo stesso tempo non è idomatica e sconcertante per altri programmatori LISP che sono abituati allo stile canonico. Come è stato menzionato nei commenti, ciò non vi impedisce di usare lo spazio bianco verticale per separare visivamente blocchi di codice.

In pratica molti Emacs che usano programmatori LISP usano una varietà di segnali visivi aggiuntivi come la modalità show-paren che aiutano a navigare attraverso un denso nido di parentesi chiuse. Gli ingegneri che hanno inserito moduli come paredit e smart-parens nel loro ciclo di editing sono diventati un tutt'uno con l'AST e stanno semplicemente manipolando la sua struttura direttamente in modo che le espressioni siano sempre bilanciate e complete.


Naturalmente ho una corrispondenza tra parentesi e così via, ma penso che lo spazio verticale abbia un posto in tutto il codice, ed è ciò che porta questa abitudine non raccomandata. Ma uno stile comune è sempre buono, per qualsiasi pubblico vorrei usare il modo raccomandato. Ma per capovolgerlo, quale valore porta la massa di parentesi alla fine :).
Nome utente significativo

4
Puoi sempre aggiungere spazio verticale; nulla dice che devi smussare ogni riga fino alla successiva. A volte lo spazio verticale è utile; a volte no. Mettere le parentesi alla fine della linea ti consente di scegliere quando aggiungere spazio verticale e quando non farlo. Parens su una nuova linea forza lo spazio verticale, e molto.
zck,

@zck: ho aggiornato la risposta per menzionare il tuo punto. Grazie.
stsquad,

Buon punto. Ho iniziato a cambiare il mio codice per renderlo conforme allo standard. Non c'è molta differenza, quindi dovrebbe essere veloce per abituarsi. Immagino di aver appena pensato che le parentesi dovessero essere usate per qualcosa, mentre la maggior parte degli altri sembra praticamente ignorarle.
Nome utente significativo

6

La Guida allo stile Lisp di Riastradh elabora un po 'di più su questo argomento specifico. Mentre in genere si scoraggia dal mettere le parentesi di chiusura sulla propria riga, riconosce diverse eccezioni, come una riga precedente con un paren di chiusura commentato e liste molto lunghe che altrimenti rovinerebbero continuamente differenze quando si aggiungono nuovi elementi all'inizio o alla fine .


1

Scrivo Elisp da circa 2-3 anni. All'inizio, stavo facendo la cosa dei genitori sospesi, ma da quando ho scoperto la regola che hai menzionato, ho iniziato a farlo da solo. E ora posso dire che è molto più semplice leggere il codice quando è in stile appropriato.

Ho anche scritto un codice di preimpostazione LISP qui: lispy-tab .

E, naturalmente, ho show-paren-modetutto il tempo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.