Hoy vamos a revisar algo que ya has aprendido,
pero realmente quiero llevarlo a casa.
Personajes, Cuerdas y Símbolos.
Lo que vas a aprender es como manejar personajes,
cómo se representan las cadenas,
y que simbolo esta en relacion a una cuerda
Tomémoslo desde el principio: Caracteres.
En Pharo, los personajes comienzan con el signo de dólar,
seguido de una carta.
Esto es para representar caracteres literales.
Caracteres no imprimibles que no tienen una forma
use espacio, pestaña o retorno de carro,
que salta a una nueva línea.
Enviamos un mensaje a esta clase de personaje
para obtener este personaje
Ahora para cadenas.
Cadenas de caracteres están delimitados por comillas simples.
Este personaje aquí mismo.
Aquí tenemos la cadena: 'eclair au chocolat'.
Comienza aquí y termina aquí.
Podemos enviarle un mensaje, por ejemplo, tamaño
Y devuelve "18".
De hecho, esta cadena contiene 18 caracteres
Incluso podemos jugar con esta cuerda.
Puedo decir división de espacio de personajes.
Esto significa que cortaré esta cadena de acuerdo con los espacios,
y obtengo una colección ordenada con 3 elementos
La cuerda se cortó en 3 elementos.
Cadenas de caracteres Son colecciones como cualquier otra en Pharo.
Una cuerda es realmente una colección de personajes,
pero la clase de cadena heredará de la clase de colección.
Entonces puedo usar todos los métodos clásicos.
Recuerda, Tenemos clases comunes de recolección.
Por ejemplo, "en:" para todas las colecciones indexadas.
'eclair au chocolat' en:1
significa que quiero el elemento "1" de esta colección y obtengo "e".
Corresponde a esta "e".
También puedo usar "do:" que se ejecuta los elementos de una colección
Y después de cada ciclo, la configuración de bloque
es igual al primer elemento de la colección, luego la segunda, etc.
Una pequeña sutileza.
Dado que las cadenas de caracteres están delimitados por comillas simples,
si quiero poner el código en una cadena,
el truco es usar dos comillas, lado a lado.
Esto significa que quiero insertar una cita en mi cadena de personajes ...
Pero ten cuidado, la sutileza es que
solo cuenta como Un elemento en la cadena.
Por ejemplo: 'L'' eclair au chocolat 'en:2
significa que quiero el elemento 2 de esta colección
Y devuelve el carácter de cita.
Y si lo pido en:3 Recibo la "e" que está aquí.
Entonces, incluso si ingrese dos comillas simples, ellos cuentan como uno.
Cadenas de caracteres se tratan como cualquier otra colección.
Puedo decir que quiero el último elemento de una cadena.
Si pido "str at:str size" Recibo el último elemento.
No te olvides, en Pharo Las cadenas comienzan con el valor de índice 1,
por lo tanto, el último elemento es el tamaño de la cadena.
O simplemente podemos usar "último" para recuperar el último elemento.
Para generar cadenas, hay varias técnicas
El más fácil es el método de conversión.
Convierto un símbolo en una cadena de caracteres con asString.
O bien, puedo enviar printString a cualquier objeto.
Esto me dará una representación de cadena del objeto.
O puedo generar un método de creación directamente de una colección.
Recuerde, puede enviar "con" a cualquier clase de colección
para generar una nueva colección que automáticamente contiene ciertos objetos.
Si uso String con:$ A,
Obtengo una cuerda que contiene un solo carácter:"A."
Para la concatenación,
ya has visto esto, utilizamos el mensaje "coma".
Envío "," a una cadena y ejecutarlo a través de otra cadena
para crear una nueva cadena que sea la concatenación de los dos.
Sin embargo, ten cuidado.
Si tomo el mismo ejemplo, Debes entender
que generé versiones intermedias que son inútiles
Entonces tengo este primer mensaje eso fue enviado
a esta cadena, con este valor.
Tenemos una primera cadena de concatenación. eso fue generado
Esta concatenación envió el mensaje "," con este valor,
y se creó otra cadena: El resultado final
Una cuerda intermedia no hemos visto fue generado,
y te hace perder el tiempo en tus cálculos
Tuve una sesión sobre benchmarking.
Puedes usar benchmarking para ver realmente lo que está pasando
y si no sería vale la pena usar una transmisión.
Genero una cadena de caracteres
y digo que definiré una secuenciaContenido con:s
Y puedo enviar cadenas directamente a esto transmitir para generar la cadena final.
De esta forma, evito las cadenas intermedias.
Ahora por símbolos.
Sintácticamente hablando, Los símbolos comienzan con un hashtag,
luego una cadena de personajes.
Este es un símbolo literal.
Es una especie de cuerda, pero ten cuidado, Son únicos en el sistema.
Si escribo el hashtag "bla, bla" en cualquier parte de mi programa,
en cualquier otro lugar en el programa esto aparece,
Estoy designando el mismo objeto.
Es la misma instancia.
Entonces, los símbolos son únicos.
Aquí tenemos #calvin == #calvin y devuelve verdadero.
Es el mismo objeto.
Este no es el caso de las cadenas. Para cadenas, depende.
Depende de las optimizaciones del compilador.
Entonces esta es la verdadera diferencia. entre símbolos y cadenas.
Un símbolo está únicamente en solo lectura.
Los símbolos no se pueden modificar, debes crear una nueva.
Es un objeto único, por lo que siempre apunta al mismo objeto.
Las cadenas son objetos mutables, puedes modificar su contenido
Dice "por ahora" porque este punto está en discusión.
Los símbolos se usan a menudo como
selectores de método
Y simbolos son buenos candidatos para llaves
en diccionarios,
a saber, identityDictionary
¿Recuerdas esto?
Comparamos elementos,
y podemos fácilmente para calcular hashes que comienzan con un símbolo,
para generarlo en un diccionario.
Lo importante para recordar desde esta sesión,
es que las cuerdas son como cualquier otra colección.
Y esos símbolos son únicos,
en modo de solo lectura, e inmutable.