2012-09-23 29 views
36

Estoy pensando en migrar a jugar 2.0 después del juego 1.2. Una cosa que me molesta es que la gente dice que Scala es más "preferido" para una aplicación de juego 2.0. Sé que las diferencias en torno a 1,2 y 2,0, pero no estoy seguro si hay diferencias entre el juego 2.0 con Java y toco 2.0 con ScalaJuego 2.0 + Java vs. Play 2.0 + Scala?

Así que hay preguntas en mi mente:

  • ¿hay algo que No puedo hacer java sobre scala en una aplicación Play 2.0?
  • ¿Qué ventajas tengo si comienzo a aprender y uso scala en una aplicación play 2.0?

Respuesta

25

Acabo de terminar un prototipo usando Play 2.0 con Java y ahora estoy considerando aprender Scala solo para poder cambiarlo y seguir desarrollándolo.

No es solo la discusión habitual de Java vs. Scala - el problema, como lo veo con el framework Play, es que obliga a los modismos de Scala a Java. Un ejemplo de la documentación acerca de calling multiple web services:

public static Result feedComments(String feedUrl) { 
    return async(
    WS.url(feedUrl).get().flatMap(
     new Function<WS.Response, Promise<Result>>() { 
     public Promise<Result> apply(WS.Response response) { 
      return WS.url(response.asJson().findPath("commentsUrl").get().map(
      new Function<WS.Response, Result>() { 
       public Result apply(WS.Response response) { 
       return ok("Number of comments: " + response.asJson().findPath("count")); 
       } 
      } 
     ); 
     } 
     } 
    ) 
); 
} 

Funciona, pero no se parece a Java convencional. Esos paréntesis parecen realmente aterradores. Incluso Eclipse se confunde y nunca sabe qué genéricos necesito o quiero usar, siempre tengo que elegirlos manualmente.

También tenga en cuenta que en la documentación hicieron que quedara bien al eliminar las anotaciones @Override, utilizando solo dos espacios para la sangría y en general eligiendo un ejemplo muy simple sin validación o recuperación de errores para que no usen demasiadas líneas. Ni siquiera estoy seguro de que puedas configurar un formateador de código para que salga de esta manera sin dañar completamente otro código.

En la práctica, terminé con un bloque ilegible de una horrible abominación de Java-Scala solo para obtener datos de otro servicio.

Lamentablemente no encuentro ningún ejemplo de combinación de respuestas en Scala. Al menos llamar solo web services in Scala parece mucho más corto y más fácil de leer.

12

AFAIK, es mejor ir con Scala, porque ofrece más funcionalidad.

Por ejemplo (corríjame si me equivoco), puedes usar directamente el Iteratees con Scala (también conocido como programación reactiva), pero no sé cómo lograrlo con Java.

Además, la API de Java de Play es una capa superior en la arquitectura Play, el núcleo está escrito con Scala; así que si quieres apoyarte en lo que sucede dentro, ve con Scala.

Y también tenga en cuenta que puede mezclar Java y Scala en el mismo proyecto Play, para que pueda moverse sin problemas a Scala.

+0

Iteratees ven muy Intresting y el código Scala se ve muy compacto – dreampowder

+0

Por supuesto, Scala es menos detallado que Java :-) También puede echar un vistazo a esto: http://stackoverflow.com/questions/727078/whats-so-great-about-scala –

+3

@dreampowder De hecho, AFAIK, iteratees es probablemente una sola característica que falta en Java versión, otros elementos son muy comparables en ambos idiomas. Entonces, si te sientes más cómodo con Java, puedes quedarte con eso y usar Scala solo para la parte que falta. Si no tiene preferencias ... necesita verificar qué idioma es mejor para usted. – biesior

4

Era nuevo en Play y simplemente escribí un proyecto de pequeño y mediano tamaño con el lado de Java.

Funciona y es potente, pero muchas funciones parecen estar muy centradas en Scala y la compatibilidad con Java es inferior a la normal. El Java API Doc es prácticamente inexistente, lo que le quita un poco de confort en el IDE (IntelliJ, lo recomiendo). La integración en el mundo de Java no es muy "natural" (SBT ..), No se construye como un módulo war o maven (pero parece haber complementos para hacer esto). Pierdes los beneficios de las herramientas de Java existentes.

Los conceptos que diferencian a Play de los otros Frameworks casi todos parecen ser scala native y Java second.

Me tropecé con algunos errores y caprichos y siempre terminaría en el código de Scala que tenía que leer y entender para solucionarlo o solucionarlo. (Acciones, material RequestBody, Async, rutas, implícitos de plantilla, etc.)

Así que el lado Java de las cosas se siente muy secundario para mí, aunque claramente están haciendo un esfuerzo para que sean igual de buenas.

Ahora, después del Proyecto, diría que es muy utilizable e incluso lo usaría de nuevo (en Java).

+2

Sí, parece que cada vez que busco ayuda de Google, siempre obtengo ejemplos en Scala. – djangofan

3

¿Qué ventajas tengo si empiezo a aprender y uso scala en una aplicación de reproducción 2.0?

Como djangofan comentó, cuando busca ayuda en Google, obtiene ejemplos en Scala.

¿Hay algo que no pueda hacer con java sobre scala en una aplicación Play 2.0 ?

Sin embargo, todavía no he (todavía un principiante) encontrado un equivalente de Ebean para Scala. Los ejemplos de Scala que he encontrado utilizan SQL directo para la persistencia. ¿Dónde está la abastraction de la base de datos?

Ya que no he encontrado una abstracción de base de datos para reproducción con Scala, estoy continuando con Java ...

+1

estoy en el mismo camino también. todavía va de java. También han mejorado bastante la documentación de Java desde que hice esta pregunta – dreampowder

+0

El uso de SQL directo es una ventaja si favorece el rendimiento por sobre la conveniencia. – Josef

+1

Eso es como decir que el uso del ensamblador es una ventaja sobre C# si favorece el rendimiento por sobre la conveniencia ... seguro que hay una hora y un lugar, pero no en la codificación general de la aplicación. – GreenAsJade

Cuestiones relacionadas