Mayo 31, 2024
Primeros pasos con Ruby: Strings y Symbols
ruby strings symbolsEn Ruby, tanto las cadenas de texto (strings) como los símbolos (symbols) son tipos de datos fundamentales. Aunque pueden parecer similares, tienen diferencias importantes en términos de propósito, uso y comportamiento interno. Pueden definirse con comillas simples (‘’) o dobles (“”). Aquí te proporcionaré lo mas importante de estas diferencias y sus usos recomendados.
Strings
Un string es una serie de caracteres o bytes utilizados para almacenar texto o datos binarios. Los strings en Ruby son mutables, es decir, pueden modificarse después de ser creados.
Creación:
string = "I am a string!"
another_string = 'I am also a string!'
Mutabilidad:
Los strings pueden modificarse en Ruby. Cada vez que se crea un string, se asigna un nuevo espacio de memoria y un object_id
único.
:001 > "hello".object_id
=> 70102163173680
:002 > "hello".object_id
=> 70102163111540
Concatenación:
four = "Four "
legs = "legs!"
fourlegs = four + legs # "Four legs!"
Concatenación con +=
y <<
:
four += legs # Modifica la variable original
four << legs # Modifica la variable original
Acceso a Substrings y Caracteres:
string = "This is fun!"
string[1] # "h"
string[-1] # "!"
string = "Potatoes!"
string[4..8] # "toes!"
string[4,5] # "toes!"
Interpolación:
La interpolación solo se puede lograr con las comillas dobles. Ya que las comillas dobles activan un nivel más alto de interpretación en Ruby, mientras que las comillas simples son más literales y no interpretan contenido en ellas. Esto proporciona flexibilidad para manejar diferentes tipos de cadenas según las necesidades del programador.
passes = 6
"I think I got #{passes} bags of doritos today." # "I think I got 6 bags of doritos today."
"The square root of 9 is #{Math.strt(9)}" # "The square root of 9 is 3"
Dividir y Unir cadenas:
string = "Armbar Triangle Omoplata"
drills = string.split # ["Armbar", "Triangle", "Omoplata"]
string = "Justin,Lucy,Otto"
coolfolks = string.split(/,/) # ["Justin", "Lucy", "Otto"]
array = ["Initiate", "ultimate", "passing", "combo"]
strategy = array.join(" ") # "Initiate ultimate passing combo"
Symbols
Un symbol es una serie de caracteres o bytes asociados con un número único (ID) en Ruby. Los symbols son inmutables, lo que significa que solo una copia de un symbol necesita ser creada ya que siempre referencia al mismo objecto en el mismo espacio de memoria, por lo que son eficientes en el uso de espacio.
Creación:
:my_symbol
:another_symbol
Inmutabilidad:
Los symbols no pueden modificarse una vez creados y siempre retornan el mismo object_id
:
a = :hello
b = :hello
a.object_id == b.object_id # true
:001 > :hello.object_id
=> 1266588
:002 > :hello.object_id
=> 1266588
Uso Interno:
Ruby asocia un número ID a cada symbol. Este ID es más eficiente de manejar en comparación con las cadenas de caracteres, especialmente cuando se utilizan repetidamente los mismos valores como claves en hashes o identificadores de métodos.
Intercambiabilidad con Strings:
Ruby permite que los symbols se utilicen en operaciones similares a las strings, pero convierte internamente los tipos según sea necesario. Esto puede llevar a impactos de rendimiento si se realiza la conversión frecuentemente.
Comparación con Strings:
Los symbols son más eficientes cuando se utilizan como identificadores que no cambian, como claves de hashes o nombres de métodos. Las strings, al ser mutables, son más adecuadas para manejar y manipular datos textuales.
Cuándo usar cada Uno
Usar Symbols:
- Cuando se necesitan identificadores constantes.
- Como claves en hashes.
- Para definir métodos o nombres de variables que no cambian.
Usar Strings:
- Para manejar y manipular texto.
- Cuando los valores necesitan ser modificables.
- Para entrada de usuario o datos textuales.
Ejemplos
Symbols como identificadores:
def switch(value)
case value
when :foo
# foo
when :bar
# bar
when :baz
# baz
end
end
Strings para datos textuales:
def append_to(value)
value.gsub(/foo/, 'bar')
end
Comprender las diferencias entre strings y symbols en Ruby es crucial para escribir código eficiente y claro. Utilizar symbols para identificadores constantes y strings para datos mutables y textuales ayuda a optimizar el rendimiento y la claridad del código.