02. Letras

Entonces, ya hemos aprendido todo sobre números, pero ¿qué pasa con las letras? ¿Palabras? ¿Texto?

Nos referimos a grupos de letras en un programa como strings (cadenas de texto). (Puedes pensar en letras impresas juntas a lo largo de una pancarta). Para que sea más fácil ver qué partes del código son strings, voy a colorear las strings en rojo. Aquí tienes algunos ejemplos de strings:

'Hola.'
'Ruby mola.'
'5 es mi número favorito... ¿cuál es el tuyo?'
'Snoopy dice #%^?&*@! cuando alguien le pisa el pie.'
'     '
''

Como puedes ver, las strings pueden tener puntuación, dígitos, símbolos y espacios... mucho más que solo letras. La última string no tiene nada; la llamamos una string vacía.

Hemos estado usando puts para imprimir números; intentémoslo de nuevo con algunas strings:

puts 'Hola, mundo!'
puts ''
puts 'Hasta luego.'
Hola, mundo!

Hasta luego.

Eso funcionó bien. Ahora intenta algunas strings tú mismo.

Aritmética de Strings

Así como puedes hacer aritmética con números, ¡también puedes hacer aritmética con strings! Bueno, una parte... puedes sumar strings, de todos modos. Vamos a intentar sumar dos strings y ver qué hace puts.

puts 'Me gusta el ' + 'pastel de manzana.'
Me gusta elpastel de manzana.

¡Ups! Olvidé poner un espacio entre 'Me gusta el ' y 'pastel de manzana.'. Los espacios no suelen importar en tu código, pero importan dentro de las strings. (Es cierto lo que dicen: las computadoras no hacen lo que quieres que hagan, solo lo que les dices que hagan). Vamos a intentarlo de nuevo:

puts 'Me gusta el ' + 'pastel de manzana.'
puts 'Me gusta el' + ' pastel de manzana.'
Me gusta el pastel de manzana.
Me gusta el pastel de manzana.

(Como puedes ver, no importa a qué string le añada el espacio.)

Entonces puedes sumar strings. ¡Pero también puedes multiplicarlas! (Por un número, al menos). Mira esto:

puts 'parpadear ' * 4
parpadeando sus ojos

(Es broma... en realidad hace esto:)

parpadear parpadear parpadear parpadear 

Si lo piensas, esto tiene mucho sentido. Después de todo, 7*3 realmente significa 7+7+7, así que 'muu'*3 solo significa 'muu'+'muu'+'muu'.

12 vs '12'

Antes de ir más lejos, debemos asegurarnos de entender la diferencia entre números y dígitos. 12 es un número, pero '12' es una string de dos dígitos.

Vamos a jugar con esto un poco:

puts  12  +  12
puts '12' + '12'
puts '12  +  12'
24
1212
12  +  12

¿Qué tal esto?

puts  2  *  5
puts '2' *  5
puts '2  *  5'
10
22222
2  *  5

Estos ejemplos fueron bastante directos. Sin embargo, si no tienes cuidado al mezclar strings y números, podrías encontrarte con...

Problemas

En este punto, es posible que hayas probado algunas cosas que no funcionaron. Si no, aquí hay algunas:

puts '12' + 12
puts '2' * '5'
#<TypeError: can't convert Fixnum into String>

Hmmm... Un mensaje de error. El problema es que realmente no puedes sumar un número a una string, o multiplicar una string por otra string. No tiene mucho sentido, al igual que:

puts 'Betty' + 12
puts 'Fred' * 'John'

Una cosa que debes saber: puedes escribir 'cerdo'*5 en un programa, ya que eso solo significa 5 conjuntos de la string 'cerdo' sumados todos juntos. Sin embargo, no puedes escribir 5*'cerdo', ya que eso significa 'cerdo' conjuntos del número 5, lo cual es simplemente absurdo.

El Apóstrofe (Escape)

Finalmente, ¿qué tal un programa que imprima ¡Eres genial!? Podemos intentar esto:

puts '¡Eres genial!'

Bueno, eso funcionará porque no hay apóstrofes. Pero ¿y si queremos imprimir 'Eso es un apóstrofe: ''?

puts 'Eso es un apóstrofe: ''

Bueno, eso no funcionará; ni siquiera intentaré ejecutarlo. La computadora pensó que habíamos terminado con la string. (Por eso es bueno tener un editor de texto que resalte la sintaxis por ti). Entonces, ¿cómo le hacemos saber a la computadora que queremos permanecer en la string? Tenemos que escapar el apóstrofe, así:

puts 'Eso es un apóstrofe: \''
Eso es un apóstrofe: '

La barra invertida (\) es el carácter de escape. En otras palabras, si tienes una barra invertida y otro carácter, a veces se traducen en un nuevo carácter. Las únicas cosas que la barra invertida escapa, sin embargo, son el apóstrofe y la propia barra invertida. (Si lo piensas, los caracteres de escape siempre deben escaparse a sí mismos).

Creo que unos ejemplos vendrían bien:

puts 'Eso es un apóstrofe: \''
puts 'barra invertida al final de la string:  \\'
puts 'arriba\\abajo'
puts 'arriba\abajo'
Eso es un apóstrofe: '
barra invertida al final de la string:  \
arriba\abajo
arriba\abajo

Dado que la barra invertida no escapa 'a', pero se escapa a sí misma, las dos últimas strings son idénticas. No se ven igual en el código, pero en tu computadora son lo mismo.

Si tienes alguna otra pregunta, ¡sigue leyendo! No puedo responder a todas las preguntas en esta página.