Ceylon 1.1

Hoy liberamos la versión 1.1 de Ceylon:

http://ceylon-lang.org/blog/2014/10/09/ceylon-1/

Después de 10 meses de arduo trabajo, esta versión contiene una gran cantidad de correcciones (más de mil issues procesados), mejoras y optimizaciones, incluyendo:

  • Optimizaciones en ambos compiladores para reducir tiempos de compilación
  • Optimizaciones al IDE, para tener mejores tiempos de respuesta
  • Optimizaciones al código generado para un mejor desempeño del código ejecutable
  • Varios módulos nuevos en el SDK
  • Integración con vert.x
  • Interfaces dinámicas para el backend de JavaScript, de modo que se puedan asignar tipos estáticos a estructuras que cumplan con las características definidas en los mismos

Espero que lo prueben pronto, y nos den su opinión y comentarios.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Felicidades!

Es un orgullo tener a un Mexicano en el grupo de desarrollo de Ceylon.

Saludos!

Imagen de Sr. Negativo

Con la nueva versión ¿Cómo introduzco valores enteros?

Escribo esto y funciona bien:

shared void run(){
  print("Introduce un nombre:");
  value nombreStr=process.readLine();

  if(exists nombreStr){
    String nombre=nombreStr;
    print("Hola ``nombre``");
  }
}

Ahora si trato de escribir un dato de tipo entero:

shared void run(){
  print("Introduce edad:");
  value edadStr=process.readLine();
  if(exists edadStr){
// esto funciona:
//print("Tienes ``edadStr`` años de edad");
//pero si quiero pasarlo a Integer manda un error
    Integer edad=parseInteger(edadStr); // aqui le pongo value, Integer y/o Integer?
    print("Tienes ``edad`` años de edad");
  }
}

Error:

error: specified expression must be assignable to declared type of 'edad': 'Integer?' is not assignable to 'Integer'
Imagen de ezamudio

parseInteger

parseInteger es una función de tipo Integer?, porque puede devolver null si no puede convertir los datos de entrada en un entero. Y no puedes interpolar nulos en las cadenas, de modo que tienes que hacer algo como "Tienes ``edad else -1`` años de edad", o bien refactoring a ese código para que sea así:

if (exists edad=parseInteger(edadStr)) {
  print("Tienes ``edad`` años de edad");
} else {
  print("Escribiste un número inválido.");
}
Imagen de Sr. Negativo

Funciona parseInteger

Ya funciona :D !!

shared void run(){
  print("Introduce edad:");
  value edadStr=process.readLine();
if (exists edadStr) {
   //intentar pasar a Integer
   try{
    Integer? edad=parseInteger(edadStr);
    print("Tienes ``edad else -1`` años de edad");
   }catch(Exception ex){
     print(ex.message);
   }

}

}