Dovrei usare i punti e virgola per delimitare le istruzioni Scala?


9

Sono abituato a delimitare le dichiarazioni di un punto e virgola da Java, quindi naturalmente lo faccio anche nel codice Scala. Sento anche che il codice è più facile da leggere, perché è evidente dove finisce un'istruzione e ne inizia un'altra. Ma molte volte quando inserisco un pezzo di codice Scala su SO, il codice viene modificato solo per rimuovere i punti e virgola.

  1. Dovrei usare i punti e virgola o no? Esistono linee guida o stili di codifica "ufficiali"?
  2. Ci sono casi in cui sono richiesti i punti e virgola, altrimenti il ​​codice è ambiguo?

5
Haskell non ti ha insegnato nulla? ; P rimuovi la sintassi non necessaria, i punti e virgola dovrebbero essere usati solo per spezzare più clausole / istruzioni sulla stessa riga
Jimmy Hoffa

@JimmyHoffa Haskell mi ha insegnato che la sintassi deve essere bella e coerente :).
Petr Pudlák,

2
La prima parte di questo è il motivo per cui mi arrabbio ogni volta che vedo frammenti di Scala ...
Jimmy Hoffa,

Risposte:


9

Non esiste un modo ufficialmente "giusto" per farlo, ma la maggior parte dei professionisti omette i punti e virgola ovunque possibile (motivo per cui così tante persone rimuovono i punti e virgola in modo riflessivo).

La lingua fa di tutto per farti dimenticare la necessità di terminare le dichiarazioni. Sfortunatamente, non ha del tutto successo, quindi ci sono varie situazioni complesse in cui sono necessari punti e virgola, o un ulteriore set di parentesi o simili "suggerimenti" per evitare semantiche indesiderate. Tali situazioni sono quasi abbastanza raro che normalmente non si deve pensare a loro. Le opinioni differiscono sul fatto che questo significhi che devi punteggiare in modo difensivo (questo è quello che penso) o mai punteggiare fino a quando non ti imbatti in problemi (questo è quello che pensa la maggior parte degli utenti). In definitiva, dipende da se ti identifichi come un rinnegato o un cittadino modello.


Grazie, potresti forse dare un esempio (o alcuni :)) di situazioni così complesse?
Petr Pudlák,

3
Temevo di essermelo chiesto ... La programmazione in Scala elenca alcuni di quelli che mi hanno sorpreso, ma al momento non ho il libro con me e dimentico i dettagli. Questo è il punto che stavo cercando di chiarire: se potessi ricordare queste situazioni eccezionali non sarebbe così grave, ma così com'è, sono sempre incerto se posso davvero omettere il punto e virgola, quindi non lo faccio.
Kilian Foth,

Huh. Non mi sono mai imbattuto in una situazione in cui mi mancasse un punto e virgola alla Scala. Non li includo mai . Ho anche programmato Scala per cose simili ad un hobby, quindi forse prima o poi mi morderà.
KChaloux,

4

Quanto vuoi capire le lingue che usi? Vuoi giocare ai suoi punti di forza o no? La sintassi di Scala incoraggia un codice chiaro e conciso; i pochi casi limite in cui trarre vantaggio da ciò causano problemi per il parser Scala sono istruttivi (vale a dire, si impara di più sulla Scala incontrando e imparando a evitarli) e gradualmente risolti (ad es. notazione suffisso ). L'uso difensivo del punto e virgola può significare che non dovrai mai conoscere questi problemi, ma lo vedi davvero come una cosa positiva? Le correzioni per questi problemi di solito hanno altre implicazioni, ma ti perderai queste possibilità.

Un'altra considerazione è che, come ammette Kilian, la maggior parte degli sviluppatori di Scala omette i punti e virgola per impostazione predefinita. Come ti aspetti di lavorare con il codice di altre persone se eviti di usare Scala idiomatica da solo? Lo troverai molto più difficile di quanto sia necessario.

Non posso sottolineare abbastanza che queste caratteristiche del parser Scala sono state scelte per incoraggiare un codice pulito, riutilizzabile e funzionale (nel senso di fp). Prendi la sintassi dell'operatore infix come esempio; incoraggia gli sviluppatori a fornire lezioni con metodi semplici e monouso che si compongono bene insieme. La biblioteca della collezione di Scala mostra quanto bene possa funzionare. Gli sviluppatori Java addestrati in modo classico che adottano questo aspetto tenderanno a sviluppare abitudini migliori e nuovi modi di pensare al proprio codice. Coloro che si attengono a tutti quei punti e parentesi familiari mancheranno. Sostengo che ciò sia vero anche per coloro che sono troppo timidi per abbandonare il punto e virgola.


8
-1 sì, essere "costretto" ad imparare la lingua a causa dei compilatori di gotcha è passato di moda con C ++. Inoltre, ci sono poche prove dietro le affermazioni, che vorrei una risposta con un tono così distorto.
Telastyn,

(1) Cosa ha detto @Telastyn: se vuoi davvero imparare una lingua in questo modo, prendi un gatto, adorano sedersi sulle tastiere perché si preoccupano della tua educazione. (2) Omettere i punti e virgola non ha nulla a che fare con lo stile pulito o incoraggiarlo - semmai, la caduta di punti e virgola nasconde il fatto che si tratta di istruzioni separate che vengono eseguite in sequenza, e possibilmente hanno effetti collaterali. Lasciare i punti e virgola in questo ti rende consapevole di ciò e quindi preferisci uno stile più funzionale. La decisione è quindi puramente sintattica (ad es. Stile, analisi, ecc.).
Eli Barzilay,

Mentre il "costretto a imparare la lingua" non vola, "usare la lingua come intendono i suoi autori" e "come la maggior parte degli altri sviluppatori la usano" sono punti di riferimento importanti. È utile mantenere uno stile coerente tra più sviluppatori. Sia da questa risposta che da @Killan Foth, i manutentori e la maggior parte degli sviluppatori, a quanto pare, vedono il punto e virgola come estraneo.
Sarah Messer,
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.