Programando en Ceylon y PSeInt
Existe una herramienta para aprender a programar llamada PSeInt, en esta ocasión vamos a realizar ejemplos de programación básica y comparando esos códigos en Ceylon.
Ejemplos
1. Se requiere obtener la talla de una persona sabiendo que su peso es de 54.5 kg y su índice de masa corporal es de 22.1.
Fórmulas:
imc=peso/(talla*talla)
peso=(talla*talla)*imc
talla=sqrt(peso/imc)
Usando PSeInt escribimos:
Ahora en Ceylon:
obtenerTalla.ceylon
Compilamos y ejecutamos:
2. Obtener un bono de ventas, teniendo en cuenta que el objetivo (de ventas) debe ser igual o mayor a 300.
Y obtenemos:
En Ceylon:
obtenerBono.ceylon
Compilamos y ejecutamos:
3. Un menú para elegir una película. Si es mayor de edad permitirá mostrar el menú.
Código:
Definir opc Como Entero;
Definir edad Como Entero;
Definir permiso Como Logico;
Definir aviso Como Caracter;
aviso="";
Escribir "¿Cuantos años tienes?";
Leer edad;
Si edad>=18 Entonces
permiso=Verdadero;
Sino
permiso=Falso;
Fin Si
Si permiso Entonces
Escribir "Cartelera Cine de Terror";
Escribir "1. Masacre en Texas";
Escribir "2. La isla de la bruja";
Escribir "3. El misterio del valle de las sombras";
Escribir "Elije una: ";
Leer opc;
Segun opc Hacer
1:
aviso="Debes traer ropa interior de sobra ... no es broma";
2:
aviso="Aceptable, si no quieres dormir varios días";
3:
aviso="Una opción bastante recomendable... para ir al psiquiatra";
De Otro Modo:
aviso="Esa opcion es invalida";
Fin Segun
FinSi
Escribir aviso;
FinProceso
Obtenemos:
Ahora en Ceylon:
variable String aviso="";
variable Boolean permiso=false;
print("Cuantos años tienes?");
String edadStr=process.readLine();
Integer? _edad=parseInteger(edadStr);
if(exists _edad){
Integer edad=_edad;
if(edad>=18){
permiso=true;
}else{
permiso=false;
}
}
if(permiso){
print("Cartelera Cine de Terror");
print("1. Masacre en Texas");
print("2. La isla de la bruja");
print("3. El misterio del valle de las sombras");
print("Elije una: ");
String opcStr=process.readLine();
Integer? _opc=parseInteger(opcStr);
if(exists _opc){
Integer opcion=_opc;
switch(opcion)
case (1){aviso="Debes traer ropa interior de sobra ... no es broma";}
case (2){aviso="Aceptable, si no quieres dormir varios días";}
case (3){aviso="Una opción bastante recomendable... para ir al psiquiatra";}
else{aviso="Esa opcion es invalida";}
}
}
print("``aviso``");
}
Compilamos y ejecutamos:
- Sr. Negativo's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Ceylon
Hola, me da gusto siempre ver que haya posts aportando contenido y no solamente haciendo preguntas... sobre todo si el contenido incluye algo de Ceylon.
Solamente hay algo que me saltó a la vista en tu código: anotaste todo como variable, pero no modificas los valores. Y a todo le pusiste tipo, lo cual pues no está mal, hace el código más legible, pero puedes usar la inferencia de tipos (que solamente funciona a nivel local, de modo que no se complica mucho la lectura). Recuerda que es preferible tener inmutabilidad, a menos que necesites que algo sea mutable. Entonces por ejemplo tu primer ejemplo puede quedar así:
value peso=54.5;
value imc=22.1;
function sqrt(Float x) => x^0.5; //para obtener la raíz
value talla=sqrt(peso/imc);
print("talla: ``talla`` ");
}
El segundo quedaría así:
value ventas=320;
value objetivo=300;
String mensaje; //no se asigna aún
Float bono; //no se asigna aún, por tanto sí hay que ponerle tipo
if(ventas>=objetivo){
bono=0.045*(ventas-objetivo);
mensaje="Exito";
}else{
bono=0.0;
mensaje="Fracaso";
}
print(" ``mensaje`` , bono obtenido: ``bono`` ");
}
El último ejemplo está interesante porque hay muchas maneras de resolverlo y sirve para mostrar distintos estilos y práticas recomendables. En este caso sí me gustaría mostrar una versión bastante distinta, haciendo enfoque en la separación de responsabilidades:
print("Cuantos años tienes?");
value edadStr=process.readLine();
return parseInteger(edadStr);
}
Boolean tienePermiso() {
if (exists edad = pedirEdad()) {
return edad >= 18;
}
return false;
}
String menu() {
print("Cartelera Cine de Terror");
print("1. Masacre en Texas");
print("2. La isla de la bruja");
print("3. El misterio del valle de las sombras");
print("Elije una: ");
while (true) {
String opcStr=process.readLine();
if(exists opcion=parseInteger(opcStr)){
switch(opcion)
case (1){ return "Debes traer ropa interior de sobra ... no es broma";}
case (2){ return "Aceptable, si no quieres dormir varios días";}
case (3){ return "Una opción bastante recomendable... para ir al psiquiatra";}
else {
print("Esa opcion es invalida");
}
} else {
print("Debes ingresar una opción del 1 al 3.");
}
}
void run(){
value permiso = tienePermiso();
if(permiso){
print(menu());
} else {
print("No tienes permiso de ir al cine, niño.");
}
}
Todavía se podría separar más, encapsulando el código que captura la entrada del usuario y devuelve la opción elegida.
Re:Ceylon
El código del menú que escribiste es más legible y se entiende mejor, gracias.