Ceylon: Interoperabilidad con Java
Ceylon nos permite la interoperabilidad con Java, podemos importar sus librerías e integrarlas a nuestro código. En este post haremos un ejemplo de como importar librerías de Java a nuestro código Ceylon.
En este caso no usaremos ningún IDE, usaremos la consola de comandos (en mi caso uso Linux). Crearemos una estructura de directorios similar a esta:
Tendremos estos tres archivos con la extensión *.ceylon:
- run.ceylon
- module.ceylon
- package.ceylon
Dentro de cada archivo escribiremos:
run.ceylon
print("Importando librerias de Java en Ceylon");
}
module.ceylon
import java.base "7"; // se debe tener instalada la versión 7 del JDK
}
package.ceylon
shared package holaCeylon;
Ahora volvemos al archivo run.ceylon e importamos la librería java.util.HashMap de Java.
run.ceylon
shared void run(){
print("Importando librerias de Java en Ceylon");
value romanos = HashMap<String,Integer>();
romanos.put("I", 1);
romanos.put("V", 5);
romanos.put("X", 10);
romanos.put("L", 50);
romanos.put("C", 100);
romanos.put("D", 500);
romanos.put("M", 1000);
print(romanos.values());
}
Compilamos:
Cuando compilamos se crea un directorio más o menos así:
Ejecutamos: ceylon run holaCeylon/1.0.0
- Sr. Negativo's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Archivos
Una explicación rápida de esos archivos:
El car es un Ceylon ARchive (así como un jar es un Java ARchive). Ahí vienen los .class y algunos metadatos para la carga de módulos en tiempo de ejecución.
El src es un zip con los fuentes de tu módulo.
El car.idx y car.index son creo que para OSGi.
Los sha1 son los checksums con SHA-1 de los demás archivos.
Que usaron para modularizar ?
Entonces Ceylon utiliza OSGi para modularizar o solo es compatible con OSGi ?
compatible
Es compatible con OSGi. Y también con Maven. Pero el sistema de módulos de Ceylon se implementa con JBoss Modules.
gracias por la explicación
Gracias por la explicación de esos archivos @ezamudio.
por cierto
El esquema que usamos para importar módulos de Java es ya con los nombres propuestos para Jigsaw. Es decir java.base solamente te trae lo más básico de Java, sin base de datos ni parsers de XML ni interfaces gráficas, etc.
Aquí hay más info al respecto:
http://ceylon-lang.org/documentation/1.1/reference/interoperability/java...
package.desktop
Buen tip. Ya empecé a probar algunas cosas más.
module.ceylon
import java.base "7";
import java.desktop "7";//incluye a javax.swing
}
package.ceylon
run.ceylon
shared void run(){
value c=Calculo();
String? opc=JOptionPane.showInputDialog("\t1. Calcular grados Fahrenheit\n2. Calcular grados Celsius\nSalir (cualquier tecla)");
if(exists opc){
value opc_=opc;
switch (opc)
case ("1") {
Float? numero=parseFloat(JOptionPane.showInputDialog("Introduce grado Celsius"));
if(exists numero){
value numero_=numero;
JOptionPane.showMessageDialog(null,"Celsius: ``c.fahrenheit(numero)``");
}
}
case ("2") {
Float? numero=parseFloat(JOptionPane.showInputDialog("Introduce grado Fahrenheit"));
if(exists numero){
value numero_=numero;
JOptionPane.showMessageDialog(null,"Celsius: ``c.celsius(numero)``");
}
}
else {
process.exit(0);
}
}
}
class Calculo(){
shared Float celsius(Float fahr){
return (fahr - 32) / 1.8;
}
shared Float fahrenheit(Float cels){
return (1.8 * cels) + 32;
}
}