sábado, 6 de agosto de 2011

Exceptions in C++ - Cómo manejar excepciones - Primera Parte.

Información General
Las excepciones proporcionan una forma de tener el control sobre los "sucesos extraños", errores u horrores en tiempo de ejecución.

La forma en que C++ hace esto, es por medio de pasar el "mando" a funciones especiales llamadas manejadores o "handlers" en Inglés.

Para que esto suceda, debemos encerrar una porción de nuestro código, - o todo :) - en el bloque de código llamado try o intentar, en español, pero no lo escriban así en su código fuente... xD.

En el momento en que ocurre un error o anomalía en el código que colocamos dentro del try, salta una excepción que como ya dije, pasa el control a los manejadores, que se encargarán de hacer la tarea que nosotros le hayamos asignado.

De lo contrario, los handlers o manejadores, son ignorados.

La excepción salta, si utilizamos la palabra clave throw dentro del bloque try.


Una expresión throw acepta un solo parámetro, la cual pasa como argumento a los manejadores. (handlers)

Los manejadores pueden ser creados con la instrucción catch, la que debe ir inmediatamente después de la instrucción try y debe contener como mínimo un  parámetro el cual es comparado con el tipo de los manejadores y capturado por el cual tiene el mismo tipo, valga la redundancia.


Si queremos que nuestro manejador se atipado, o sea sin ningún tipo por defecto, debemos colocar ... (tres puntos suspensivos). De esta forma, ocurra lo que ocurra, nuestro manejador lo capturará.

Ejemplos:

try {
  // Aquí va tu código
}
catch (int param) {
    cout << "excepción de int";
}
catch (char param) {
    cout << "excepción de char";
}
catch (...) {
    cout << "excepción estandar";
}

Opinion Personal:

Como menciona el artículo original, es la forma natural que tiene este lenguaje para controlar

los eventos inesperados, que puedan surgir en nuestros programas.

Por supuesto, lo recomiendo ampliamente, aunque no hay que abusar de su uso, como todo.

Más adelante voy a traducir más del artículo original.

Fuente: cPlusPlus.com

martes, 2 de agosto de 2011

lunes, 1 de agosto de 2011

VB.Net vs C++ Segunda Parte

Ahora le toca a vb.net, para empezar utilicé el bucle While en lugar del For, como en el caso del código en C++ anterior.

Código:

Module Module1
     Sub Main()
         Dim i, j, k, l As Integer
         Console.WriteLine("Enter: ")
         Console.ReadLine()
         While i < 255
             While j < 255
                 While k < 255
                     While l < 255
                         l += 1
                     End While
                     l = 0
                     k += 1
                 End While
                 k = 0
                 j += 1
             End While
             j = 0
             i += 1
         End While
         Console.WriteLine("Hola")
     End Sub
End Module

En este caso, el código generado tarda solo 5 segundos en finalizar su ejecución, en comparación con los 3,5 de C++.


Conclusión
No es posible sacar una conclusión contundente, pero sí de que vb.net puede ser viable para desarrollos de mediano y talvéz gran porte.

C++ es un EXELENTE lenguaje de programación, y al ser compilado, goza de muchas ventajas con respecto al JIT de vb.net.
C++ es un lenguaje que utilizaría en situaciones donde necesite un verdadero V12 de potencia en algoritmos de encriptación, verificación de documentos, tratamiento de archivos por lotes, mientras que vb.net es perfectamente utilizable para lo demás...

Duda
Me gustaría saber si se pueden usar 2 lenguajes de programación en conjunto para un mismo proyecto, de ser así podríamos juntar el martillo con el cincel...

VB.Net vs C++

Bueno, realizando nuevas pruebas, y gracias al aporte de unos compañeros de Foro, ahora compilé el siguiente código en C++:

#include
using namespace std;
int main(){
    register int i = 0;
    register int j = 0;
    register int k = 0;
    register int l = 0;
    while (i < 255){
        while (j < 255){
            while (k < 255){
                while (l < 255){
                    l += 1;
                  
                }
                l = 0;
                k += 1;
            }
            k = 0;
            j += 1;
        }
        j = 0;
        i += 1;
    }
  
    std::cout << "Terminé\n";
    return 0;
}

Utilizando g++ sobre GNU/Linux y la opción de optimizado simple (-O), este código se ejecuta en 3.5 Segundos aproximadamente.

Only Love - Dread Mar I ft Luciano