Saltar al contenido

Variable Not Found, el blog de José M. Aguilar

el blog de José M. Aguilar

Inicio Perfil Contactar

Artículos, noticias, curiosidades, reflexiones... sobre el mundo del desarrollo
de software, internet, u otros temas relacionados con la tecnología

miércoles, noviembre 04, 2009

Cadenas Encuentro en el blog de Gunnar Peipman un post sobre el nuevo método string.IsNullOrWhiteSpace, aparecido en .NET Framework 4.0 Beta 2, cuya misión es retornar un booleano indicando si la cadena pasada como parámetro contiene un nulo, está vacío, o exclusivamente caracteres de espaciado (espacios, saltos de línea, tabulaciones, etc.), un escenario bastante frecuente cuando estamos, por ejemplo, validando formularios o cualquier tipo de datos de entrada.

Por si no podemos esperar hasta la llegada de la nueva versión del framework, Gunnar propone una solución temporal basada en crear un método de extensión sobre la clase string que realice la misma tarea:

 
public static class StringHelper
{
    public static bool IsNullOrWhiteSpace(this string s)
    {
        if (s == null)
            return true;
 
        return (s.Trim() == string.Empty);
    }
}
 
Como ya comenté por aquí hace tiempo, la ventaja que tiene utilizar esta técnica es que permite invocar el método sobre una instancia de cadena, aunque ésta sea nula, sin riesgo a errores:
 
string a = null;
string b = "    ";
string c = "\n";
string d = "Hey!";
Console.Write (a.IsNullOrWhiteSpace()); // True
Console.Write (b.IsNullOrWhiteSpace()); // True
Console.Write (c.IsNullOrWhiteSpace()); // True
Console.Write (d.IsNullOrWhiteSpace()); // False

Y para los fieles a Visual Basic .NET, ahí va el código equivalente:

Imports System.Runtime.CompilerServices
Public Module StringHelper
    <Extension()> _
    Public Function IsNullOrWhiteSpace(ByVal s As String) As Boolean
        If s Is Nothing Then
            Return True
        End If
        Return s.Trim() = String.Empty
    End Function
End Module

Publicado en: Variable not found.

Estos contenidos se publican bajo una licencia de Creative Commons Licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España de Creative Commons

3 Comentarios:

Anónimo dijo...

¿No te parece que, en ocasiones, el uso indistinto de null y cadena vacía puede deberse a errores de diseño y con ese método no está el desarrollador más que "tapando" un problema subyacente más profundo?

Creo que en muchas ocasiones habría que preguntarse : "¿por qué puede llegarme null y cadena vacía?" antes de utilizar ese método.

Saludos.

José M. Aguilar dijo...

Pues sí, anónimo, en ocasiones la recepción de un nulo puede ser una pista de que algo no se está haciendo correctamente en algún otro punto del sistema, o simplemente de que se ha tomado otro criterio para representar el "vacío" en una cadena. En cualquier caso, sería conveniente, como indicas, preguntarse el por qué, para evitar posteriores problemas.

Hay otras ocasiones, sin embargo, en las que el nulo, la cadena vacía e incluso los espacios en blanco pueden ser semánticamente similares y queremos tratarlos de la misma forma, y ahí es donde éste método sería útil.

Saludos y gracias por aportar!

Sergi dijo...

Eso esta muy bien Anónimo, si es un proyecto de Cero claro, pero muchas veces la recepción de los datos te vienen de mil sitios o el desarrollo es solo parte de todo un sistema o bien muy antiguo o realizado por alguien ausente.

En muchas bases de datos he visto blancos en vez de nulos, y ya no te digo en los clientes donde los datos pueden ser manipulados por los usuarios, pufff