jueves, 29 de agosto de 2013

Caracteres y Cadenas de Caracteres en C# - Parte 2

Tabla de Contenido

0. Introducción
1. El Tipo de Dato string
2. Concatenación de Cadenas de Caracteres
3. Comparaciones en las Cadenas de Caracteres

4. Conclusiones
5. Glosario
6. Referencias

0. Introducción

En está segunda parte vamos a hablar de un tipo de dato fundamental en C#. Se trata del tipo string que nos permite manipular, representar texto como una secuencia (cadena o ristra) de caracteres basados en la codificación Unicode. El tipo string también cuenta con su alias en Framework .NET: System.String [1]) (más adelante dedicaré más tiempo en la manipulación de texto en C# y este tipo es fundamental en esta tarea el cual nos permite representar texto en las aplicaciones de cualquier complejidad).

1. El Tipo de Dato string

Como ya fue dicho el tipo de dato string (alias de System.String). Una cadena de caracteres está compuesta por unidades básicas llamadas caracteres (ver artículo anterior: Caracteres y Cadenas de Caracteres en C# - Parte 1). Para particularizar, una cadena de caracteres es inmutable lo cual significa que cada cadena posible cadena de caracteres que se pueda formar a partir de un alfabeto (A-Z, a-z, por ejemplo) tiene una representación que no puede ser cambiada/alterada (de ahí su nombre) y que si una variable de tipo string que haga referencia a una de estas cadenas de caracteres y que en un momento dado cambie a través de funciones (métodos, eventos, etc) la representación (e.gr., de minúsculas a mayúsculas) creará una nueva secuencia en el heap del programa.

Para formar una literal de tipo string basta con encerrar la secuencia de caracteres dentro de comillas doble; así:

string cadenaCaracteres = "Lenguaje de Programación C#";

Hay que tener en mente, que el tipo de dato string es de tipo por referencia, y no de tipo por valor. Sin embargo, el operador de igualdad (=) sigue la misma semántica que con los tipos por valor; de este modo:

string a = "prueba";
string b = "prueba";
Console.Write (a == b); // Devuelve True

También podemos embeber secuencias de escape como literales tipo char dentro de una cadena de caracteres. Lo único que tenemos que hacer es algo como lo que viene a continuación:

string a = "Aquí podemos poner dentro un tabulador:\t";

Para los casos donde requerimos construir una cadena de caracteres que represente la ruta a un recurso en un servidor, el separador de ruta (\) debe ser representado con la secuencia de escape \\, vemos que es necesario escribirlo dos veces, como en:

string ruta = "\\\\servidor\\carpeta\\ClaseCSharp.cs";

¿Cómo podemos evitar esta complicación de estar escribiendo dos veces el caracter de backslah? Por medio literales cadena de caracteres verbatim [2]. Este símbolo, @, no soporta las secuencias de escape dentro de las cadenas de caracteres, de lo cual nos podemos tomar ventaja para evitar escribir dos veces el caracter backslash. Miremos:

string rutaConVerbatim = @ "\\servidor\carpeta\ClaseCSharp.cs";

Otra de las utilidades de esta literal string verbatim es la de expandir una cadena de caracteres en múltiples líneas. Así:

string conSecuenciasDeEscape = "Primera Línea\r\nSegunda Línea";
string conVerbatim = @ "Primera Línea
Segunda Línea";

Podemos comprobar que ambas cadenas caracteres son iguales (siempre y cuando el IDE usa los separadores de línea CR-LF):

Console.WriteLine (conSecuenciasDeEscape == conVerbatim);

2. Concatenación de Cadenas de Caracteres

El operador + (operador de suma sobreescrito) permite concatenar dos cadenas de caracteres. Como en:

string s = "a" + 5; // a5

En los casos que uno de los operandos sea diferente a una cadena de caracteres, de forma implícita el método ToString es llamado en ese operando. Por ejemplo:

string s = "a" + 5; // a5

Más adelante veremos que el uso abusivo del operador + para concatenar cadenas de caracteres resulta ineficiente. En lugar de este operador, utilizaremos el tipo System.Text.StringBuilder.

3. Comparaciones en las Cadenas de Caracteres

El tipo de dato string no soporta los operadores de comparación < y > para comparaciones de cadenas (a causa de que se trata de un tipo por referencia). Para ello contamos con el método CompareTo; del cual hablaremos más adelante con lujo de detalles.

4. Conclusiones

He descrito, en su elemental esencia, el tipo de dato string en lenguaje de programación C#. Su importancia en la representación, y manipulación de texto. Se habló sobre la oportunidad de incluir secuencias de escape a modo de literales de tipo char dentro de las cadenas de caractares. Además, se trabajó con el uso del literal string verbatim muy útil para omitir secuencias de escape en las cadenas de caracteres (en particular, en las cadenas que representan la ruta de un recurso en una red). Por otro lado, el uso del operador + que permite la concatenación (unión) de cadenas de caracteres. Finalmente, apuntes sobre las comparaciones permitidas en cadenas.

5. Glosario

- Path
- Separador de ruta
- Verbatim

6. Referencias

[2] C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.