Underc0de - Hacking y seguridad informática

Foros Generales => Talleres Underc0de => Mensaje iniciado por: ANTRAX en Octubre 04, 2014, 05:03:11 pm

Título: Taller Programación en Ruby #1
Publicado por: ANTRAX en Octubre 04, 2014, 05:03:11 pm
(https://lh5.googleusercontent.com/-Dc9g2yDm7pA/VDBJ_sH7XFI/AAAAAAAACMs/AXjw73iCUR4/w380-h553-no/Programaci%C3%B3n%2Bruby%2B1.png)

Antes de empezar

Hola a todos y bienvenidos a esta serie de talleres sobre RUBY, en donde iremos aprendiendo por etapas cada uno de los detalles sobre este lenguaje.

Particularmente, en esta primera edición, empezaremos describiendo un poco a RUBY y viendo su instalación, para luego poder entrar a lo que es el código propiamente dicho.

Al final de cada edición se propondrán diferentes ejercicios para practicar lo aprendido, y en el transcurso de unos días, a partir de su lanzamiento, proporcionaremos un video con una posible solución.
Empecemos…


¿Qué es RUBY?

RUBY es un lenguaje interpretado, es decir no necesita ser procesado mediante un compilador. Flexible, permite a los usuarios modificar cualquier aspecto  de RUBY y al estar completamente orientado a objetos, ve a todo como un objeto.

Además, RUBY termina siendo un lenguaje multiplataforma y con una sintaxis muy simple.


Instalación

Para obtener RUBY, puedes descargarlo desde la página oficial:

https://www.ruby-lang.org/es/

(https://lh3.googleusercontent.com/-JFzRezj_fHM/VDBJnT2ZTwI/AAAAAAAACJ8/F3Ge-xmMRhc/w446-h340-no/1.png)

En el enlace anterior,  podrán encontrar el código fuente y asi compilarlo uno mismo, con la posibilidad de hacer configuraciones específicas que sean necesarias en el entorno.

En el caso de utilizar WINDOWS, existe un proyecto para ayudarte a instalar RUBY y que se llama RUBYINSTALLER. Se descargan desde http://rubyinstaller.org/downloads/ la versión que deseen (hoy en día la última versión es la 2.1.3). Luego ejecutan el instalador, y siguen los pasos de instalación hasta finalizar.

Por último, si utilizan LINUX pueden utilizar el gestor de paquetes para instalarlo.

Desde DEBIAN o UBUNTU ponen en la terminal:

(https://lh6.googleusercontent.com/-VdHber0I5Ks/VDBJue6ByAI/AAAAAAAACLE/bAbtmaeff0c/w332-h37-no/2.png)

Y obtendrán la última versión.


IRB

IRB es el intérprete de RUBY, permite ingresar comandos o bloques de código que posteriormente serán ejecutados por RUBY.

Para ejecutarlo basta con ir a la terminal e introducir irb.

(https://lh3.googleusercontent.com/-F_Bvb_ZodXE/VDBJxGlJcYI/AAAAAAAACMc/kmpGF2bQPAU/w240-h48-no/3.png)

¿Qué sucederá si introducimos una cadena de caracteres?

(https://lh4.googleusercontent.com/-55kTFnL_PM8/VDBJxf7hOwI/AAAAAAAACL8/3-yKG7I0YFA/w301-h80-no/4.png)

¿Y si es un número?

(https://lh6.googleusercontent.com/-XFqSxSdLtho/VDBJxmmuLeI/AAAAAAAACMA/orlcKtdJv2I/w179-h61-no/5.png)

En ambas ocasiones el resultado es similar, nos devolvió lo que habíamos ingresado. Y esa es la forma que tiene el intérprete para decirnos el resultado de la última expresión evaluada.

Podemos usar el IRB para evaluar operaciones aritméticas:

(https://lh4.googleusercontent.com/-gpMbyAg-pns/VDBJyE7TTkI/AAAAAAAACMY/N3tRwtG-4T0/w204-h100-no/6.png)

También podemos usar variables y operar con ellas:

(https://lh4.googleusercontent.com/-phqtbuvdouk/VDBJyMBL96I/AAAAAAAACMQ/lxse3rHblyI/w214-h204-no/7.png)

Como podrán ver, el uso del intérprete es muy sencillo. Sin embargo, para el transcurro de los talleres usaremos un editor de texto para generar los diferentes script con extensiones ‘.rb’ y luego ejecutarlos a través del intérprete o con el comando RUBY en la terminal.


Primer Programa

Para iniciarnos  con el código haremos nuestro primer programa,  que no es ni más ni menos que el clásico ‘Hola Mundo’. Al mismo tiempo, es una excusa como para introducir el tema de salida de datos por pantalla.

Abrimos algún editor de texto y ponemos:

(https://lh3.googleusercontent.com/-PnvonbycseU/VDBJyqWojmI/AAAAAAAACMU/lcivj_uTcJM/w325-h137-no/8.png)

Guardamos -con algún nombre- seguido de la extensión ‘.rb’.

Abrimos la terminal, nos dirigimos al directorio donde guardamos el archivo y lo ejecutamos de la siguiente forma:

(https://lh3.googleusercontent.com/-qul6GLalEQo/VDBJzEXRlzI/AAAAAAAACMk/RP-xK2LVpSQ/w265-h87-no/9.png)

Y obtenemos nuestra frase como salida en pantalla.

(https://lh6.googleusercontent.com/-bIhsZPGKvHo/VDBJnGwrFAI/AAAAAAAACJ4/OHjPtQ6sfXM/w499-h78-no/10.png)

Por lo tanto, podemos determinar que la función de puts es imprimir en pantalla lo que se le pase como parámetro, en esta ocasión una cadena de caracteres.

Además de puts, se puede utilizar print que tiene un resultado muy similar, pero con la siguiente principal diferencia:

Veamos que obtenemos si ejecutamos estos dos códigos:

(https://lh4.googleusercontent.com/-JREuVFvwlRE/VDBJnPBGZdI/AAAAAAAACJ0/ayrbACX0tUk/w571-h108-no/11.png)

En ambos, estamos usando dos líneas para imprimir las mismas cadenas de caracteres, uno utilizando puts y el otro print, pero la salida es:

(https://lh4.googleusercontent.com/-olCr0032nHI/VDBJodVOe1I/AAAAAAAACKI/LNABnAR266o/w571-h55-no/12.png)

(https://lh6.googleusercontent.com/-UNd6evno7Ac/VDBJoqjgdmI/AAAAAAAACKM/V3qo0pY4MMY/w442-h77-no/13.png)

Como se puede observar, cuando se utilizó print, a pesar de haberlo usado dos veces las cadenas están una al lado del otro. Mientras que con puts, hay una nueva línea después de cada utilización.


Variables y Constantes

Variables

Una variable no es más que un espacio en memoria que se reserva para almacenar datos. En particular, en RUBY, a diferencia de muchos otros lenguajes no es necesario definir el tipo de datos.

Las variables son creadas en el momento de darles un valor y toma el ‘tipo’ del valor que se le asigna.

A la hora de darles un nombre hay que tener en cuenta algunas reglas:

•   No puede contener espacios en blanco.
•   No puede comenzar con un número.
•   No puede ser una palabra reservada, tales como end, if, def, class, etc.
•   Debe empezar con una letra en minúscula. Preferentemente todo en minúsculas.

Ahora, veremos algunos ejemplos:

(https://lh6.googleusercontent.com/-P6RLaU_SGvk/VDBJpc8bblI/AAAAAAAACKY/YiMR8jY4p7I/w571-h159-no/14.png)

En este programa, en la primera línea creamos una variable llamada varCadena y que almacena una cadena de caracteres. En la segunda línea en cambio creamos otra variable, varNumerica, pero esta vez almacena un número.

Luego en las líneas 4, 5 y 6 hacemos uso de print y puts para mostrar algunos mensajes en pantalla.

Veamos el resultado:

(https://lh4.googleusercontent.com/-zjfxEVFEroM/VDBJqTx3_3I/AAAAAAAACKc/aa49pbZpeHI/w571-h87-no/15.png)

Podemos observar como en la línea 4 y 6 se imprime el valor almacenado que tenían las variables.

Ahora, en este segundo ejemplo:

(https://lh5.googleusercontent.com/-ZO6k6-hBBiw/VDBJsXHThfI/AAAAAAAACKk/lMafom2xRIY/w400-h250-no/16.png)

Nos va a dejar -bien en evidencia- la independencia que existe en las variables y el tipo de datos.

Ya que como podrán ver en la línea 1 creamos una variable que almacena un número y en la línea 2 creamos otra variable pero que contiene una cadena de caracteres.

Ya en las líneas 7, 8 y 9 usamos una variable auxiliar para hacer el intercambio de valores entre las otras dos variables creadas primero. Esta acción, en cualquier otro lenguaje en donde al momento de declarar una variable se le asigna un tipo de datos, sería imposible hacerlo directamente.

En las líneas 4 y 5 -que son iguales a la 11 y 12- imprimimos en pantalla los valores de las variables para comprobar el exitoso intercambio de valores. Podrán observar algo nuevo en estas líneas y que son los #{var}. Estos símbolos #{} dentro de unas dobles comillas realizan una evaluación de lo que se encuentra dentro de las llaves.

Veamos si funciona bien:

(https://lh5.googleusercontent.com/-madTHM9pgS0/VDBJtUeE_JI/AAAAAAAACKs/pGQTkIUe87g/w529-h125-no/17.png)

Todo sin problemas.

Constantes

Las constantes, son espacios en memoria para almacenar datos, pero con la particularidad de que su valor no debería cambiar. Se crean al igual que las variables, cuando se les asigna un valor y comúnmente se las nombra con la primera letra en mayúscula o mejor todo en mayúscula.

En la versión actual de RUBY intentar cambiar el valor de una variable genera una advertencia, pero no da un error.

Ejemplo:

(https://lh5.googleusercontent.com/-EAX3tHCdGmk/VDBJtjlWGOI/AAAAAAAACK0/Irunu4y1S2E/w432-h132-no/18.png)

Creamos una constante con un valor inicial y luego cambiamos su valor. Si lo ejecutamos nos daría la advertencia pero igual reasignaría su valor.

(https://lh6.googleusercontent.com/-v1gaeWsxGdU/VDBJudfFHlI/AAAAAAAACLA/68yj_viWpJ4/w571-h94-no/19.png)


Ejemplo integrador

Antes de ver un ejemplo que incluya todo lo visto, hablemos un poco sobre la entrada de datos. En RUBY está el método gets que realiza dicha función, obtener lo que se ingresa por teclado. El único inconveniente es que además almacena el carácter de retorno de carro (\n), para solucionar eso existe el método chomp que su función es borrar dicho carácter de la cadena.

Veamos un ejemplo de su utilización:

(https://lh4.googleusercontent.com/-LZYhHM46WdA/VDBJu6AD_EI/AAAAAAAACLU/2YQHhPt88yY/w554-h99-no/20.png)

El mismo código, uno utilizando gets y el otro gets.chomp, ambos guardan lo que se ingresa en una variable. Las demás líneas son salidas en pantalla con print como vimos anteriormente.

Ejecutamos ambas y tenemos:

(https://lh4.googleusercontent.com/-AB--F38igfk/VDBJvfvu1UI/AAAAAAAACLY/hWIAbv_BQlg/w483-h88-no/21.png)

(https://lh4.googleusercontent.com/-ypUUfayA284/VDBJvZghzeI/AAAAAAAACLc/TzHT96v_tuo/w519-h72-no/22.png)

Como sabemos, print no agrega una nueva línea al final; por lo tanto, cuando utilizamos el gets existe una nueva línea en el último print, y que es de la cadena obtenida por teclado. Sin embargo, con el gets.chomp se ve claramente que la nueva línea ya no existe.

Ahora si, el enunciado del ejemplo integrador dice asi:

“Se desea hacer un programa que pida al usuario los siguientes datos: apellido, nombre, fecha de nacimiento, edad. Luego de que se hayan ingresado todos los datos se informan, mediante salidas en pantallas, lo obtenido.”

Si analizamos rápido el enunciado nos daremos cuenta que para el ingreso de datos vamos a necesitar del uso de gets, para las salidas en pantalla puts o print y además necesitaremos de diferentes variables para guardar los datos.

Una posible solución seria:

(https://lh3.googleusercontent.com/-c4f2ccWeKrs/VDBJwAXYc3I/AAAAAAAACLk/SA-CPG25iMo/w418-h303-no/23.png)

El programa hace de forma iterada un print, en donde se detalla el dato que se desea, seguido de una línea en donde se almacena en una variable lo obtenido por teclado con gets.chomp. Se hace eso por cada dato que se quiere. Luego mediante diferentes puts se va informando lo que se guardó en cada variable.

Ejecutamos y...

(https://lh3.googleusercontent.com/-WutSEOOFRp8/VDBJxcH7zDI/AAAAAAAACL4/WSqhznjM2tY/w571-h219-no/24.png)

Todo funciona a la perfección.


Ejercicios para practicar

1.   Realice un programa que pida al usuario ingresar su nombre o Nick e imprima un saludo de la forma “Hola (nombreOnick). Espero que te haya gustado el primer taller de Ruby”

2.   Dicho programa, imprima en una línea el titulo “Ejercicio para practicar nro 2”, deje una línea en blanco y luego pida al usuario que ingrese su Nick, deja nuevamente una línea en blanco  y muestra la frase “Gracias por visitar Underc0de (Nick)”

Descargar PDF (http://underc0de.org/talleres/Taller_Ruby_1.pdf)

Solución a ejercicios (https://www.youtube.com/watch?v=Ajv_v7bSnms)
Título: Re:Taller Programación en Ruby #1
Publicado por: blackdrake en Octubre 04, 2014, 05:18:06 pm
Como siempre buenisimo, buen trabajo Expermicid :D

Un saludo.
Título: Re:Taller Programación en Ruby #1
Publicado por: facufangio en Octubre 04, 2014, 07:39:12 pm
Expermicid


Excelente trabajo esta muy bueno, descargando para practicar un poco!


Saludos
Título: Re:Taller Programación en Ruby #1
Publicado por: Gabriela en Octubre 05, 2014, 12:14:00 am
Te quedó muy bien.

Gracias por ayudar a crecer.

G.
Título: Re:Taller Programación en Ruby #1
Publicado por: Expermicid en Octubre 07, 2014, 09:42:13 pm
Ya está el video con una solución a los ejercicios propuestos.

Saludos
Título: Re:Taller Programación en Ruby #1
Publicado por: ilkunst en Octubre 25, 2014, 08:53:29 pm
Muchas gracias, esta semana decidi por este lenguaje... Tiene muy buenos comentarios y es moderno. Saludos
Título: Re:Taller Programación en Ruby #1
Publicado por: Kil0 en Octubre 25, 2014, 09:16:13 pm
Excelente compa, Sencillo y bien explicado

Te dejo un +1

Saludos  :)
Título: Re:Taller Programación en Ruby #1
Publicado por: KidFlash en Junio 26, 2015, 01:31:19 pm
Excelente trabajo esta muy bueno, descargando   :D
Título: Re:Taller Programación en Ruby #1
Publicado por: m86d19o en Julio 12, 2016, 11:06:52 pm
Muy buen taller!!! espero ansioso más talleres de Ruby. En algún momento saldrá algo de Ruby on Rails? ahí sin duda me hago fans tuyo jajaja.