2010-03-20 19 views
39

(Sí, sé que puedo llamar al código Java de Scala, pero eso no tiene sentido, quiero ELIMINAR el código Java, no mantenerlo y tener que mirarlo y mantenerlo para siempre!)Conversión automatizada de código fuente de Java a Scala?

¿Hay alguna utilidades para convertir fuente Java a fuente Scala?

Creo que teóricamente debería ser posible lograr con una mínima pérdida.

he encontrado esto, pero parece inactivo, probablemente con errores/incompleta ... http://sourceforge.net/projects/java2scala/

alguna alternativa?

+5

Sería un poco cauteloso de la conversión automática, incluso si existe. Una de las mayores ventajas de Scala es la capacidad de expresar sus problemas de codificación de una manera más compacta y comprensible. La conversión automática expresará una solución de estilo Java en la sintaxis de Scala. –

+0

@Rex Kerr - +1, y debe convertir su comentario en una respuesta. Los modismos de Scala son tan radicalmente diferentes de Java que incluso el código de Java bien escrito se convertiría en un código de Scala mal escrito. – kdgregory

+0

@Alex R - No sé cuánto código Java tiene, pero si solo son unas pocas miles de clases, será mejor que lo convierta a mano. Debería poder proceder de manera fragmentada, reemplazando un conjunto de clases a la vez. Y seguramente aprenderá algo sobre Java y Scala en el proceso. – kdgregory

Respuesta

34

IntelliJ un poco, sorta, hace esto. Necesita abrir un proyecto con sus fuentes Java. A continuación, puede copiar/pegar expresiones, métodos o clases completas en un archivo .scala. Esto convierte a código Scala equivalente.

La fidelidad de la conversión no es perfecta y, por esta razón, todavía no es compatible con una conversión masiva.

Recomiendo usar la última versión de IntelliJ y Scala Plugin. La Edición de la Comunidad es gratis.

Aparte de esto, Paul Phillips, una vez iniciado el proyecto Scalify a traducir el código de Java a Scala (o, potencialmente, su idioma preferido), e incluso mejorarla en el proceso! Él explica el concepto en este video. Sin embargo, este esfuerzo se estancó, presumiblemente porque volvió su atención a contribuir directamente al compilador de Scala y la biblioteca estándar.

+10

Excelente. Voy a probar IntelliJ en breve. No puedo creer que haya gente que piense que incluso las cosas triviales como convertir corchetes entre corchetes y mover las declaraciones de tipo al otro lado de un ':' ¡deben hacerse a mano! No deben ser serios :-) –

+2

Impresionante. Muy feliz con esta característica IntelliJ. – laher

+2

Esta es una bifurcación disponible del proyecto Scalify de Paul Phillips (parece que ya no se mantiene): https://github.com/mbana/scalify También, está http://javatoscala.com. –

2

No creo que sea posible convertir automáticamente Java a Scala en el caso general. Muchas de las construcciones de nivel inferior en Java no existen en Scala (por ejemplo, campos y miembros estáticos), Scala impone limitaciones a los constructores que no existen en Java, y Scala no tiene tipos crudos como Java (genéricos sin el parámetros genéricos especificados).

+2

Existen campos y miembros estáticos. Puede crear fácilmente un objeto si encuentra un campo estático, etc. Para los genéricos sin un parámetro especificado, siempre puede usar Cualquiera en Scala. Es absolutamente posible (si no trivial) convertir Java a Scala. Especialmente dado que ambos lenguajes se ejecutan en la JVM, no tiene ningún problema en cuanto a las funciones, ya que incluso puede acceder a la biblioteca estándar de Java. Y ambos idiomas están tipados estáticamente. Para concluir, si quieres convertir el lenguaje A a B, Java a Scala es uno de los casos más fáciles que podrías elegir. –

+4

Existen "equivalentes lógicos" pero no son en absoluto iguales, por lo que la traducción es aproximada. Una traducción ingenua puede funcionar para ejemplos triviales pero se romperá para código complejo. –

+0

Parece que al revés (de Scala a Java) no es posible http://stackoverflow.com/q/9880805/243233 – Jus12

24

En theres IntelliJ IDEA es una refactorización llamado "Convertir a Scala". Está en el menú Refactor (después de instalar el complemento Scala) Ctrl + Shift + G. Así que no es necesario jugar con copiar/pegar.

Solo asegúrese de tener un archivo java abierto, no existe esta opción si se trata de una scala u otro archivo.

+0

No veo esta opción en IDEA 10.5. 1 con el complemento Scala 0.4.1338. –

+1

Seleccione cualquier clase de Java o ábrala en el editor y este elemento del menú debería aparecer (probado en IDEA 10.5.1) –

+0

. Tampoco veo esta opción con 11.1 edición de comunidad y el complemento de Scala 0.5.808. – devth

14

Acabo de publicar la siguiente herramienta: Scalagen. Probé con Jatran también, pero estaba frustrado con algunos errores y una integración difícil. Scalagen es extensible y viene con un plugin Maven.

+1

Eso se ve bien, pero ¿hay alguna forma de ejecutarlo en un proyecto que no utiliza Maven? –

+0

Puede ejecutar el código scala, por supuesto, directamente, el plugin Maven es solo una envoltura delgada. –

+0

En cuanto a su clase de mojo, está utilizando 'Converter.instance(). Convert (in, out);'. No veo un arnés principal alrededor de eso en tu código. Al ejecutar el código scala directamente ¿quiere decir algo para convertir específicamente mi proyecto o hay una forma integrada de hacerlo? –

Cuestiones relacionadas