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

Continuamos con esta serie de ejercicios de programación en Perl.

En esta ocasión veremos:

  1. Determinar el elemento menor de un arreglo o vector. 
  2. Determinar el elemento mayor y menor de un arreglo o vector y su suma. 
  3. Cómo recorrer un hash.   
  4. Una entrevista con Larry Wall, creador de Perl.
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

Vibe Coding (la programación vía IA): ¿el futuro de la programación?

Vibe Coding es un nuevo paradigma de programación, una nueva forma de crear código. Es un enfoque emergente en el desarrollo de sof...

Etiquetas

Archivo del blog