Devo usar ponto e vírgula para delimitar as instruções do Scala?

9

Estou acostumado a delimitar declarações com ponto-e-vírgula do Java, então naturalmente faço isso também no código Scala. Também sinto que o código é mais fácil de ler, porque é evidente onde uma instrução termina e outra começa. Mas muitas vezes quando eu publico um código Scala no SO, o código é editado apenas para remover o ponto e vírgula.

  1. Devo usar ponto e vírgula ou não? Existem diretrizes "oficiais" ou estilo de codificação?
  2. Existem casos em que o ponto e vírgula é necessário, caso contrário, o código é ambíguo?
Petr Pudlák
fonte
5
Haskell não ensinou nada a você? ; P remover sintaxe desnecessária, ponto e vírgula deve ser usado apenas para quebrar vários cláusulas / declarações sobre a mesma linha
Jimmy Hoffa
@JimmyHoffa Haskell me ensinou que a sintaxe deve ser bonita e consistente :).
Petr Pudlák
2
A primeira parte é por isso que eu fico irritado sempre que vejo trechos Scala ...
Jimmy Hoffa

Respostas:

9

Não existe uma maneira oficialmente "correta" de fazê-lo, mas a maioria dos profissionais omite ponto e vírgula onde quer que seja (é por isso que tantas pessoas removem ponto e vírgula reflexivamente).

A linguagem se esforça muito para fazer você esquecer a necessidade de encerrar as instruções. Infelizmente, ele não é bem- sucedido; portanto, existem várias situações complexas nas quais ponto e vírgula, um conjunto extra de parênteses ou "dicas" semelhantes são necessárias para evitar semânticas indesejadas. Tais situações são quase raras o suficiente para que você normalmente não precise pensar nelas. As opiniões divergem se isso significa que você deve pontuar defensivamente (é o que eu acho) ou nunca pontuar até encontrar problemas (é o que a maioria dos usuários pensa). Por fim, cabe a você se identificar como cidadão renegado ou modelo.

Kilian Foth
fonte
Obrigado, você poderia dar um exemplo (ou alguns :)) de situações tão complexas?
Petr Pudlák
3
Eu tinha medo de me perguntar isso ... A programação no Scala lista vários deles que me surpreenderam, mas não tenho o livro comigo no momento e esqueço os detalhes. Esse é o ponto que eu estava tentando enfatizar: se eu pudesse me lembrar dessas situações excepcionais, não seria tão ruim, mas, como é, sempre me sinto incerto se posso realmente omitir o ponto-e-vírgula - por isso não.
precisa
Hã. Nunca tive uma situação em que perder um ponto e vírgula em Scala me machucasse. Eu nunca os incluo. No entanto, eu também só programei o Scala para coisas do tipo hobby, então talvez ele me morda mais cedo ou mais tarde.
KChaloux
4

Quanto você quer entender os idiomas que você usa? Você quer jogar com seus pontos fortes ou não? A sintaxe do Scala incentiva código claro e conciso; os poucos casos extremos nos quais tirar proveito disso causa problemas para o analisador Scala são instrutivos (ou seja, você aprende mais sobre o Scala encontrando e aprendendo a evitá-los) e gradualmente sendo corrigidos (por exemplo, notação de sufixo ). Usar o ponto-e-vírgula defensivamente pode significar que você nunca precisará aprender sobre esses problemas, mas você realmente vê isso como uma coisa boa? As correções para esses problemas geralmente têm outras implicações, mas você perde essas possibilidades.

Outra consideração é que, como Kilian admite, a maioria dos desenvolvedores Scala omite ponto e vírgula por padrão. Como você espera trabalhar com o código de outras pessoas se você mesmo evitar usar o Scala idiomático? Você vai achar muito mais difícil do que precisa.

Não posso enfatizar o suficiente para que esses recursos do analisador Scala tenham sido escolhidos para incentivar códigos limpos, reutilizáveis ​​e funcionais (no sentido fp). Tome a sintaxe do operador infix como um exemplo; incentiva os desenvolvedores a fornecer às classes métodos simples e de propósito único que se compõem bem. A biblioteca de coleções da Scala mostra exatamente como isso pode funcionar. Desenvolvedores Java treinados classicamente e que adotam isso tendem a desenvolver melhores hábitos e novas maneiras de pensar sobre seu código. Aqueles que mantiverem todos esses pontos e colchetes familiares perderão. Eu afirmo que isso também é verdade para aqueles tímidos demais para abandonar o ponto e vírgula.

itsbruce
fonte
8
-1 Sim, ser "forçado" a aprender a linguagem devido às dicas do compilador ficou fora de moda com o C ++. Além disso, há poucas evidências por trás das afirmações, que eu gostaria de obter uma resposta com um tom tão tendencioso.
Telastyn 27/08/13
(1) O que a @Telastyn disse - se você realmente quer aprender um idioma dessa maneira, adquira um gato, eles adoram sentar nos teclados porque se preocupam com a sua educação. (2) A omissão de ponto-e-vírgula não tem nada a ver com estilo limpo ou incentivá-lo - se houver, a eliminação de ponto-e-vírgula está ocultando o fato de que essas são instruções separadas que são executadas seqüencialmente e possivelmente têm efeitos colaterais. Deixar ponto-e-vírgula em deixa você ciente disso e, portanto, prefere um estilo mais funcional. A decisão é, portanto, puramente sintática (por exemplo, estilo, análise, etc.).
Eli Barzilay
Enquanto o "forçado a aprender o idioma" não voa ", usar o idioma como seus autores pretendem" e "como muitos outros desenvolvedores o utilizam" são pontos de referência importantes. Manter um estilo consistente entre vários desenvolvedores é útil. A partir dessa resposta e da @Killan Foth, os mantenedores e a maioria dos desenvolvedores aparentemente veem o ponto-e-vírgula como estranho.
Sarah Messer