Los objetos de cadena contienen secuencias ordenadas de bytes, generalmente caracteres, generalmente para formar fragmentos de texto legible por humanos. Son un tipo de objeto muy común en todos los lenguajes de programación, y Ruby tiene varias formas de alto nivel y algunas de bajo nivel para crear, acceder y manipular objetos String.
Las cadenas se crean con mayor frecuencia con un Cadena literal. Un literal es una sintaxis especial en el lenguaje Ruby que crea un objeto de un tipo específico. Por ejemplo, 23 es un literal que crea un Fixnum objeto. En cuanto a los literales de cadena, hay varias formas.
La mayoría de los idiomas tienen un literal de cadena similar a este, por lo que puede resultarle familiar. Los tipos de comillas, '(comilla simple, apóstrofe o cita dura) y "(comillas dobles o cita suave) se utilizan para encerrar literales de cadena, cualquier cosa entre ellos se convertirá en objetos de cadena. El siguiente ejemplo demuestra esto.
Pero hay algunas diferencias entre comillas simples y dobles. Comillas dobles o citas suaves permitir que ocurra algo de magia detrás de escena. Lo más útil es la interpolación dentro de las cadenas, útil para insertar el valor de una variable en el medio de una cadena. Esto se logra utilizando el # ... secuencia. El siguiente ejemplo le pedirá su nombre y lo saludará, usando la interpolación para insertar su nombre en el literal de cadena que está impreso.
Tenga en cuenta que cualquier código puede ir dentro de las llaves, no solo los nombres de las variables. Ruby evaluará ese código y lo que sea devuelto intentará insertarlo en la cadena. Entonces podrías decir con la misma facilidad "Hola, # gets.chomp" y olvidarse del nombre variable. Sin embargo, es una buena práctica no poner expresiones largas dentro de las llaves.
Comillas simples, apóstrofes o citas duras Son mucho más restrictivos. Dentro de las comillas simples, Ruby no realizará interpolaciones ni secuencias de escape que no sean el carácter de comillas simples y la barra diagonal inversa (\ ' y \\ respectivamente). Si no tiene intención de utilizar la interpolación, se recomienda utilizar comillas simples la mayoría de las veces.
El siguiente ejemplo intentará interpolar una variable dentro de comillas simples.
Si ejecuta esto, no obtendrá ningún error, pero lo que se imprimirá?
La secuencia de interpolación se pasó sin interpretación.
Esto es una cuestión de estilo. Algunos prefieren usar comillas dobles todo el tiempo a menos que se vuelvan inconvenientes. Otros prefieren usar comillas simples a menos que se intente el comportamiento de interpolación. No hay nada inherentemente peligroso sobre el uso de comillas dobles todo el tiempo, pero hace que algunos códigos sean más fáciles de leer. No necesita leer una cadena al leer el código si sabe que no hay interpolaciones en ella porque sabe que la cadena en sí no tendrá ningún efecto secundario. Entonces, la forma literal de cadena que use depende de usted, no hay una forma correcta o incorrecta aquí.
¿Qué sucede si, en un literal de cadena, desea incluir un carácter de comillas? Por ejemplo, la cadena "Steve dijo" ¡Moo! " no funciona Y tampoco lo hará '¡No puedo tocar esto!'. Ambas cadenas incluyen el carácter de comillas dentro de la cadena, terminando efectivamente el literal de la cadena y causando un error de sintaxis. Puedes cambiar los caracteres de comillas, como 'Steve dijo "¡MOO!", pero eso realmente no resuelve el problema. En cambio, puede escapar de cualquier carácter de comillas dentro de la cadena, y perderá su significado especial (en este caso, el significado especial es cerrar la cadena).
Para escapar de un personaje, agrégalo con el carácter de barra diagonal inversa. El carácter de barra diagonal inversa le dice a Ruby que ignore cualquier significado especial que pueda tener el siguiente personaje. Si es un carácter de comilla coincidente, no termine la cadena. Si es un signo hash, no comience un bloque de interpolación. El siguiente ejemplo demuestra este uso de la barra diagonal inversa para escapar de caracteres especiales.
El carácter de barra diagonal inversa se puede utilizar para eliminar cualquier significado especial del siguiente carácter, pero, confusamente, también se puede utilizar para denotar un comportamiento especial en cadenas de comillas dobles. La mayoría de estos comportamientos especiales tienen que ver con la inserción de caracteres y secuencias de bytes que no se pueden escribir o representar visualmente. No todas las cadenas son cadenas de caracteres o pueden contener secuencias de control destinadas al terminal, y no al usuario. Ruby le brinda la capacidad de insertar este tipo de cadenas utilizando el carácter de escape de barra invertida.
Probablemente nunca use la mayoría de estos, pero sepa que existen. Y también recuerde que solo funcionan en cadenas entre comillas dobles.