¿Debo usar punto y coma para delimitar las declaraciones de Scala?

9

Estoy acostumbrado a delimitar las declaraciones de un punto y coma de Java, así que, naturalmente, también lo hago en código Scala. También siento que el código es más fácil de leer, porque es evidente dónde termina una declaración y comienza otra. Pero muchas veces cuando publico un fragmento de código Scala en SO, el código se edita solo para eliminar los puntos y comas.

  1. ¿Debo usar punto y coma o no? ¿Hay alguna guía "oficial" o estilo de codificación?
  2. ¿Hay casos en los que se requieren punto y coma, de lo contrario, el código es ambiguo?
Petr Pudlák
fuente
55
¿Haskell no te ha enseñado nada? ; P elimine la sintaxis innecesaria, los puntos y comas solo deben usarse para dividir múltiples cláusulas / declaraciones en la misma línea
Jimmy Hoffa
@JimmyHoffa Haskell me enseñó que la sintaxis debe ser hermosa y consistente :).
Petr Pudlák
2
La primera parte de eso es por qué me molesto cada vez que veo fragmentos de Scala ...
Jimmy Hoffa

Respuestas:

9

No existe una forma oficialmente "correcta" de hacerlo, pero la mayoría de los practicantes omiten el punto y coma siempre que pueden (razón por la cual muchas personas eliminan los puntos y coma por reflejo).

El lenguaje se esfuerza mucho para hacerte olvidar la necesidad de terminar las declaraciones. Desafortunadamente, no tiene mucho éxito, por lo que hay varias situaciones complejas en las que los puntos y comas, o un conjunto adicional de paréntesis, o "pistas" similares son necesarias para evitar semánticas no deseadas. Tales situaciones son casi tan raras que normalmente no tiene que pensar en ellas. Las opiniones difieren sobre si esto significa que debe puntuar defensivamente (eso es lo que creo) o nunca puntuar hasta que tenga problemas (eso es lo que piensa la mayoría de los usuarios). En última instancia, se trata de si te autoidentificas como un renegado o un ciudadano modelo.

Kilian Foth
fuente
Gracias, ¿podrías dar un ejemplo (o algunos :)) de situaciones tan complejas?
Petr Pudlák
3
Tenía miedo de que me preguntaran esto ... La programación en Scala enumera varios de ellos que me sorprendieron, pero no tengo el libro conmigo en este momento, y olvido los detalles. Ese era el punto que estaba tratando de hacer: si pudiera recordar estas situaciones excepcionales, no sería tan malo, pero como siempre, no estoy seguro de si realmente puedo omitir el punto y coma, así que no lo hago.
Kilian Foth
Huh Nunca me he encontrado con una situación en la que perder un punto y coma en Scala me haya lastimado. Yo no los incluyo. Sin embargo, también he programado Scala para cosas de pasatiempo, por lo que tal vez me muerda tarde o temprano.
KChaloux
4

¿Cuánto quieres entender los idiomas que usas? ¿Quieres jugar a sus puntos fuertes o no? La sintaxis de Scala fomenta un código claro y conciso; Los pocos casos extremos en los que aprovechar esto causa problemas para el analizador Scala son instructivos (es decir, aprende más sobre Scala encontrando y aprendiendo cómo evitarlos) y reparándolos gradualmente (por ejemplo, notación de sufijo ). El uso defensivo del punto y coma puede significar que nunca tendrá que aprender sobre estos problemas, pero ¿realmente lo ve como algo bueno? Las soluciones para estos problemas generalmente tienen otras implicaciones, pero perderá estas posibilidades.

Otra consideración es que, como admite Kilian, la mayoría de los desarrolladores de Scala omiten los punto y coma por defecto. ¿Cómo esperas trabajar con el código de otras personas si evitas usar Scala idiomáticamente? Lo encontrarás mucho más difícil de lo necesario.

No puedo enfatizar lo suficiente que estas características del analizador Scala fueron elegidas para fomentar un código limpio, reutilizable y funcional (en el sentido de fp). Tome la sintaxis del operador infijo como ejemplo; alienta a los desarrolladores a proporcionar clases con métodos simples y de un solo propósito que componen bien juntos. La biblioteca de colección de Scala muestra cuán hermosamente puede funcionar. Los desarrolladores de Java con formación clásica que adopten esto tenderán a desarrollar mejores hábitos y nuevas formas de pensar acerca de su código. Los que se adhieren a todos esos puntos y corchetes familiares se lo perderán. Sostengo que esto también es cierto para aquellos demasiado tímidos para abandonar el punto y coma.

itsbruce
fuente
8
-1 sí, ser "forzado" a aprender el lenguaje debido a las compilaciones del compilador pasó de moda con C ++. Además, hay poca evidencia detrás de las afirmaciones, que me gustaría obtener una respuesta con un tono tan sesgado.
Telastyn
(1) Lo que dijo @Telastyn: si realmente quieres aprender un idioma de esta manera, consigue un gato, les encanta sentarse en los teclados porque se preocupan por tu educación. (2) Omitir punto y coma no tiene nada que ver con un estilo limpio o alentarlo; en todo caso, dejar de punto y coma oculta el hecho de que estas son declaraciones separadas que se ejecutan secuencialmente y posiblemente tienen efectos secundarios. Dejar puntos y comas lo hace consciente de eso y, por lo tanto, prefiere un estilo más funcional. Por lo tanto, la decisión es puramente sintáctica (por ejemplo, estilo, análisis, etc.).
Eli Barzilay
Mientras que "forzado a aprender el idioma" no vuela, "usar el lenguaje como lo pretenden sus autores" y "como la mayoría de los otros desarrolladores lo usan" son puntos de referencia importantes. Mantener un estilo consistente entre múltiples desarrolladores es útil. Tanto de esta respuesta como de @Killan Foth, los mantenedores y la mayoría de los desarrolladores aparentemente ven el punto y coma como extraño.
Sarah Messer