En Visual Basic, las conversiones de tipos se dividen en explícitas e implícitas:
CInt(), CDbl(), CStr(), DirectCast, TryCast, entre otros.Para mayor seguridad se recomienda:
Option Strict On — esto prohíbe las conversiones implícitas, exigiendo conversiones explícitas y evitando errores en tiempo de ejecución.Ejemplo:
Option Strict On Dim a As Integer Dim b As Double = 4.5 'a = b ' ¡Error de compilación! a = CInt(b) ' Correcto: Conversión explícita con posible pérdida de parte decimal 'Conversión de cadenas Dim s As String = "123" Dim n As Integer = Integer.Parse(s)
¿Cuáles son los riesgos asociados con el uso de la función Val() para convertir una cadena en un número y por qué a menudo no se recomienda su uso?
Respuesta:
Val() convierte solo el inicio numérico de la cadena hasta el primer símbolo no numérico. Si la cadena comienza con una letra o un símbolo especial, devuelve 0. Esto puede ocultar errores si se esperaba convertir todo el valor.
Ejemplo:
Dim value1 = Val("123abc") ' dará 123 Dim value2 = Val("abc123") ' dará 0 ! ' Mejor usar: Integer.TryParse("abc123", val)
Historia
En un sistema ERP, se leían valores de la base de datos y debido a la conversión implícita de cadena a Integer sin verificación, se lanzaba una excepción cuando los datos eran incorrectos. Esto detuvo el funcionamiento de todo el módulo de informes.
Historia
Al integrar con un sistema obsoleto, el programador utilizó Val para convertir cadenas, y algunas cadenas comenzaban con letras (por ejemplo, "A1234"). Resultado: pérdida de identificadores, que se interpretaron incorrectamente como 0, y fallo en el funcionamiento de la lealtad de los clientes.
Historia
El desarrollador utilizó DirectCast al convertir objetos, sin verificar la compatibilidad de tipos. Al recibir un objeto de tipo inesperado, se lanzó InvalidCastException y se rompió la cadena de procesamiento de datos.