domingo, 29 de marzo de 2015

Aserciones

¿Qué es una Aserción?
Es una sentencia que puede ser falsa o verdadera, nos sirve para verificar o comprobar el funcionamiento de nuestro código. Básicamente es lo que supone el programador debe ocurrir en alguna parte del programa.


Un ejemplo en Java:
 int cantidad=this.getTotal();
if(cantidad < 0){
    out.out.println("la cantidad es de:"+cantidad);
}
else{
    out.println("la cantidad es de:"+cantidad);
    assert cantidad == 0 :"Parece que la cantidad no es 0";
}


En este fragmento de código vemos como usar las aserciones, en este caso usamos la palabra assert e indicamos una condición a cumplir. Las aserciones no son exclusivas de Java, también podemos encontrarlas en lenguajes como: Ceylon, Python, C++, entre otros más.

En Java 
Compilamos: javac -g Asercion.java
Ejecutamos:  java -ea Asercion

Asercion.java
import static java.lang.System.out;

public class Codemonkey{
    public static void main(String[] args) {
    ControlUsuarios cu=new ControlUsuarios();
    cu.setTotal(1);
    cu.mostrar();
    }
}

class ControlUsuarios{
    private int total=0;

    public ControlUsuarios(){

    }

    public void setTotal(int total){
        this.total=total;
    }

    public int getTotal(){
        return total;
    }

    public void mostrar(){
        int cantidad=this.getTotal();
        if(cantidad < 0){
            out.println("la cantidad es de:"+cantidad);
        }
        else{
            out.println("la cantidad es de:"+cantidad);
            assert cantidad == 0 :"Parece que la cantidad no es 0";
        }
    }

}


En Ceylon
Compilamos: ceylon compile source/Asercion.ceylon
Ejecutamos: ceylon run default

Asercion.ceylon
shared void run(){
  value cu=ControlUsuarios();
  cu.total=0;
  cu.mostrar();
}

class ControlUsuarios(){
  shared variable Integer total=0;

  shared Integer getTotal(){
    return total;
  }

  shared void mostrar(){
    Integer cantidad=this.getTotal();
    if(cantidad < 0){
      print("la cantidad es: ``cantidad``");
    }else{
      print("la cantidad es: ``cantidad``");
      assert(cantidad == 0);//Parece que la cantidad no es 0
    }
  }
}


En C++

Compilamos: g++ -o asercion  asercion.cpp
Ejecutamos: ./asercion

asercion.cpp
#include "iostream"
#include <cassert>

using namespace std;

class ControlUsuarios{
    private:
        int total;

    public:
     ControlUsuarios(){}
     virtual ~ControlUsuarios(){}
     void setTotal(int total){
         this->total=total;
     }
     int getTotal(){
         return total;
     }
     void mostrar(){
         int cantidad=this->getTotal();
         if(cantidad < 0){
            cout<<"la cantidad es de:"<<cantidad<<endl;
        }
        else{
            cout<<"la cantidad es de:"<<cantidad<<endl;
            assert(cantidad == 0); //"Parece que la cantidad no es 0";
            assert(("Parece que la cantidad no es 0",cantidad == 0));
        }
    }

};


int main(int argc, char** argv){
    ControlUsuarios cu = ControlUsuarios();
    cu.setTotal(1);
    cu.mostrar();
    return 0;
}



En Python

Ejecutamos: python Asercion.py

Asercion.py
class ControlUsuarios(object):
  total=0
  def mostrar(self):
    cantidad=self.total
    if cantidad < 0:
      print "cantidad es:",cantidad
    else:
      print "cantidad es:",cantidad
      assert cantidad == 0 #Parece que no es 0

cu=ControlUsuarios()
cu.total=1
cu.mostrar()



La verificación de programas (algoritmos) es un tema bastante extenso y complejo, este post solo trata del uso de las aserciones de manera muy superficial.

Links
http://es.axiacore.com/blog/2008/05/ejemplo-aserciones-assert-java/
http://www.lab.dit.upm.es/~lprg/material/apuntes/assert/aserciones.htm 
http://pablasso.com/200812/que-es-una-asercion/

No hay comentarios:

Publicar un comentario

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