Comentarios

Literales de cuerda

Literales de cuerda

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 unFixnum objeto. En cuanto a los literales de cadena, hay varias formas.

Cadenas de comillas simples y comillas dobles

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 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 la cadena literal que se imprime.

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 ¿qué se imprimirá?

La secuencia de interpolación se pasó sin interpretación.

¿Cuándo debo usar comillas simples y dobles?

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 él 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í.

Secuencias de escape

¿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 invertida 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, de manera confusa, 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 el usuario. Ruby le brinda la capacidad de insertar este tipo de cadenas utilizando el carácter de escape de barra diagonal inversa.

  • n: un carácter de nueva línea. los pone El método hace esto automáticamente, pero si desea insertar uno en el medio de una cadena, o la cadena está destinada a algo diferente al pone método, puede usar esto para insertar una nueva línea en una cadena.
  • t: un carácter de tabulación. El carácter de tabulación mueve el cursor sobre (en la mayoría de los terminales) a un múltiplo de 8, por lo que esto es muy útil para mostrar datos tabulares. Sin embargo, hay mejores formas de hacerlo, y usar el carácter de tabulación se considera un poco arcaico o hackeo.
  • nnn: una barra invertida seguida de 3 números indicará un carácter ASCII representado por 3 dígitos octales. ¿Por qué octal? Principalmente por razones históricas.
  • xnn: una barra diagonal inversa, una x y 2 dígitos hexadecimales. Lo mismo que la versión octal, solo con dígitos hexadecimales.

Probablemente nunca use la mayoría de estos, pero sepa que existen. Y también recuerde que solo funcionan en cadenas entre comillas dobles.

La siguiente página analiza cadenas de varias líneas y una sintaxis alternativa para literales de cadena.

Cuerdas multilínea

La mayoría de los idiomas no permiten literales de cadena de varias líneas, pero Ruby sí. No es necesario finalizar sus cadenas y agregar más cadenas para la siguiente línea, Ruby maneja los literales de cadenas de varias líneas muy bien con la sintaxis predeterminada.

Sintaxis Alterna

Como con la mayoría de los literales, Ruby proporciona una sintaxis alternativa para los literales de cadena. Si está utilizando muchos caracteres de comillas dentro de sus literales, por ejemplo, es posible que desee utilizar esta sintaxis. Cuando usa esta sintaxis es una cuestión de estilo, por lo general no son necesarios para las cadenas.

Para usar la sintaxis alternativa, use la siguiente secuencia para cadenas entre comillas simples% q {...}. Del mismo modo, use la siguiente sintaxis para cadenas de comillas dobles% Q {...}. Esta sintaxis alternativa sigue las mismas reglas que sus primos "normales". Además, tenga en cuenta que puede usar los caracteres que desee en lugar de llaves. Si usa una llave, un corchete, un paréntesis angular o un paréntesis, el carácter correspondiente finalizará el literal. Si no desea usar caracteres coincidentes, puede usar cualquier otro símbolo (cualquier cosa que no sea una letra o número). El literal se cerrará con otro del mismo símbolo. El siguiente ejemplo muestra varias formas de usar esta sintaxis.

La sintaxis alternativa también funciona como una cadena de varias líneas.