domingo, 30 de junio de 2013

Groovy para novatos


Groovy es un lenguaje dinámico que permite usar el API de java para crear código más sencillo de leer y entender.

El código generado es compatible con los bytecodes (.class) de un programa java.



Algunos ejemplos en Groovy.
1. Ejecutar desde línea de comandos
Ver la versión: groovy -version
Compilar: groovyc script.groovy
Ejecutar: groovy script.groovy
2. Paso de parámetros (desde línea de comandos)
Le paso un parámetro: groovy -e "println 'Hola '+args[0]" Juan 
Debería imprimir:
Hola Juan 

Ahora paso varios parámetros:
groovy -e "if(args){args.each{println 'Hola '+it } }else{ println 'no hay argumentos'}" Alma Karla Johnatan Belem Ricardo 

Debería imprimir:
Hola Alma
Hola Karla
Hola Johnatan
Hola Belem
Hola Ricardo 

3. Obtener las propiedades del sistema
Vamos a usar System.getProperty, para conocer el SO:
  def sistemaOperativo(){ 
 return System.getProperty("os.name") 

 def ver(so){ 
 if(so.toLowerCase().contains("win")){ 
 println "windows" 
 } else if(so.toLowerCase().contains("mac")){
 println "mac" 
 } else if(so.toLowerCase().equalsIgnoreCase("nix")){ 
 println "unix" 
 } else{ 
 println so 
 } 
} def inicio(){ 
 ver(sistemaOperativo()) 

//invoco el método principal 
inicio()
4. Usar "assert"
Nos sirve para depurar nuestro código.
def groovy="Groovy" // tiene 6 caracteres 
 assert groovy.size()==8 // es obvio que será error 
Obtenemos esto:
Caught: Assertion failed:

assert groovy.size()==8
       |      |     |
       Groovy 6     false

Assertion failed:

assert groovy.size()==8
       |      |     |
       Groovy 6     false

        at Groov.run(Groov.groovy:127)

Si cambiamos el código
def groovy="Groovy" // tiene 6 caracteres 
assert groovy.size()==6 // correcto 

No producirá nada, eso indica que esta bien.
5. Clases
class Persona{ 
 def nombre 
 def edad 
 def verDatos(){ 
 return "nombre: $nombre ,edad: $edad" 
 } 
 def getEdad(){ edad } 
 def getNombre(){ nombre } 

 def persona=new Persona(nombre:"Ignacio",edad:41) 
println "nombre: $persona.nombre ,edad: $persona.edad" 
println persona.verDatos() 
println "nombre: "+persona.getNombre()+" , edad: "+persona.getEdad()
6. Entrada de datos
def entrada=new java.util.Scanner(System.in) 
println "Introduce tu nombre:" 
def nombre=entrada.nextLine() 
println "Hola ${nombre}"
7. Ejecutar comandos
Dese línea de comandos:
groovysh
println "dir".execute().text 
En un script:
println "teclea comando" 
 def comandoWin=teclado.nextLine() 
 def sub="cmd /c "+comandoWin 
 println sub 
 Process proceso = sub.execute() 
 println "${proceso.text}"
8. try-catch
try{ 
 println "inicio"
 // más código...
 }catch(e){
 println "error ${e.getCause()}"
 } finally{ 
 println "fin..." 
}


Hay más cosas sobre Groovy.
"Si la depuración es el proceso de eliminar errores, entonces la programación debe ser el proceso de ponerlos" ::Edsger Dijkstra::
Links:
Clojure comparativa con Groovy 
Groovy comparativa con otros lenguajes 
http://codemonkeyjunior.blogspot.mx/2012/02/groovy-programando-al-estilo-java.html
http://codemonkeyjunior.blogspot.mx/2012/11/programando-en-groovy-al-estilo-java-no.html
Cómo hacer prueba a un script Groovy (@rodrigo salado anaya)

domingo, 23 de junio de 2013

Programando en Ruby ... no. 1

["¿Qué es Ruby?","Un poco de historia"]
Ruby es un lenguaje de programación orientado a objetos, muy parecido a Perl y Python.

El creador del lenguaje (Yukihiro  Matsumoto) pretendía hacer un lenguaje "parecido al lenguaje humano".

#este es un comentario
puts "¡Hola, mundo!"

Ruby posee un REPL, si usas una terminal (Windows MS-DOS, Linux) teclea  "irb". Puedes probar como funciona en esta página: http://tryruby.org/levels/1/challenges/0


irb(main):001:0>7+43
=>50
irb(main):002:0>"Codemonkey".reverse
=>yeknomedoC
Ejecutar: ruby programa.rb
1. Mostrar el abecedario
letras=('a'..'z')
for letra in letras
  puts "#{letra}"

end

2. Identificar sistema operativo y ejecutar comando
sistema=ENV['os']

def escribeComando()
  puts "Escribe comando: "
  comando = STDIN.gets.chomp()
  puts "comando a ejecutar: "+comando
  system(comando)
end

if sistema=="Windows_NT"
  puts "Windows"
  escribeComando()
else
  puts "Otro"
  escribeComando()
end

3. Uso  de "try-catch"
begin #try
p "Libro de Ann: "+mapa["Ann"]
p "Libro de Lucio: "+mapa["Lucio"]
rescue #catch
@error_message="#{$!}"
ensure #finally
puts "Fin..."
end

4.Paso de parámetros, mostrar en mayúsculas
ARGV.each do |arg|
  arg=arg.upcase
  puts "hola #{arg}"

end

sábado, 22 de junio de 2013

Programando en Java ... no. 2


Uso de clases abstractas e interfaces
  • Clase principal: Ejemplos
  • Interface: Servicio
  • Clase asbtracta: Persona
  • Clase "hija": Obrero
El programa obtiene 6 parámetros: nombre, apellido paterno, apellido materno, edad, tasa y horas

Calcula el salario neto y el salario bruto de una persona.


public class Ejemplos{
    public static void main(String[] args)throws Exception {
       if(args.length!=0){
Persona obrero=new Obrero(args[0],args[1],args[2],Integer.parseInt(args[3]), Double.parseDouble(args[4]),Integer.parseInt(args[4]));
        obrero.ver();
        }else{
            System.out.println("No hay argumentos:\n"+uso());
        }
    }
    static String uso(){
        return "java Ejemplos <nombre> <apellidoPaterno> <apellidoMaterno> <edad> <tasa> <horas>";
    }
}

interface Servicio{
    public abstract void ver();
}
abstract class Persona implements Servicio{
    protected String nombre;
    protected String apellidoPaterno;
    protected String apellidoMaterno;
    protected int edad;
    public abstract String obtenerDatos();
    public abstract double obtenerSalarioNeto();
    public abstract double obtenerSalarioBruto();

    public Persona(){}

    public Persona(String nombre,String apellidoPaterno,String apellidoMaterno, int edad){
        this.nombre=nombre;
        this.apellidoPaterno=apellidoPaterno;
        this.apellidoMaterno=apellidoMaterno;
        this.edad=edad;
    }

    public String getNombre(){
        return nombre;
    }
    public String getApellidoPaterno(){
        return apellidoPaterno;
    }

    public String getApellidoMaterno(){
        return apellidoMaterno;
    }

    public int getEdad(){
        return edad;
    }

}

class Obrero extends Persona{
    public double tasa;
    public int horas;


    public static final double VALOR1=1.5;
    public static final double VALOR2=0.9;

    public Obrero(){
    }

    public Obrero(String nombre,String apellidoPaterno,String apellidoMaterno,int edad,double tasa,int horas){
        super(nombre,apellidoPaterno,apellidoMaterno,edad);
        this.tasa=tasa;
        this.horas=horas;
    }

    @Override
    public double obtenerSalarioBruto(){
        double salarioB=0.0;
        int extras=0;
        if(horas<=38){
            extras=0;
        }else{
            extras=horas-38;
            horas=38;
        }
        salarioB=horas*tasa+extras*tasa*VALOR1;
        return salarioB;
    }

    @Override
    public double obtenerSalarioNeto(){
        double salarioN=0.0;
        if(obtenerSalarioBruto()<=300){
            salarioN=obtenerSalarioBruto();
        }else{
            salarioN=obtenerSalarioBruto()*VALOR2;
        }
        return salarioN;
    }

    @Override
    public void ver(){
        System.out.println(obtenerDatos());
    }

    @Override
    public String obtenerDatos(){
        return "Obrero(nombre: "+nombre+" , apellido paterno: "+apellidoPaterno+" , apellido materno: "+apellidoMaterno+" , edad: "+edad+" , tasa: "+tasa+" , horas: "+horas+" , salario bruto: "+obtenerSalarioBruto()+" , salario neto: "+obtenerSalarioNeto();
    }
}


domingo, 16 de junio de 2013

Python ... ejemplos prácticos no. 8

1. Obtener un carácter especifico.

2. Uso de replace
3. Uso de "reverse"
4. Obtener la longitud de una cadena y/o lista

5. Ejecutar un comando del sistema (en este caso Windows)

6.Conocer plataforma y sistema operativo

domingo, 9 de junio de 2013

Programando en Java ... no. 1

1. Recorrer un directorio, si existe recorre y cuenta el número de archivos y directorios.
import java.io.File;
import java.io.IOException;
import static java.lang.System.out;

public class Ejemplos{
    public static final String DIRECTORIO="/home/usuario/ejemplos";
 
    public static void main(String[] args)throws IOException {
        File directorio=new File(DIRECTORIO);
        int cont=0;
        if(directorio.exists()){
            out.println("existe directorio");
            if(directorio.isDirectory()){
                out.println("estamos en: "+directorio.getAbsolutePath());
                File subDir=new File(directorio.getAbsolutePath());
                File[] archivos=subDir.listFiles();
                out.println("\tArchivos:");
                for(int i=0;i<archivos.length;i++){
                    out.println(archivos[i].getName());
                    cont++;
                }//fin for
            }//fin if
        }//fin if
        out.println("no. total: "+cont);
    }

}

2. Unir dos vectores (Ay B) en una lista
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Collections;

public class Ejemplos{
    public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    int tam=0;
    int[] vectorA=null;
    int[] vectorB=null;
    List<Integer> listaC=new ArrayList<Integer>();
    System.out.println("tamanyo del vector: ");
    tam=in.nextInt();
    vectorA=new int[tam];
    vectorB=new int[tam];
    int valorA=0,valorB=0;

System.out.println("llenamos vector A");
    for(int i=0;i<vectorA.length;i++){
      System.out.println("valor no. "+(i+1)+" :");
      valorA=in.nextInt();
      vectorA[i]=valorA;
    }
    Arrays.sort(vectorA);
System.out.println("llenamos vector B");
    for(int j=0;j<vectorB.length;j++){
      System.out.println("valor no. "+(j+1)+" :");
      valorB=in.nextInt();
      vectorB[j]=valorB;
    }
    Arrays.sort(vectorB);
System.out.println("llenamos lista C");
    for(int a:vectorA){
        listaC.add(a);
    }
    for(int b:vectorB){
        listaC.add(b);
    }
       Collections.sort(listaC);
       System.out.println(listaC);    
    }
}

3. Uso de enumeraciones
import java.util.List;
import java.util.ArrayList;
import static java.lang.System.out;

public class Ejemplos{
    public static void main(String[] args) {
     Soldado steve=new Soldado();
     Soldado john=new Soldado();

     RangoSoldado rango1, rango2;

     steve.setNombre("Steve Rogers");
     steve.setEdad(28);
     steve.setRango(RangoSoldado.CAPITAN);

     john.setNombre("John Walker");
     john.setEdad(30);
     john.setRango(RangoSoldado.TENIENTE);

     rango1=steve.getRango();
     rango2=john.getRango();

     out.println("Steve: "+rango1.getTitulo());
     out.println("John: "+rango2.getTitulo());

     List<Soldado> listaS=new ArrayList<Soldado>();
     listaS.add(steve);listaS.add(john);

     for(Soldado soldado: listaS){
        out.println("nombre: "+soldado.getNombre()+"  ,edad: "+soldado.getEdad()+"  ,rango: "+soldado.getRango());
     }




    }
}

class Soldado{
    public Soldado(){}

    public Soldado(String _nombre,int _edad, RangoSoldado _rango){
        nombre=_nombre;
        edad=_edad;
        rango=_rango;
    }

    private String nombre;
    private int edad;
    private RangoSoldado rango;


    public void setNombre(String _nombre){
        nombre=_nombre;
    }

    public void setEdad(int _edad){
        edad=_edad;
    }

    public void setRango(RangoSoldado _rango){
        rango=_rango;
    }

    public String getNombre(){
        return nombre;
    }

    public int getEdad(){
        return edad;
    }

    public RangoSoldado getRango(){
        return rango;
    }
}

enum RangoSoldado{
    RASO("raso"),CABO("cabo"),TENIENTE("teniente"),CAPITAN("capitan");

  
    public  String titulo;

    RangoSoldado(String _titulo){
        titulo=_titulo;
    }

    RangoSoldado(){
    }

    public String getTitulo(){
        return titulo;
    }
}

4. Recorrer directorio
import java.io.IOException;
import java.io.File;
import java.util.Date;

public class Ejemplos{

    public static final String DIRECTORIO="C:\\Programas\\Ejemplos";
    
public static void main(String[] args)throws IOException {
        File directorio=new File(DIRECTORIO);
        if(directorio.exists()){
            System.out.println("existe el directorio: "+directorio.getAbsolutePath());
            File subDir=new File(directorio.getAbsolutePath());
            File[] archivos=subDir.listFiles();
            for(int i=0;i<archivos.length;i++){
                if(archivos[i].canRead() || archivos[i].canWrite() || archivos[i].canExecute()){
                    System.out.println("se tienen todos los permisos: "+archivos[i].getName());
                    if(new File(archivos[i].getName()).isFile()){
                        System.out.println("es archivo: "+archivos[i].getName()+"  ultima modificacion: "+new Date(archivos[i].lastModified()));
                    }
                    if(new File(archivos[i].getName()).isDirectory()){
                        System.out.println("es directorio: "+archivos[i].getName()+" ultima modificacion: "+new Date(archivos[i].lastModified()));
                    }

                    //ver solo archivos txt
                    if(archivos[i].getName().endsWith("txt")){
                        System.out.println("es archivo txt: "+archivos[i].getName()+" ultima modificacion: "+new Date(archivos[i].lastModified()));;
                    }

                }else{
                    System.out.println("no se tienen los  permisos necesarios: "+archivos[i].getName());
                }

            }//fin for
        }//fin if
    }//fin main

}


domingo, 2 de junio de 2013

Programando en Perl no. 4

1. Llenar un vector, y determinar el elemento menor
$argumentos = $#ARGV;
$cont= 0;
my @vector;
for($i=0;$i<=$argumentos;$i++){
 print $ARGV[$i],"\n";
 $vector[$i]=$ARGV[$i];
 $cont++;
}
print "\nno. de parametros: ",$cont;
my $menor=$vector[0];
my $mayor=$vector[0];
my $suma=0;
foreach $v (@vector) {
   if($v<$menor){
    $menor=$v;
   }
   if($v>$mayor){
    $mayor=$v;
   }
   $suma=$suma+$v;
}

print "\nmenor: ",$menor;
print "\nmayor: ",$mayor;
print "\nsumatoria: ",$suma;

2. Llenar un vector, determinal el elemento mayor y menor, y la suma de todos los elementos (usando una función):
$argumentos = $#ARGV;
$cont= 0;
my @vector;
for($i=0;$i<=$argumentos;$i++){
 print $ARGV[$i],"\n";
 $vector[$i]=$ARGV[$i];
 $cont++;
}
print "no. de parametros: ",$cont,"\n";
print metodo(@vector);

sub metodo{
  my @vector=@_;
  my $resultado="";
  my $menor=$vector[0];
  my $mayor=$vector[0];
  my $suma=0;
  foreach $v (@vector) {
    if($v<$menor){
      $menor=$v;
    }
    if($v>$mayor){
      $mayor=$v;
    }
    $suma=$suma+$v;
  }

  $resultado="el menor es: $menor ,el mayor es: $mayor ,la suma es $suma\n";
  return $resultado;
}
3. Recorrer un hash
my %mapa=('Pedro',32,'Maria',31,'Horacio',65);
print "Recorrer con while\n";
while (($key, $value) = each(%mapa)){
     print $key.", ".$value."\n";
}

print "Recorrer con foreach\n";
foreach $key (%mapa)
{
 print $key.",".$mapa."\n";
}


¿Por qué Perl es como un lenguaje humano?
Aquí una entrevista(en inglés) al creador de Perl,  Larry Wall.


Links
http://bigthink.com/videos/hobbits-would-make-great-programmers
https://github.com/book/perlsecret