Aproveche al máximo Ruby utilizando los métodos .select .map y .reduce juntos

Absolutamente nunca debe repetirse al escribir código. En otras palabras, no te repitas dos veces. Para ser claros, no escriba algo que ya se haya explicado.

Esto se llama tautología, y al escribir código debe evitarse en todo momento. Por ejemplo, ¿no hubiera sido bueno en lugar de leer este extenso párrafo si solo hubiera usado las tres poderosas palabras “nunca, repita usted mismo”?

Bueno, eso es lo que voy a mostrarles cómo hacer con los métodos .select .map y .reduce (o .inject) de Ruby.

Ejemplo

Supongamos que está mirando un diccionario lleno de nombres de empleados, puestos de trabajo y salarios. Imaginemos también que desea averiguar la cantidad total que la empresa gasta en los salarios de los desarrolladores. Ahora, sin usar un solo método en Ruby, lo más probable es que escriba su código de esta manera:

people = [ { first_name: "Gary", job_title: "car enthusiast", salary: "14000" }, { first_name: "Claire", job_title: "developer", salary: "15000" }, { first_name: "Clem", job_title: "developer", salary: "12000" } ] person1 = people[0][:job_title] person2 = people[1][:job_title] person3 = people[2][:job_title] total = 0 if person1 == "developer" total += people[0][:salary].to_i end if person2 == "developer" total += people[1][:salary].to_i end if person3 == "developer" total += people[2][:salary].to_i end puts total

Vaya, son muchas líneas para escribir para encontrar solo tres personas. ¡Imagínese si la empresa empleara a cientos de personas!

Ahora, si sabe un poco acerca de los bucles, entonces el siguiente paso más fácil sería escribir un método de cada uno para juntar todos los salarios. Esto puede ocupar solo cinco o seis líneas, ¡pero mira esto!

puts people.selectx.mapy.reduce(:+)

Notarás que cada método comienza y termina con un corchete. Esto se puede usar en lugar de los comandos do y end si se trata de un bloque de una sola línea.

{} == (do end) #for single-line blocks only

.Seleccione

Comencemos con el método .select. Creamos una variable (x) e iteramos sobre cada método en la matriz de personas. Luego verifica con una expresión booleana si la clave de (: job_title) es igual a la cadena "desarrollador". Si el booleano devuelve verdadero, entonces el método select coloca el hash que devolvió verdadero en un nuevo objeto.

.mapa

El método de mapa se utiliza para crear una nueva matriz que no afecta la matriz por la que se desplaza. Usé este método para crear una nueva variable (y), y luego usé esa variable para tomar el valor de la clave (: salario). Luego, finalmente, convertí ese valor de una cadena en un número entero.

.Reducir

Este probablemente parece el más confuso, así que ampliémoslo un poco.

.reduce(0) sum + indv #is the same as .reduce(:+)

El método de reducción crea una nueva variable a la que usted establece el valor igual en el primer paréntesis (0). Luego, crea dos nuevos valores (suma e indv) de los cuales uno es la suma a la que agrega los salarios individuales.

¡Espero que eso lo explique bien! Por favor hazme saber si tienes preguntas.