¿Cuándo deberíamos elegir Scala sobre Java / C # o cualquier otro lenguaje de programación imperativo?

Yo diría que la mayoría de las empresas se beneficiarían al elegir Scala en lugar de Java / C #, porque esto las hará más productivas y les permitirá escribir código más fácil de mantener. Sin embargo, hay varias situaciones en las que elegir Scala no tiene mucho sentido.

Por ejemplo, si desea escribir una aplicación de Windows, y su equipo está compuesto principalmente por desarrolladores de C #, entonces probablemente deba apegarse a .NET y cosas como WinForms o WPF (algunos argumentarán que Electron será una mejor opción). Del mismo modo, las empresas que dependen en gran medida de las API heredadas escritas para versiones anteriores de Java no se beneficiarán mucho al escribir aplicaciones en Scala.

Otro ejemplo es cuando necesita escribir una gran cantidad de código de bajo nivel y, por alguna razón, debe hacerlo en la JVM. En este caso, Java es una mejor opción, porque puede escribir código que tenga un rendimiento de GC muy predecible, algo que es más difícil de lograr en Scala debido a su naturaleza de nivel superior.

Y, por último, si ya tiene una aplicación escrita que consta de 1M + líneas de código Java, reescribirla en Scala no tendrá sentido desde el punto de vista empresarial. Pero en este caso, en realidad no tienes una “opción”.

Yo creo que

  • Cuando quieras hacerlo, y
  • Son capaces de hacerlo

Puedes construir la mayoría de las aplicaciones en la mayoría de los idiomas

En el mundo comercial, no siempre eran libres de elegir

  • Código existente Eso prácticamente garantiza que continúes en su idioma
  • Bibliotecas disponibles Estas dirigen una elección
  • Contratación Si necesita un equipo, necesita poder encontrar personas con habilidades lingüísticas
  • Política A veces, la decisión no es tuya

Pero cuando ninguno de estos se aplique, elija un idioma capaz con el que se sienta cómodo

Scala es ciertamente muy capaz

Hay dos factores que intervienen en una decisión como esta:

  • ¿Con qué se siente cómodo / dispuesto a hacer el equipo?
  • ¿A qué entorno se dirigirá?

Si el equipo tiene un historial completamente imperativo, puedes hacer la transición, pero será difícil. Si puede lograr que todos respalden la idea, y todos saben y aceptan que esto requerirá aprender a hacer las cosas de una manera radicalmente diferente, ¡adelante!

Si el equipo tiene antecedentes funcionales, probablemente estén presionando por el idioma de su elección, y si parece que está convergiendo en Scala, realmente no hay ninguna razón para negarles su elección.

Si el entorno al que se dirige es la JVM, prefiera Scala, a menos que el equipo lo haga inviable. Scala tiene menos placa de caldera que Java, y menos restricciones arbitrarias (como 1 clase de nivel superior por archivo) que le permitirán moverse más rápido. Como anécdota, es un placer programar en Scala, pero encuentro considerablemente menos alegría trabajando en Java.

No estoy tan familiarizado con las capacidades de C #, así que lo dejaré para otras respuestas.

Scala promete hacer que el software de escritura sea más escalable. Ofrece un sistema de tipo sofisticado. Scala proporciona una sintaxis más limpia y la capacidad de escribir código más conciso. Scala es multi-paradigma, y ​​admite programación funcional y orientada a objetos.

Si estas cualidades te atraen, entonces puedes elegir Scala. Pero Scala también tiene desventajas. Es un lenguaje mucho más complejo de aprender. Su complejidad conduce a tiempos de compilación extraordinariamente largos. Es fácil abusar del lenguaje para escribir un código incomprensible.

Francamente, me quedaría con Java (especialmente Java 8) o C #.

En primer lugar, Scala es un lenguaje imperativo. Su modelo de cálculo es más o menos la misma ejecución de comandos secuenciales con memoria direccionable lineal.

Lo que es más agradable en Scala es:

* La sintaxis es extensible (consulte Combinadores de analizador), por lo que puede escribir un buen DSL (lenguaje específico de dominio) para cualquier tipo de tarea y expresar su solución de la manera más elegante y clara.

* En consecuencia, la cantidad de código repetitivo (código que no expresa ideas) se reduce al mínimo

* El sistema de tipos tiene muchas características que permiten muchos tipos de comprobaciones en tiempo de compilación (por ejemplo, el uso de la opción evita excepciones de puntero nulo, etc.)

Use Scala sobre Java generalmente en el lado del servidor. Casi todo lo que quieras escribir será más agradable en Scala. Scala podría no estar listo para Android todavía (consumo de memoria). En el lado de Microsoft, creo que probablemente sea mejor que te quedes con lenguajes compatibles con MS como C #. Si está realmente entusiasmado con la programación funcional, pruebe F #.

cuando los desarrolladores son buenos programadores de fp. confía en mí, no quieres trabajar con programadores que no logran torcer su mente OO en escala.