Una introducción a los operadores * Splat y doble ** Splat de Ruby

Una introducción a los operadores * Splat y doble ** Splat de Ruby

¿Alguna vez ha querido definir un método sin saber cuántos argumentos se necesitan? ¿Pasas largas noches inquietas deseando que haya una manera fácil de separar una lista en un hash? Bueno, no busques más, ¡los operadores de símbolos de Ruby! Hay tantas cosas geniales que puedes hacer con estos, pero solo voy a repasar los conceptos básicos más algunos trucos interesantes que he descubierto.

Único * Splat

El operador de splat tiene usos casi infinitos. Pero la idea principal es que siempre que no desee especificar la cantidad de argumentos que tiene, debe usar un operador de splat. El ejemplo más simple sería algo como esto:

Otra cosa útil es que el operador splat puede hacer una matriz con varios argumentos:

arr = ["first", "second", "third"]def threeargs(*arr)#makes three arguments

También puede usar el operador splat para tomar cualquier segmento de una matriz:

first, *rest, last = ["a", "b", "c", "d"]p first # "a"p rest # ["b", "c"]p last # "d"

Notarás que la variable rest sigue siendo una matriz, lo cual es muy útil. Y así, siguiendo el último ejemplo, aún puede hacer cosas como esta:

first, *rest, last = ["a", "b", "c", "d"]p rest[0] # "b"

Esos son los conceptos básicos del operador de un solo símbolo, pero le insto a que lo juegue más. Puede hacer cosas como combinar matrices, convertir hashes y cadenas en matrices o extraer elementos de una matriz.

Doble ** Splat

El operador de doble símbolo apareció en Ruby 2.0. Es bastante similar al splat original con una diferencia: ¡se puede usar para hashes! Aquí hay un ejemplo del uso más básico de un símbolo doble.

def doublesplat(**nums) p **numsenddoublesplat one: 1, two: 2 # {:one=>1, :two=>2}

Poniendolo todo junto

Espero que puedas ver que las posibilidades son infinitas al usar estos dos juntos. Lo principal a tener en cuenta es que utiliza símbolos como parámetro en un método cuando no está seguro de cuántos argumentos utilizará ese método.

Por último, hice una pequeña función que muestra cómo se puede filtrar cualquier argumento que no sea un par clave-valor utilizando tanto un símbolo único como un símbolo doble.

def dubSplat(a, *b, **c) p cenddubSplat(1,2,3, 4, a: 40, b: 50)#{:a=>40, :b=>50}

Gracias por leer, ¡y ahora prueba a jugar con él tú mismo!