sábado, 30 de noviembre de 2013

Scala ... ejemplos sencillos no. 5

Herencia y clase abstracta en Scala

Herencia: Es la propiedad que permite definir nuevas clases a partir de clases base ya existentes.

Las clases abstractas nos ayudan a representar objetos generales de un objeto,es decir, sus propiedades comunes. Como puede ser el nombre, el tamaño, el tipo, etc.

Las clases abstractas no pueden ser instanciadas. Solo las clases que extienden de ella.


En este ejemplo se define una clase base llamada Vehiculo y una clase hija llamada Moto. La clase Vehiculo tendra las siguientes características:
  • marca
  • tipo y
  • color
A su vez la clase hija tendrá solo una característica: tamaño


[Sintaxis]
class ClaseHija extends ClaseBase{ ... }

Definimos la clase Vehiculo:
abstract class Vehiculo(val _marcax:String=null,val _tipox:String=null,val _colorx:String=null){

  private var _marca:String=_marcax
  private var _tipo:String=_tipox
  private var _color:String=_colorx
 
  //getter 
  def marca = _marca
  //setter 
  def marca_= (value:String):Unit = _marca = value
 
  def tipo=_tipo
  def tipo_=(value:String):Unit=_tipo=value
 
  def color=_color
  def color_=(value:String):Unit=_color=value
 
  def getInfo():String={"marca: "+_marca+" ,tipo: "+_tipo+" , color: "+_color}
 
}


Definimos la clase Moto:

class Moto(override val _marcax:String,override val _tipox:String,override val _colorx:String,val _tamanyox:String=null) extends Vehiculo(_marcax,_colorx,_tipox){

  private var _tamanyo:String=_tamanyox
 
  def tamanyo = _tamanyo
  def tamanyo_= (value:String):Unit = _tamanyo = value
 
  override def getInfo():String={super.getInfo+" ,tamaño: "+_tamanyo}
}

Como se puede ver esto es  similar a Java.  La clase base y la clase hija tendrán código en común. Por último creamos la instancia de la clase Moto:

object Codemonkey extends App{
  val moto=new Moto("Toyota","rojo","sencilla","pequeña")
  println(moto.getInfo)
}

Código: http://www.pasteall.org/47735/java



lunes, 18 de noviembre de 2013

Scala ... ejemplos sencillos no. 4

Si tuviera que escribir código sería con un lenguaje de programación que tuviera soporte, una comunidad y documentación adecuada.

Ningún lenguaje es perfecto es cierto, Scala puede parecer bastante complejo de aprender en un principio.

Empiezas a conocer Java y la programación orientada a objetos y de repente aparece este lenguaje extraño, que pretende unir dos paradigmas:

  • La programación funcional y
  • La programación orienta a objetos
Al igual que otros lenguajes dependientes de la JVM Scala (Ceylon, Groovy, etc.)tiene el objetivo de tomar lo mejor de Java y olvidarse de lo malo

Lo que llama la atención es que podemos utilizarlo sin necesidad de abandonar Java. Reutilizar código hecho en ese lenguaje en nuevos desarrollos.

1. Crear un menú para realizar operaciones de suma, resta, multiplicación y división:

object Codemonkey extends App{
 
  println("Introduce primer numero: ")
  var num1=readInt
  println("Introduce segundo número:")
  var num2=readInt
 
  while(true){ 
    var opcion=Menu.menu

   opcion match {
   case 1   => println("suma: "+Menu.suma(num1,num2))
   case 2   => println("resta: "+Menu.resta(num1,num2))
   case 3    => println("producto: "+Menu.producto(num1,num2))
   case 4 => println("division: "+Menu.division(num1,num2))
   case 5 => Menu.salida
}
   
   
  }//fin while
 
} //fin CodeMonkey

object Menu{
 
  def menu:Int={
    var opc:Int=0
    println("\tMenu")
    println("1. Suma")
    println("2. Resta")
    println("3. Producto")
    println("4. División")
    println("5. Salir")

   do{
    println("Elije una opción: ")
    opc=readInt()
   }while(opc <0 || opc >5)

    return opc
  }//fin función menu
 
  def suma(n1:Int,n2:Int)={n1+n2}
 
  def resta(n1:Int,n2:Int)={n1-n2}
 
  def producto(n1:Int,n2:Int)={n1*n2}
 
  def division(n1:Int,n2:Int):Double={n1/n2}
 
  def salida={System.exit(0)}
 
}//fin object Menu

Links
http://www.javamexico.org/categorias/lenguajes_jvm/scala
https://github.com/Sergey80/scala-samples
http://scalatutorials.com/

sábado, 16 de noviembre de 2013

Scala ... ejemplos sencillos no. 3

Más ejemplos de código en Scala

1. Ejecutar un comando (Linux) desde una aplicación en Scala (Ejecuta.scala)

import scala.sys.process._

object Ejecuta extends App{
    "ls -la"!
}

Este código nos mostrara el contenido del directorio en el que estemos.

2. Guardar el resultado de la ejecución de un comando (Guarda.scala)
//"esto es un comentario en Scala"
import scala.sys.process._

object Guarda extends App{
   val comando:String="ls -la"
  val res=comando!!
 
  Console.print("resultado: "+res.toString)
}

Guardamos el resultado del comando en la variable "res" y visualizamos su contenido.


3. Uso de package en Scala (Paquete.scala)

object Paquete extends App{
     val  hombre=new bunbury.calamaro.loquillo
     hombre.ver


package bunbury{
       package calamaro{
         package loquillo{
           class HombreDeNegro{
               private var nombre:String="Hugo"
               def ver(){
                Console.println("hola "+nombre);
            }
        }//fin HombreDeNegro
       }//fin loquillo
  }//fin calamaro
}//fin bunbury


4. Uso de if - else  (Elegir.scala)

object Elegir extends App{
   val cadena=if (3==6) "Es correcto" else "Es incorrecto"
    Console.print(cad) // imprime "Es incorrecto"


    val resultado={
    if(3==8)
      "Esto no se vera"

    else
      "Esto si se vera"
   }

   Console.println(resultado);
}





5. Ver propiedades del sistema (Sistema.scala)

object Sistema extends App{

val obj=new InfoCompu()

println("Nombre del PC: " + obj.nombrePC());
println("Nombre usuario: " + obj.usuario());
println("Procesador: " + obj.procesador());
println("Sistema operativo: " + obj.SO());
println("Version JDK: " + obj.JDK());
println("Directorio actual: " + obj.dir());

}

class InfoCompu{

def nombrePC():String={
  System.getenv("COMPUTERNAME");
}

def usuario():String={
 System.getProperty("user.name");
}

def procesador():String={
 System.getenv("PROCESSOR_IDENTIFIER");
}

def SO():String={
 System.getProperty("os.name");
}

def JDK():String={
 System.getProperty("java.version");
}

def dir():String={
 System.getProperty("user.dir");
}

}


sábado, 2 de noviembre de 2013

Programando en Perl ... no. 5

Sencillo convertidor de temperaturas web en Perl

En esta ocasión vamos a crear un convertidor de temperaturas fahrenheit y celsius en Perl.

¿Qué necesito para crear una aplicación web usando Perl?
Puedes descargar XAMPP (http://www.apachefriends.org/en/xampp.html), contiene lo necesario para crear aplicaciones web con Perl.

Puedes crear una carpeta en: C\xampp\htdocs\xampp\miPerl

Creamos el formulario HTML:

form.html
< form method="POST" action="conversor.pl"> 
Introduce valor: < input name="valor" type="text" value="" /> 
< input type="submit" value="Convertir a">
 < select name="conversor">
 < option value="fahrenheit">Fahrenheit </ option>
< option value="celsius">Celsius </ option>
 < /select>
 < /form>

Ahora creamos el programa perl (.pl):
conversor.pl
#!"C:\xampp\perl\bin\perl.exe"
use strict;
use warnings;
use CGI::Carp;
use CGI;

my $form= CGI->new();
my $valor=$form->param('valor');
my $conversion=$form->param('conversor');
print $form->header('text/html');

if($valor=~/[^\d+]/){
print "Error, debes introducir valor numerico";
exit;
}

my $resultado;
if($conversion eq "fahrenheit"){
$resultado=(1.8*$valor)+32;
}
if($conversion eq "celsius"){
$resultado=($valor-32)/1.8;
}

print "Conversion a grados $conversion:";
print "$resultado";

Esto es el formulario:



Esto obtenemos: