Vamos a escribir un programa el cual nos pida escribir tantas palabras como nosotros querramos (una palabra por línea), continuando hasta que oprimamos Enter en una línea vacia), el cual luego nos devolverá las palabras escritas por el usuario en orden alfabetico. OK?
Entonces... nosotros primero vamos; uh... um... hmmm... Bueno, nosotros podríamos; er... um...
Lo cierto es que, como tú, no pienso que seamos capaces de hacer esto. Si lo piensas bien necesitamos una forma de almacenar una cantidad desconocida de palabras y colocarlas en un tipo de lista. Lo que necesitamos son arrays.
Un array es simplemente una lista en su computadora. Cada posición en la lista actúa como una variable: puedes ver que objeto contiene cada posición, y también puedes conseguir que cada posición contenga un objeto diferente. Vamos a echar un vistazo a algunos arrays:
[]Entonces primero tenemos un array vacio, luego un array conteniendo un número simple, luego un array que contiene dos textos. Siguiendo, tenemos una simple asignación, luego un array conteniendo tres objetos, un flotante, un texto y otro array, el array [true, false].
[5]
['Hola', 'Adiós']
sabor = 'vainilla' # Esto no es una matriz, por supuesto...
[89.9, sabor, [true, false]] # ...pero esto sí lo es.
Para ayudarnos a encontrar un objeto particular en un array, cada posición es dada por un índice numérico. Los programadores (y, por cierto, la mayoría de los matemáticos) comienzan contando desde cero, por lo que la primera posicion de un array es cero. Aquí es como nosotros deberíamos referenciar los objetos en un array:
Código:
names = ['Ada', 'Belle', 'Chris']Resultado:
puts names
puts names[0]
puts names[1]
puts names[2]
puts names[3] # Este esta fuera del rango.
AdaEntonces, nosotros vemos que puts names imprime cada nombre en el array names. Luego usamos puts names[0] para imprimir el "primer" objeto que contiene el array y puts names[1] para imprimir el "segundo" objeto ... Estoy seguro que esto parece confuso, pero puedes acostumbrarte a esto. Tienes que realmente solo comenzar pensando que el contador comienza en cero, y dejas de usar palabras como "primero" y "segundo"
Belle
Chris
Ada
Belle
Chris
Si tienes un conjunto de cinco cursos, no hablas acerca del "primer" curso, hablas acerca del curso cero (y en tu cabeza, estás pensando course[0]). Tú tienes cinco dedos en tu mano derecha, y sus números son 0, 1, 2, 3 y 4. Sabrás que lo has aprendido cuando comiences a usar la palabra "cero". Sí, esto es real; pregunta a cualquier programador o matemático.
Finalmente, tratamos puts names[3], solo para ver que podría suceder. ¿Estabas esperando un error? Algunas veces cuando preguntas algo, tu pregunta no tiene sentido (al menos para tu computadora); ahí es cuando obtienes un error. Algunas veces, en cambio, tu puedes preguntar algo y la respuesta es nada. ¿Qué hay en la posición tres? Nada. ¿Qué hay en names[3]? nil: es la forma Ruby de decir "nada". nil es un objeto especial que significa "no hay ningún objeto".
Si todo este divertido numerado de posiciones esta molestándote, ¡no te preocupes! También, podemos evitar esto completamente usando varios metodos para arrays, como el que sigue:
El Metodo 'each'
each nos permite hacer algo (lo que queramos) a cada objeto que apunte. Asi, si queremos decir algo bueno acerca de cada lenguaje en el array de abajo, podriamos hacer esto:
Código:
lenguajes = ['Inglés', 'Alemán', 'Ruby']Resultado:
lenguajes.each do |leng|
puts '¡Me gusta ' + leng + '!'
end
puts 'Y el C?'
puts '...'
¡Me gusta Inglés!¿Qué acaba de ocurrir? Bueno, está permitido ir pasando por cada objeto del array sin utilizar ningun número. Traducido al español diriamos que: para cada (each) objeto en el array lenguajes, haz que la variable leng contenga dicho objeto y entonces haz (do) todo lo que te digo, hasta que llegues al end. (Como ya sabes, C es otro lenguaje de programación que es mucho mas difícil de aprender que Ruby; por lo general, un programa hecho en C será muchas veces más extenso que un programa en Ruby que haga la misma funcionalidad)
¡Me gusta Alemán!
¡Me gusta Ruby!
Y el C?
...
Estarás pensando para ti mismo, "Esto es un montón de bucles como los que hemos aprendido antes". Sí, esto es similar. Una diferencia importante es que el método each es solo eso: un método. while y end; tal como do, if, else, y todas las otras "palabras" no lo son. Ellos son una parte fundamental del lenguaje Ruby, tal como '=' y los paréntesis son tipos de puntuación como en español.
Pero no each; each es solo otro método de los arrays (como to_s era un método de los números enteros). Métodos como each que 'actuan como' bucles son a menudo llamados iteradores.
Algo para saber sobre iteradores es que estos son siempre seguidos por do...end. while e if nunca tuvieron un do cerca de ellos; nosotros solo usamos do con iteradores.
Aquí hay otro pequeño iterador, pero esto no es un método para un array... es un método para entero!
Código:
3.times doResultado:
puts 'Hip-Hip-Hooray!'
end
Hip-Hip-Hooray!
Hip-Hip-Hooray!
Hip-Hip-Hooray!
Mas métodos para arrays
Entonces hemos aprendido sobre each, pero hay muchos métodos más... al menos muchos métodos para arrays. De hecho, algunos de ellos (como length, reverse, +, y *) trabajan igual que lo hacen para textos, excepto que ellos operan sobre las posiciones de una matriz y no sobre las letras de un texto. Otros, como last y join, son específicos de arraus. Y además hay otros, como push y pop, que en realidad cambian el array. Y así como con métodos para textos, no tienes que recordar todos, puedes recurrir a buscar sobre ellos consultando información en Internet.
Primero, vamos a echar un vistazo a to_s y join. join trabaja tal como to_s lo hace, excepto que este agrega un texto entre los objetos de la matriz. Vamos a mirar un poco:
Código:
alimentos = ['artichoke', 'brioche', 'caramel']Resultado:
puts alimentos
puts '...'
puts alimentos.to_s
puts '...'
puts alimentos.join(', ')
puts '...'
puts alimentos.join(' :) ') + ' 8)'
200.times do
puts []
end
artichokeComo puedes ver, puts trata el array diferente a otros objetos: solo llama puts sobre cada uno de los objetos en la matriz. Esto es porque puts con un array vacío 200 veces no hace nada; el array no apunta a nada; entonces no hay nada para puts. (Hacer nada 200 veces continúa siendo hacer nada)
brioche
caramel
...
["artichoke", "brioche", "caramel"]
...
artichoke, brioche, caramel
...
artichoke :) brioche :) caramel 8)
Trata de usar puts en una matriz conteniendo otras matrices; ¿hace lo que esperabas que hiciera?
Ahora vamos a echar un vistazo a push, pop, y last. Los métodos push y pop son una suerte de métodos opuestos como lo son + y -. push agrega un objeto al final del array, y pop quita el último objeto del array (y te dice que objeto es). last es similar a pop en el sentido que te indica que hay al final del array, excepto que este deja la matriz como estaba. push y pop en realidad cambian el array:
Código:
favoritos = []Resultado:
favoritos.push 'lluvia de rosas'
favoritos.push 'whisky en gatitos'
puts favoritos[0]
puts favoritos.last
puts favoritos.length
puts favoritos.pop
puts favoritos
puts favoritos.length
lluvia de rosas
whisky en gatitos
2
whisky en gatitos
lluvia de rosas
1
0 comentarios:
Publicar un comentario