Archivado en: ‘Visual Basic .Net’ .

Continue de un bucle en Visual Basic

13 Abril, 2009

Es curioso. El otro día estaba trabajando con unos bucles o loops como les dicen algunos, en el curro con Visual Basic .Net 1.1, es decir VB.Net en su versión de 2003. La verdad es que yo siempre he sido un hombre de bandera (jajaja) pero no se porque me empeñe en usar el continue. Probando con diferentes formas de ponerlo, "Continue", "Next" y alguna más que no recuerdo, buscando por internet y preguntando ha algun compañero, al final llegue a la conclusión, de que no existe un "Continue" ni equivalente en Visual Basic .Net, una lástima teniendo en cuenta que en C# si tiene continue. Seguiré usando mis banderitas que me funcionan en todos los lenguajes.

Por si hay alguien que no entiende para que sirve el continue, básicamente lo que hace es saltar a la siguiente iteración de un bucle ignorando todo el código de ese bucle desde que se llama hasta que llega al final del bucle, por llamarlo de alguna manera, "esta vuelta ha terminado".

Char curiosidad de IsLetter e IsDigit

25 Noviembre, 2008

El otro día, nos disponíamos mi jefe y yo a realizar un control sobre un campo de texto de una aplicación web. La idea era que en este campo solo se pudiera incluir texto o números, pero en ningún caso debería de poderse incluir caracteres raros. Seamos sinceros y siempre que hemos necesitado usar esto en lenguajes donde su framework no estaba preparado para diferenciar que tipo de carácter era, acabamos o bien creando un array diccionario y comparando los caracteres o bien usando expresiones regulares. Como no, desde el salto a tecnología de Microsoft (en este caso Visual Basic .Net) me propuse buscar alguna clase o método que hiciera solo lo que quería hacer, y la encontré.

En .Net existe la clase Char, que tiene el método Char.IsLetterOrDigit (boleano) donde le indicas un char o carácter y este te devuelve true o false si es un número o letra y false si no lo es. Monto una función para recorrer carácter a carácter del campo de texto comprobando si es alfanumérico o no, con la idea de borrar los caracteres que no sean alfanuméricos. Una vez montada la función, la pruebo unas cuantas veces y todo funciona estupendamente. Cuando nos vamos a disponer a subir a producción... sorpresa, la última prueba a fallado (pero es imposible), se nos deslizo el dedo y por poner un "1", pusimos un "º". Cuando nos ponemos a investigar (ha probar con jabatos) nos damos cuenta de que esta función, establece que los caracteres "º" y "ª" son alfanuméricos, vamos que son letras, supongo que la "o" y la "a".

Por supuesto esto lo controlamos y listo, pero si alguien se encuentra en nuestra misma situación y conoce alguna función que si trabaje correctamente que lo comente. Y si alguien buscando por internet se encuentra bloqueado y se ve encuentra con este post, ya puede respirar tranquilo, porque no es que funcione mal, es que no funciona del todo bien. (Si, ya se que para algunos "º" y "ª" son letras, pero realmente son caracteres especiales)

Bucle do-while en VisualBasic

26 Septiembre, 2008

Llevo tiempo currando con Visual Basic .Net, pero como persona formada desde hace años en lenguajes tipo C (C, C++, Java, C#, PHP, etc) el paso a programar en Visual Basic, cuesta mucho y cosas tan cotidianas como hacer un bucle, un switch o similares pueden convertirse en una peligrosa trampa que nos consumira muchos minutos muy valiosos.

La ultima que me he topado ha sido el bucle do while. En cualquier lenguaje tipo C, practicamente independiente del lenguaje estos bucles son iguales:

  do {
    sentencias
  } while(condicion);

Pero como no, estamos con Visual Basic y aqui todo funciona de manera diferente, es como nuestro tipico amigo que siempre lleva la contraria a todo. Por ejemplo para hacer un bucle do-while (me sorprende que en 9 meses sea la primera vez que me vea obligado a hacerlo, el bucle es do-loop-while, siendo su sintaxis

  Do
    sentencias
  Loop While condicio

Puede que la gente que conozca o programe en Visual Basic lo vea una tonteria, pero para gente como yo que por razones laborales se ven obligadas a programar en dicho lenguaje y que por muchos meses se que lleve sigan prefiriendo C# a VB.Net, cosas tan cotidianas pueden convertirse en un minimundo.

Ya de paso y para aprovechar el post, explico que los bucles do while, son bucles que se recorreran igual que los while, en funcion de una condicion que de ser cierta dara una vuelta mas al bucle y que la principal diferencia entre los bucles while y do while, radica en que el while, primero comprueba la condicion antes de hacer una iteracion al bucle, mientras que los do while primero dara una iteracion al bucle y al final comprobara si debe de seguir haciendo iteraciones. Dicho de otro modo, el el while, primero comprobamos que debemos entrar al bucle y de ser cierto, entramos, en los do while, primero entramos al bucle y al final de este comprobamos si debemos dar una vuelta mas.

Declarar un método no heredable o final

21 Marzo, 2008

Para aquellos programadores que llegan a .Net de la mano de PHP o Java, verán algo diferente el hecho de heredar métodos de clases. Cuando heredamos una clase en Java o PHP los métodos se sobrescriben redeclarándolos en la clase hija y cuando queremos evitar que una clase hija implemente un método, lo establecemos con la palabra reservada final.

Por ejemplo PHP se utilizaría para evitar la herencia:

public final function miMetodoNoHeredable() {
   //Codigo del metodo
}

En el caso de java es muy similar:

public final void miMetodoNoHeredable() {
   //Codigo del metodo
}

Pero en .Net aunque la base sigue siendo la misma es algo diferente. Para heredar un método, debemos de declarar el método como virtual y para declarar un método como final, usaremos la sentencia sealed (NotOverridable en VB). Para hacer un símil podríamos decir que la palabra reservada final de Java o PHP equivale en cierta medida a la sealed (NotOverridable en VB) de .Net.

Hay que apuntar que por defecto los métodos declarados en .Net son sealed, así que para heredarlos deberemos de declararlos como virtual e indicar a sus hijos que los métodos son override para que sobrescriban los valores del padre.

El caso de .net

// Ejemplo de C#
public sealed void miMetodoNoHeredable() {
   //Codigo del metodo
}
'Ejemplo de Visual Basic .Net o VB.Net
Public NotOverridable Sub miMetodoNoHeredable()
   'Codigo del metodo
End Sub