viernes, septiembre 28, 2012

[viernes, septiembre 28, 2012] Ruby :: Cadenas

Ahora que hemos aprendido todo acerca de números, ¿qué pasa con las letras, con las palabras, o con los textos?

Nos referimos a grupos de letras en un programa como cadenas. Aquí hay algunas cadenas, una por cada línea:

'Hola.'
'Ruby la rompe.'
'5 es mi número favorito... ¿Cuál es el tuyo?'
'Snoopy dice #%^?&*@! cuando le aplastan el dedo del pie.'
'     '
''
Como puedes ver, las cadenas pueden tener puntuación, dígitos, símbolos, y espacios dentro... es decir, pueden contener más que solo palabras. Esa última cadena no tiene nada y podemos llamarla una cadena vacía.

Hemos estado usando puts para imprimir números, intentémoslo con textos:

Código:
puts 'Hola, mundo!'
puts ''
puts 'Adiós.'
Resultado:
Hola Mundo

Adiós
Eso funcionó bien. Ahora inténtalo con algún texto tuyo.

Aritmética de textos
Igual que hacer hacer aritmética con números, ¡tú puedes también hacer aritmética con cadenas! Bueno, algo así... puedes sumar textos, digamos. Intentemos sumar dos textos y ver que hace puts con eso.

Código:
puts 'Me gusta' + 'el pastel de manzana'
Resultado:
Me gustael pastel de manzana
Whoops! Me olvidé de poner un espacio entre 'Me gusta' y 'el pastel de manzana'. Los espacios no importan generalmente salvo si lo hacen dentro de los textos. (Es verdad lo que dicen: las computadoras no hacen lo que tú quieres que hagan, solo lo que tú le dices que hagan) Intentémoslo nuevamente:

Código:
puts 'Me gusta ' + 'el pastel de manzana.'
puts 'Me gusta' + ' el pastel de manzana.'
Resultado:
Me gusta el pastel de manzana
Me gusta el pastel de manzana
(Como puedes ver, no importó a que texto le agregué el espacio)

Así que puedes sumar textos, ¡pero también puedes multiplicarlos! (Por un número ...) Observa esto:

Código:
puts 'parpadeo ' * 4
Resultado:
La computadora te hace ojitos.
(Solo bromeaba, en realidad muestra esto):
parpadeo parpadeo parpadeo parpadeo
Si lo piensas, tiene todo el sentido. Después de todo, 7*3 realmente solo significa 7+7+7, así que 'moo'*3 solo significa 'moo'+'moo'+'moo'.

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

Juguemos con esto un poco:

Código:
puts  12  +  12
puts '12' + '12'
puts '12  +  12'
Resultado:
24
1212
12  +  12
Y qué sucede con esto?:

Código:
puts  2  *  5
puts '2' *  5
puts '2  *  5'
Resultado:
10
22222
2  *  5
Estos ejemplos fueron bastante directos. De cualquier modo, si no tienes cuidado en cómo mezclas tus textos y tus números podrías encontrarte con...

Problemas
En este punto podrías haber probado algunas cosas que no funcionaron. Si no lo has hecho, aquí hay algunas:

Código:
puts '12' + 12
puts '2' * '5'
Resultado:
can't convert Fixnum into String (TypeError)
Hmmm... un mensaje de error. El problema es eque en realidad no puedes sumar un número a un texto, o multiplicar un texto por otro texto. No tiene más sentido que esto:
puts 'Betty' + 12
puts 'Fred' * 'John'
Algo más para tener cuidado: Puedes escribir 'pig' * 5 en un programa, dado que sólo significa 5 veces el texto 'pig' todo sumado. De cualquier modo, tú no puedes escribir 5 * 'pig', ya que eso significa 'pig' veces el número 5, lo cual es simplemente tonto.

Finalmente, ¿qué tal si quisieras imprimir '2° 57' 32"'? Podemos intentar esto:
puts '2° 57' 32"'
Bueno, eso no funcionará; yo ni siquiera intentaría ejecutarlo. La computadora pensó que habíamos terminado con la cadena al llegar después del 57. (Por eso es bueno tener un editor de textos que colorea la sintaxis por ti). Así que, ¿cómo dejamos saber a la computadora que queremos continuar con la cadena? Tenemos que escapar el apostrofo, así:

Código:
puts '2° 57\' 32"'
Resultado:
2° 57' 32"
La diagonal invertida es el carácter de escape. En otras palabras, si tienes una diagonal invertida y otro carácter, a veces este último caracter es transformado en un nuevo carácter. Sin embargo, la diagonal invertida sólo escapa los apostrofes y así misma. (Si piensas acerca de ello, los caracteres de escape siempre deben escaparse a si mismos), Aquí hay algunos pocos ejemplos en orden, creo:

Código:
puts 'diagonal invertida al final de una cadena: \\'
puts 'arriba\\abajo'
puts 'arriba\abajo'

Resultado:
diagonal invertida al final de una cadena: \
arriba\abajo
arriba\abajo

Como la diagonal invertida no escapa una 'a', pero se escapa a si misma, las dos ultimas cadenas son idénticas. No parecen lo mismo en código, pero para tu computadora realmente son lo mismo.

Tanto los números enteros como los números flotantes como las cadenas son los que llamamos objetos.


4 comentarios:

  1. Problema: Acentos y caracteres especiales dan el siguiente error: error multibyte char(US-ASCII).

    Solución: El problema es la codificación del archivo en el que se está trabajando. Por defecto el archivo creado tiene codificación en ANSI. Yo como trabajo con notepad++ tan solo tengo que ir a "codificación" y seleccionar "Codificar en UTF-8" guardas el archivo y debería funcionar.

    ResponderEliminar
    Respuestas
    1. En el bloc de notas cuando le das a guardar como por defecto pone: ANSI, si despliegas donde lo pone da la opcion de seleccionar UTF-8

      Eliminar