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:.
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'