Escolar Documentos
Profissional Documentos
Cultura Documentos
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 (.)
○ 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.
○ 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
Para insertar nuevos elementos a un arreglo podemos usar el operador << y enseguida el elemento a
insertar.
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 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.
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.
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.
● 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.