2.3 Mensaje a entidades de cadena

Como se ha indicado anteriormente, una String es una secuencia de elementos Character y representa texto plano (sin ningún formato).

En Cuis, como en la mayoría de los lenguajes de programación, los literales String son una sintaxis conveniente para crear instancias String. Estos son algunos ejemplos de literales String:

'Hello World!'.
'Accented letters: cigüeña, camión, déjà, deçà, forêt, coïncidence'.
'Non-latin (Greek) letters: Λορεμ ιπσθμ δολορ σιτ αμετ'.

El primer ejemplo es una instancia de String. Esta clase se utiliza para literales de cadena si todos los caracteres están en el conjunto de caracteres ASCII limitado. Los siguientes ejemplos contienen caracteres no ASCII. Para estos, se utiliza en su lugar una instancia de UnicodeString. Normalmente no es necesario preocuparse por esto: las instancias de String y UnicodeString entienden los mismos mensajes, por lo que son intercambiables.

El acceso a un carácter en una cadena se realiza con la palabra clave #at: y su posición en el índice de la cadena como argumento. Ejecuta los siguientes ejemplos con el atajo Ctrl-p:

'Hello' at: 1 ⇒ $H
'Hello' at: 5 ⇒ $o

Fíjate cómo los caracteres están precedidos por el símbolo «$».

Precaución. El índice indica la posición, comenzando naturalmente por 1, y es válido hasta la longitud de la cadena.

'Hello' indexOf: $e
⇒ 2

Para cambiar un carácter, utiliza el mensaje de dos palabras clave complementario #at:put:. El argumento debe indicarse como un carácter:

'Hello' at: 2 put: $a; yourself
⇒ 'Hallo'

Fíjate que utiliza una cascada con el mensaje #yourself. Una cascada envía los siguientes mensajes al receptor original, por lo que #yourself devuelve la cadena actualizada. Sin la cascada, se devuelve $a como resultado del mensaje #at:put:.

 CuisLogo Reemplaza cada carácter de la cadena ’Hello’ para que se convierta en ’Belle’.

Ejercicio 2.1: de Hello a Belle

Se puede solicitar el código ASCII de los caracteres que forman parte del conjunto de caracteres ASCII. A la inversa, dado un código ASCII, podemos solicitar el Character correspondiente:

$A asciiValue
⇒ 65
Character codePoint: 65 + 25
⇒ $Z

Pero los caracteres que no forman parte del ASCII no tienen un ASCII. En general, es mejor utilizar codePoint Unicode en su lugar:

$A codePoint
⇒ 65
Character codePoint: 65 + 25
⇒ $Z
$φ codePoint
⇒ 966
Character codePoint: 966
⇒ $φ

Barajar (shuffling) una cadena puede ser divertido, pero no muy útil. Sin embargo, el barajado se puede aplicar a cualquier tipo de colección, no solo a una cadena, y resultará útil, como veremos más adelante:

'hello world' shuffled
⇒ 'wod llreohl'

Fíjate que cada vez que se baraja se obtiene un resultado diferente.

Los mensajes se componen de manera natural:

'hello world' shuffled asArray
⇒ #($h $d $l $ "20" $o $w $e $l $l $o $r) 

Un literal Array comienza con un carácter almohadilla o sharp, $#, y los elementos del array están entre paréntesis. En este caso, los elementos son Characters, pero pueden ser instancias de cualquier clase.

Como #shuffled, todas las colecciones responden al mensaje #sorted, cuya respuesta es una colección ordenada.

'hello world' sorted
⇒ ' dehllloorw'