He notado que la compatibilidad con IDE no es tan buena, pero el lenguaje en sí admite expresiones de programación funcional mucho más limpiamente.
programming-languages
java
language-design
scala
Richard Warburton
fuente
fuente
Respuestas:
He estado programando Scala durante más de un año, así que intentaré retrasarme un año para responder esta pregunta.
Los puntos anteriores eran más o menos lo que pensaba de Scala antes de comenzar a aprenderlo.
En el transcurso de un año, esto es lo que descubrí:
fuente
Bueno, creo que Scala es demasiado complejo. Se siente como C ++ en el sentido de que tiene una gran variedad de formas diferentes de hacer las cosas. Algunos llamarían a esto "riqueza", "expresividad" o "poder", pero su kilometraje puede variar. En muchos proyectos del mundo real, tendrías que limitar artificialmente qué características del lenguaje vas a usar y qué no, para que todos los desarrolladores involucrados puedan hablar el mismo subconjunto del idioma.
Para la programación funcional, prefiero Clojure , que es mucho más simple que Scala.
Que comience la guerra santa ;-)
fuente
Hace aproximadamente un año, a medida que me frustraba cada vez más el futuro de los productos de mi startup si continuaba usando Java, decidí probar Scala. Ya estaba programando en JavaScript y Python en ese momento, Ruby también era una buena alternativa, pero estaba buscando un lenguaje de tipo estático, preferiblemente uno que pudiera ejecutarse en la JVM.
Realmente intenté que me gustara Scala, realmente lo hice, pero encontré que su código es completamente feo y difícil de entender. Me pregunté drásticamente que si Scala era nuestra mejor respuesta a Java, entonces seguramente estaba jodido y sentenciado a seguir trabajando con un lenguaje que no me gustaba después de todo ...
Afortunadamente, no mucho después, descubrí Fantom . Oh hombre, ¿me encantó? ¡Para mí, fue como la respuesta esplendorosa de los estadounidenses a la burocracia alemana! Se ajustaba a los requisitos que buscaba en Scala, pero con mucha más elegancia . Tenía la integración de Vim , Eclipse y Netbeans , un buen marco web , productos maduros que se ejecutan con él, una comunidad pequeña pero increíblemente útil ... ¡Escritura dinámica y estática! Me alegré!
(Podría continuar, pero esta publicación está destinada a Scala, no a Fantom, así que me detengo aquí. Mi preferencia es clara , sin embargo, hay una publicación que compara los dos. Nunca pude entender por qué Fantom recibe tan poca atención en comparación con Scala. Pero aparentemente no soy el único, si escuchas este podcast [ mp3 ] hasta el final).
fuente
Cuando inicialmente incursioné en Scala hace 2 años, me pareció extraño e intimidante. En algún momento descubrí que el lenguaje central es en realidad mucho más simple que Java, pero su sintaxis y semántica son tan flexibles que puede crear nuevas construcciones de lenguaje como esta, incluso sin una función de macro. Desde entonces, he cambiado completamente a Scala para todos mis proyectos Java, porque me permite escribir sin demasiado código repetitivo.
Me gusta Clojure, pero hay situaciones en las que la plataforma necesita que compiles un código de bytes estático (Android, applets, ...) y, aunque puedes hacerlo, en Scala, está ahí.
Si bien Scala le permite resolver muchos problemas de manera funcional, a menudo encuentro problemas en los que usar las clases se siente más natural. Eso hace que las cosas sean un poco más complejas, pero no se acerca a las complejidades y dolores de C ++.
Lo más importante para mí cuando realmente comencé a aprender el lenguaje fue que podía programar lo mismo que hice en Java, solo sin el ruido (un poco como cuando comienzas Groovy), pero eventualmente quieres intentar sumergirte más profundamente en el poder del lenguaje, crece contigo.
Acerca de la pregunta IDE: Después de usar Emacs para todo, todos mis problemas IDE desaparecieron :-)
fuente
Me gusta Scala por muchas razones, pero hay una que a menudo se pasa por alto: su simplicidad.
Puede que Scala no sea tan simple como, por ejemplo, Oberon, pero es bastante más simple que algunos otros idiomas. La especificación del lenguaje Scala es ~ 160 páginas, la especificación del lenguaje Java es ~ 600 (¡solo el idioma, no la JVM o las bibliotecas!), La especificación del lenguaje ECMA-334 C # (que AFAIK corresponde a un subconjunto de Visual C # 2.0) es ~ 440 páginas (esto no incluye cosas como comprensiones de consultas LINQ, expresiones lambda, métodos de extensión, covarianza y contravarianza genéricas
dynamic
, argumentos opcionales con valores predeterminados, argumentos de palabras clave,var
). Incluso el borrador actual para ECMAScript 5.1 es más grande en ~ 210 páginas. Y, por supuesto, mi propio lenguaje "predeterminado", Ruby, cuyo borrador ISO actual pesa ~ 310 páginas, que solo especifican un subconjunto casi inutilizable de la intersección de Ruby 1.8.6, 1.9.1 y 1.9.2.fuente
Esto es lo que apesta de Scala:
Para empezar, el puntero nulo era una muy mala idea. Hoare lo llamó su "error de mil millones de dólares", pero Scala es aún peor. Tiene objetos llamados nulo, nulo, ninguno y nulo. nulo es para la interoperabilidad con Java. Nulo es el puntero nulo de la especificación W3C DOM, Ninguno es con lo que debería haberse reemplazado nulo, y Nulo es algo vacío.
Cuando las construcciones del lenguaje resultan ser extravagantes, generalmente el culpable es el programador y no el lenguaje. En Scala, sin embargo, el lenguaje central ya contiene clases de biblioteca cuyo único comportamiento documentado es "Esto es un hack". No lo creo Busque el scaladoc para scala.xml.Group.
Por último, no menos importante, Scala está mal documentada. Casi ninguna de las clases scala en la documentación oficial viene con código de ejemplo. Scala es significativamente más difícil de aprender que Java y requiere un profundo conocimiento en informática.
Para evitar ser confundido con un enemigo de Scala, esto es lo que me encanta:
fuente
null
es el puntero nulo de Java,Null
es el "tipo" de él.None
es un posible "estado" deOption[T]
, una colección con uno o cero elementos.Nil
Es una lista vacía. Si bien quieres que suene aterrador, no lo es. Esos tipos no son reemplazables o intercambiables entre sí y se comportan exactamente como deberían.Scala es complejo. ¡No hay forma de evitarlo! Su sintaxis es extremadamente flexible y se puede personalizar de muchas maneras (sobre todo operadores / notación de infijo), y el sistema de tipos tiene más características diferentes que cualquier otro idioma que conozco.
Entonces, las cosas no son tan claras como, por ejemplo, en Haskell: Clases de tipos para cubrirlas todas.
A medida que Scala intenta reunir programación funcional, OO, programación de procedimientos y bibliotecas de Java, así como ideas propias, finalmente terminamos con muchos conceptos que de alguna manera parecen ir "en la misma dirección":
Elegir entre ellos parece difícil al principio y uno podría preguntarse fácilmente si ha encontrado la solución correcta para algún problema. Incluso es fácilmente posible producir cosas hacky mediante el abuso de
implicit
s.Pero lo interesante es: Scala funciona. A veces es difícil entender por qué (especialmente descubrir qué conversiones implícitas + herencia + ... algún objeto tiene funcionalidad
X
), pero no tiene que preocuparse por eso la mayoría de las veces.Escriba Scala lo más sencillo posible y funcionará. No se confunda con todo lo que sea posible y solo use lo que necesita. Y si necesita algo, puede estar seguro de que de alguna manera Scala lo tiene;)
Y cuanto mejor consiga, más podrá personalizar Scala con operadores, implicaciones, mónadas, sintaxis original ... y finalmente obtendrá algo parecido a un DSL que resolverá perfectamente su problema.
Después de todo, siempre tiene la posibilidad de usar Scala como un Java mucho mejor con una sintaxis más limpia, más fácil, inferencia de tipos y algunas características funcionales.
fuente
Es un lenguaje excelente que es más simple que Java en muchos sentidos.
A la mayoría de la gente no le gustará, programador de Java o no, por las mismas razones que a la mayoría de las personas, programadores o no, no les gusta aprender nuevos lenguajes de programación. Sospecho que a la mayoría de las personas que aprendieron un lenguaje de programación ni siquiera les gustó aprender eso.
Si le preocupa que un lenguaje sea tan complicado como C ++, evitaría Clojure como la peste. Quejarse de que Scala es más complicado que Clojure se ha convertido en el argumento alternativo para las personas que ignoran por completo uno o ambos idiomas.
Clojure tiene macros, lo que significa que puede alterar la sintaxis del lenguaje tanto como lo desee, brindándole no solo "una miríada de formas diferentes de hacer las cosas" sino un número casi infinito de formas de hacer las cosas. Y ninguna de esta nueva sintaxis que los programadores están creando con las macros se documentará en ninguna parte de la especificación del lenguaje.
"Pero podemos evitar el uso de macros o regular cuáles están permitidos en nuestro código", dice. Felicitaciones, ahora tienes que "limitar artificialmente qué características del lenguaje vas a usar y qué no", que es exactamente lo que los idiotas que usan Clojure of Scala usaron como razón para evitar Scala.
fuente
Realmente me gustan los tipos más granulares de la biblioteca Scala. Parece que la nueva biblioteca de colecciones estaba bien pensada. También me gusta cómo reduce la cantidad de código requerida para las clases simples y los conceptos funcionales que agrega. Su inferencia de tipos también es muy útil. Se siente como Java sin las ruedas de entrenamiento. Después de usar C # por un tiempo, Scala realmente se siente como un competidor, con Java aún útil pero quedando atrás.
fuente
Como programador de Java, inicialmente encontré Scala interesante. Sin embargo, después de incursionar en ello por un tiempo (y encontrarme con casi todos los aspectos positivos / negativos ya mencionados por otros), me sentí muy "meh" hacia eso. Las mejoras en el lenguaje se compensan con la menor disponibilidad de conjuntos de herramientas. Simplemente no pude encontrar ninguna razón definitoria para cambiar. Es bueno, pero no es "lo suficientemente mejor" para justificar el cambio. Tampoco tiene ese factor de emoción subjetiva (como parece que Clojure).
fuente