Você está na página 1de 61

Capacitación formadores Generación de

capacidades en el Ecosistema Digital de


Bogotá

Formación especializada TI
Ruby
¿Qué es Ruby?
Un lenguaje de programación dinámico y de código abierto enfocado en la
simplicidad y productividad. Su elegante sintaxis se siente natural al leerla y fácil
al escribirla.
Características de Ruby
● Interpretado
● Sin putos y coma
● Tipado dinámico
● Todo es un objeto
● Muy productivo
● Puedes reescribir el lenguaje
Usos de Ruby
● Crear aplicaciones Web (Ruby on Rails)
● Utilidades de terminal
● Apps moviles (RubyMotion)
● Aplicaciones de escritorio con interfaces graficas
Quienes han usado Ruby
● Basecamp
● Github
● Heroku
● Airbnb
● Digitalocean
● Square
● Tumblr
● Twitter
Instalación
● https://rubyinstaller.org/
● http://railsinstaller.org
Variables
No se definen tipo, ni se usa una palabra reservada para indicar que es una variable.

Se recomienda usar el estándar snake_case para definir variables que su nombre esta
compuesto por más de una palabra. CamelCase se usa solo para definir clases.

La primer letra del nombre de la variable no debe iniciar en mayúsculas. Se usa la primera
en mayúscula únicamente para definir constantes.
Números
Podemos trabajar con números enteros y con números flotantes. Para indicar
que estamos trabajando con números flotantes el numero debe contener el
separador de decimales punto (.)

Las operaciones entre enteros siempre da como resultado valores enteros. Si el


resultado no es un entero el lenguaje de programación lo aproxima.
Conversión de números
Para convertir los números de entero a flotante o viceversa podemos hacer uso
de las funciones to_f y to_i

Como se puede apreciar sobre los números se pueden ejecutar diferentes


funciones ya que recordemos en Ruby todo son objetos.
Cadenas de textos
Las cadenas de caracteres en Ruby se pueden definir usando comillas dobles (“)
o comillas simples (‘)

Para concatenar cadenas se debe usar el operador más (+).


Interpolación
A la cadenas de caracteres también se les puede aplicar un proceso en Ruby
llamado interpolación, que consiste básicamente en representar código de Ruby
dentro de cadenas de texto.
Carácter de escape
En Ruby al igual que en otro lenguajes podemos usar un carácter para omitir
ciertos caracteres al momento de imprimir(mostrar por pantalla) generalmente
con una combinación de este carácter con otros obtenemos por ejemplo saltos
de línea. El carácter del escape en Ruby es el slash invertido (\).

Este carácter funciona como escape únicamente en cadenas de texto definidas


entre comillas dobles, en comillas sencillas se imprime todo.
.methods
Recordemos que en Ruby todo funciona como objetos y en Ruby existen gran
cantidad de métodos ya desarrollados para trabajar con ellos, si deseas conocer
que métodos puedes ejecutar sobre algún tipo de dato en particular puedes
invocar el método methods y este retornara un listado de los métodos
disponibles.
Entrada y salida
Para capturar un dato desde la consola debemos hacer
uso de la función gets, esta se usa asignando esta
función a una variable.
Hay que tener en cuenta que gets retorna lo que se
capture por teclado, pero adicional siempre agrega un
salto de línea en la cadena y ese carácter cuenta. Todo
lo que captura gets se asume como una cadena de
caracteres.

Como hemos visto en las pasada diapositivas el


modelo de mostrar datos de salida en la consola es por
medio del comando puts. También existe la función
print para imprimir pero este no imprime un salto de
línea al final.
Para evitar el comportamiento anteriormente mencionado de gets en el cual
captura siempre el salto de línea, podemos hacer uso del método chomp, el cual
elimina el ultimo carácter de una cadena.
Comentarios
En Ruby el modo de agregar comentarios a nuestro código es por medio del
carácter numeral (#) lo cual agrega como comentario una sola línea enseguida
de este carácter.

Si queremos agregar comentarios en bloque debemos iniciar con =begin y


terminar con =end teniendo en cuenta que se debe inciar desde el borde la
pagina es decir sin tabulación.

Este segundo modo casi no se usa y no se recomienda.


Operadores
Precedencia de operadores:
● Aritméticos

○ Suma (+) 1. Potencia


○ Resta (-)
2. Multiplicación, División y Modulo
3. Suma y resta
○ Multiplicación (*)

○ División (/) Las operaciones se ejecutan de izquierda a derecha


pero teniendo en cuenta la anterior jerarquía.
○ Modulo (%)

○ Potencia (**)
Operadores
● Comparación

○ Mayor que (>) Si se acomodan dos objetos de la siguiente manera 10 > 5 si efectivamente el primero es mayor que el segundo Ruby
retornara true y en cualquier otro caso false.

○ Menor que (<) Si se acomodan dos objetos de la siguiente manera 10 <5 se evalúa que el primero sea menor que el segundo, si se
cumple se retorna true en cualquier otro caso retornara false.

○ Comparación de objetos (< = >) Si se acomodan dos objetas de esta manera 10 <=> 5 se evaluara si son iguales, en cuyo caso
retornara 0, si el de la derecha es mayor retornara 1 y en caso contrario -1

○ Igualdad (==) Compara si dos objetos son iguales y retorna true si se cumple o false en cualquier otro caso.

○ Diferencia (!=) compara si dos objetos son diferentes en cuyo caso retornara true y en cualquier otro false.

○ eql?() compara igualdad teniendo en cuenta el tipo.

○ equal?() compara objetos por id (object_id)


Operadores
● Lógicos

○ And (&&) Compara que dos o más operaciones retornen true en cuyo caso este retornara
también true y en cualquier otro caso false

○ Or (||) Compara que al menos una de las operaciones retornen true en cuyo caso este
retornara true y en cualquier otro caso false

○ Not (!) actúa como inversor es decir cambia un resultado de true a false y viceversa.
Condiciones
● If
Condiciones
● Else ● ElseIf
Condiciones
● Unless

Es un condicional inverso al If, en este se ejecuta el bloque de código si la


condición a evaluar da false. No se suele usar anidado con if o else.
Case
Es una estructura que permite validar varios casos como los switchs en otros
lenguajes. Básicamente es una serie de if y elseif.
Arreglos
Se definen de manera similar a las variables pero debemos inicializarlo con los valores entre [ ]. En
estos podemos almacenar cualquier tipo de objeto dentro.

arreglo= [ 3, ‘Perro’ , true]

Podemos acceder a los diferentes elementos de un arreglo indicando su posición.

puts arreglo[1] ##Perro

Para insertar nuevos elementos a un arreglo podemos usar el operador << y enseguida el elemento a
insertar.

arreglo << ‘hola’


Iterar arreglos
Ciclo each

Este iterador nos permite recorrer uno a uno los elementos de una arreglo. Se
usa invocando el método each sobre un arreglo, luego debe ir la palabra
resevada do y a continuación como argumento un nombre para la referencia de
la posición en el bloque.
Operaciones con arreglos
Podemos multiplicar los arreglos por medio del operador asterisco(*) y este nos
repetirá el arreglo el numero de veces que lo multipliquemos.

También podemos usar join() para convertir un arreglo en una cadena y en el


parámetro de join debemos indicar el separador para cada uno de los elementos.

También podemos ordenar los arreglos por medio del método sort, además
también podemos invertir el orden usando sort.reverse
Operaciones con arreglos
Otra operación que podemos realizar con los arreglos es buscar un elemento,
para esto se usa el método include?() y como argumento debemos pasar el valor
a buscar. Este método retorna true o false.

Para obtener el primer o ultimo elemento de un arreglo tenemos los métodos


firts o last.

Para eliminar elementos repetidos de un arreglo podemos usar el método uniq


Rangos
Es un método similar a los ciclos for de otros lenguajes. Este método itera un
bloque de código según el rango que indiquemos. Si queremos avanzar en más
de un número por iteración podemos agregar el método step(), por ejemplo para
avanzar de dos en dos
While
El iterador while en Ruby funciona de manera similar a otros lenguajes. Usamos
la palabra reservada while y enseguida agregamos a la condición a evaluar, se
iterara el bloque de código mientras se cumpla la condición.
Do while
La sintaxis del do while difiere un poco con otros lenguajes, el ciclo debe iniciar
con begin y al final en el end debe tener enseguida la palabra while, así:
Otros iteradores
● Times
● upto
● downto
Matrices
Hablamos de matrices cuando nuestros arreglos tienen más de una dimensión,
es decir cuando encontramos arreglos en una posición de otro arreglo. Pero los
arreglos internos deben contener la misma cantidad de elementos para se
considerado matriz.
Métodos de matrices
● Diagonal
● Bajo la diagonal
● Sobre la diagonal
Hashes
Son básicamente arreglos con índices, son similares a los objetos en javascript.
Definimos un diccionario con una clave y su valor correspondiente.

El modo de acceder a un índice es indicándolo en medio de llaves.


Hashes
Para agregar elementos a un arreglo basta con definir un índice a la variable y
asignarle un valor.

Si hacemos un each sobre un hash podemos pasar dos argumentos, uno para la
clave y otro para el valor.
Métodos de hash
● length o size
● has_key?()
● keys o key(“un valor”)
● values
● clear
● delete()
● empty?
● Invert
● hash.merge(otro_hash)
Símbolos
Son cadenas inmutables, es decir que no se pueden modificar en tiempo de
ejecución. El modo de definirla es usando los dos puntos (:) y luego el valor.
Cada símbolo creado tendrá un único id que compartirá cada vez que se asigne.
Métodos
Son bloques de código que podemos reutilizar, estos pueden recibir argumentos
y retornan un valor. Para definir un método se debe iniciar con la palabra
reservada def y se cierra con la palabra end.

Para invocar un método basta con nombrarlo, los paréntesis son opcionales.

La palabra return también es opcional, en Ruby los


métodos siempre retornan lo que encuentren en la
ultima línea. Si hay un return antes de la ultima línea
rompe el código y retorna lo indicado.
Operador Splat
Convierte en elementos de un arreglo a todos los argumentos que se le pasen a
una función. Su modo de utilizarlo es por medio del operador de multiplicación
(*) antes del arreglo que es un parámetro.
Keyword Arguments
Es una opción que nos permite agregar nombres a los parámetros que reciben
los métodos y adicionalmente definir valores por defecto para estos. Se usan
para contextualizar los argumentos de nuestros métodos y nos permite que los
argumentos sean opcionales (valores por default).

Como los parámetros tienen nombre esto nos


Permite pasarlos en el orden que queramos.

Si queremos que un parámetro sea obligatorio


no le asignamos un valor por default.
Keyword Arguments Options
Cuando definimos keyword arguments podemos adicionar un parámetro
adicional similar al operador splat que vimos anteriormente. Generalmente se
define como options y este nos permite recibir múltiples parámetros y
convertirlos en un hash.
Clases y objetos
Clases: Definen el comportamiento de los objetos. Estas contienen atributos,
métodos, campos o eventos. Cada objeto es una instancia de una clase.

Para definir una clase en Ruby debemos incluir la palabra reservada class y luego
el nombre de la clase, el cual por convención se sugiere que se use con el
estándar CamelCase iniciando la primera en mayúscula. La clase se cierra al
igual que los métodos de Ruby con la palabra reservada end.
Clases y objetos
Como se puede ver en este ejemplo hay dos
objetos (instancias) y cada una maneja de
manera independiente sus atributos.
Clases y objetos método initialize
Initialize es lo que en otros lenguajes
se conoce como el constructor de una
clase, en Ruby se enfoca
exclusivamente en inicializar valores
de los atributos.
Clases y objetos propiedades
En Ruby las propiedades son
llamadas variables de instancias en
Ruby estas se indican con un arroba
(@). Son básicamente variables no
pueden ser invocadas desde fuera de
la clase. Su ámbito es únicamente
dentro de la clase a la que
pertenecen.
Clases y objetos métodos accesores
Son métodos que nos permiten
acceder a propiedades de las clases.
En estos métodos definimos métodos
como get para tomar el valor de una
propiedad o set para asignar el valor de
una propiedad, sin embargo tenemos la
posibilidad de abreviar ambos métodos
dejando solo el nombre de la propiedad
a manipular y en el set agregar un igual
antes del parámetro.

Adicionalmente Ruby nos permite


agregar un método que agrega todos
los get y set de todos los atributos que
definamos, es el attr_accessor.
Attr_accessor
Este nos permite invocar y definir una
propiedad de una clase solo definiendo
el nombre de la propiedad como si fuera
un símbolo. Adicionalmente si solo
queremos que nos invoque la propiedad
(set) podemos cambiar por el método
attr_reader y si solo queremos invocar
(get) podemos usar attr_writer
Herencia
Es el proceso de crear clases a partir de otras clases. En Ruby
se suelen llamar clase base(Padre) y subclase(Hija) y el modo
de referenciar que una clase hereda de otra es por medio del
operador menor que (<). Cuando una clase hereda de otra esta
puede acceder a sus propiedades y métodos como si fueran
propios.

En Ruby solo se puede heredar de una sola clase, no existe la


herencia múltiple. Además todas las clases en Ruby heredan
de Object sin embargo esto no se especifica.
Herencia - super
En Ruby se permite sobre escribir
métodos de la clase base (override) y si
queremos mantener la funcionalidad del
método que se esta sobre escribiendo
debemos usar la palabra reservada super.
Alcance de los métodos
Los métodos de la clase tienen diferente alcance

● Public : Estos pueden llamarse desde cualquier lugar y son los que definimos por
defecto.
● Private : Estos solo pueden llamarse desde dentro de la clase. Las clases hijas si
heredan los métodos privados de la clase padre. Una vez que usemos la palabra
private todos los métodos que existan debajo de esta palabra serán privados hasta
que se encuentre la palabra protected o finalice el codigo.
● Protected : Puede llamarse desde otras clases desde que sea del mismo
tipo(herencia). Una vez que usemos la palabra protected todos los métodos que
existan debajo de esta palabra serán privados.
Alcance de los métodos
Métodos de clase
En Ruby las clases también son objetos
y también permiten definir métodos para
usar en su propia clase, lo que en otros
lenguajes se conoce como métodos
estáticos.
Variables de clase
Estas pueden ser usadas desde
métodos de la clase y desde métodos
del objeto. Para definirlas deben
definirse con doble arroba @@. Se
diferencian de las variables de
instancia porque estas las de clase si
se heredan mientras que las de
instancia no.
Polimorfismo
Es la propiedad que permite
tener un método definido
para diferentes clases pero
que en cada una actúa de
manera diferente. No importa
si estas clases heredan de
otra o no.
Bloques
Son sentencias de código que se ejecutan en una función, se enmarcan entre las
palabras do y end y los vemos por ejemplo en las funciones each. También
podemos cambiarlo por los corchetes ({ }) cuando el bloque lleve una sola línea.
En Ruby los bloques en realidad son argumentos de un método.
Métodos que reciben bloques
Como mencionamos anteriormente los bloques no son más parámetros de las funciones,
cuando definimos nuestros propios métodos y queremos que estos reciban bloques como
parámetros simplemente debemos incluir en la declaración del método la palabra yield y
en este lugar se ejecutara el bloque, sin embargo, si no estamos seguros si se va a incluir
un bloque podemos validar la aparición de este por medio del método block_given?.
Métodos que reciben bloques
Si queremos ser más explícitos e indicar que vamos a recibir un bloque, lo
podemos definir en los argumentos del método por medio del operador
ampersand seguido del nombre del bloque y luego para llamarlo debemos
aplicarle el método call. Este modo se diferencia del anterior en que ahora el
bloque va a quedar almacenado en una variable.
Argumentos y valor retornado en bloque
Cuando pasamos bloques como argumentos
de una función es posible que estos reciban
argumentos, para esto cuando usamos yield
le agregamos el parámetro. Cuando vamos a
usar el método debemos indicar el parámetro
entre barras verticales ( | ) al inicio del
bloque. También es posible guardar el
resultado del bloque en una variable y usar
ese valor como return de la función. Sin
embargo, dentro de un bloque no podemos
usar la palabra reservada return.
Ámbito de variables de los bloques
Los bloques pueden usar variables locales de donde se esta ejecutando. Y crear
variables locales dentro que solo tienen ámbito en el bloque y estas se definen
como argumento anteponiendo un punto y coma (;).
Proc
Son instancias de una clase especial que permiten enviar varios bloques a un
método.

Você também pode gostar