SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
Upel - IPM




Profesor:                   Este Blog y Contenido Fue realizado por:
Eduardo Velasquez                                      Yoelitza Mata
                                                     Omar Landaeta
                                                   Estiwarl Landaeta
                                                            Sección 2
                                              Creación de Web Blog
Alguna Reseña y uso del Lenguaje de
        Programación Ruby:
                            Los ideales del creador de Ruby

          Ruby es un lenguaje con un balance cuidado. Su creador, Yukihiro “matz”
Matsumoto, mezcló partes de sus lenguajes favoritos (Perl, Smalltalk, Eiffel, Ada, y Lisp)
para formar un nuevo lenguaje que incorporara tanto la programación funcional como la
                              programación imperativa.

        A menudo ha manifestado que está “tratando de hacer que Ruby sea natural, no
                 simple”, de una forma que se asemeje a la vida real.

                            Continuando sobre esto, agrega:

    Ruby es simple en apariencia, pero complejo por dentro, como el cuerpo humano.

                            Acerca del crecimiento de Ruby

         Desde su liberación pública en 1995, Ruby ha atraído devotos desarrolladores de
 todo el mundo. En el 2006, Ruby alcanzó reconocimiento masivo, formándose grupos de
usuarios activos en las ciudades más importantes del mundo y llenando las capacidades de
                            las conferencias relacionadas a Ruby.




         Ruby-Talk, la lista de correo más importante sobre el lenguaje Ruby ha crecido
                  hasta lograr un promedio de 200 mensajes por día.

       El índice TIOBE, que mide el crecimiento de los lenguajes de programación, ubica a
  Ruby en la posición #13 del ranking mundial. Refiriéndose a su crecimiento, predicen,
 “Todo indica que Ruby llegará a estar entre los 10 primeros en menos de 6 meses”. Gran
     parte de su crecimiento se atribuye a la popularidad alcanzada por aplicaciones
   desarrolladas con Ruby, en particular el framework de desarrollo web Ruby on Rails.
Ruby es totalmente libre. No sólo gratis, sino también libre para usarlo, copiarlo,
                               modificarlo y distribuirlo.



Viendo todo como un objeto

       Inicialmente, Matz buscó en otros lenguajes para encontrar la sintaxis ideal.
Recordando su búsqueda, dijo, “quería un lenguaje que fuera más poderoso que Perl, y
más orientado a objetos que Python

       En Ruby, todo es un objeto. Se le puede asignar propiedades y acciones a toda
información y código. La programación orientada a objetos llama a las propiedades
variables de instancia y las acciones son conocidas como métodos. La orientación a
objetos pura de Ruby se suele demostrar con un simple código que aplica una acción a un
número.

5.times { print "Nos *encanta* Ruby -- ¡es fuera de serie!" }


        En muchos lenguajes, los números y otros tipos primitivos no son objetos. Ruby
sigue la influencia del lenguaje Smalltalk pudiendo poner métodos y variables de instancia
a todos sus tipos de datos. Esto facilita el uso de Ruby, porque las reglas que se aplican a
los objetos son aplicables a todo Ruby.

La flexibilidad de Ruby

Ruby es considerado un lenguaje flexible, ya que permite a sus usuarios alterarlo
libremente. Las partes esenciales de Ruby pueden ser quitadas o redefinidas a placer. Se
puede agregar funcionalidad a partes ya existentes. Ruby intenta no restringir al
desarrollador.

Por ejemplo, la suma se realiza con el operador suma (+). Pero si prefieres usar la palabra
sumar, puedes agregar un método llamado sumar a la clase Numeric que viene
incorporada.

class Numeric
 def sumar(x)
   self.+(x)
 end
end

y = 5.sumar 6
# ahora y vale 11
Los operadores de Ruby son simples conveniencias sintácticas para los métodos. Los
puedes redefinir como y cuando quieras.

Los Bloques, una funcionalidad realmente expresiva

Los bloques de Ruby son también vistos como una fuente de gran flexibilidad. El
desarrollador puede anexar una cláusula a cualquier método, describiendo cómo debe
actuar. La cláusula es llamada bloque y se ha convertido en una de las más famosas
funcionalidades para los recién llegados a Ruby que vienen de otros lenguajes imperativos
como PHP o Visual Basic.

Los bloques están inspirados por los lenguajes funcionales. Matz dijo, “en las cláusulas de
Ruby, quise respetar la cultura de Lisp4”.

motores_de_busqueda =
 %w[Google Yahoo MSN].map do |motor|
  "http://www." + motor.downcase + ".com"
 end

En este código, el bloque está descrito entre la construcción do ... end. El método map
aplica el bloque a la lista de palabras provista. Muchos otros métodos en Ruby dejan
abierta la posibilidad al desarrollador para que escriba su propio bloque describiendo los
detalles de qué debe hacer ese método.

Ruby y el Mixin

A diferencia de otros lenguajes de programación orientada a objetos, Ruby se caracteriza
por su intencional herencia simple. Sin embargo, Ruby incorpora el concepto de módulos
(llamados categorías en Objective-C), que son colecciones de métodos.

Las clases pueden mezclar (mixin) un módulo e incorporar todos sus métodos
gratuitamente. Por ejemplo, cualquier clase que implemente el método each puede
incorporar el módulo Enumerable, que le agrega un conjunto de métodos que usan each
para recorrer sus elementos.

class MiArray
 include Enumerable
end

En general, los Rubyistas ven esto como una forma mucho más clara de herencia múltiple,
que es compleja e incluso puede ser restrictiva.
La apariencia visual de Ruby

A pesar de que Ruby utiliza la puntuación muy limitadamente y se prefieren las palabras
clave en inglés, se utiliza algo de puntuación para decorar el código. Ruby no necesita
declaraciones de variables. Se utilizan convenciones simples para nombrar y determinar el
alcance de las mismas.

      var puede ser una variable local.
      @var es una variable de instancia.
      $var es una variable global.

Estos detalles mejoran la legibilidad permitiendo que el desarrollador identifique
fácilmente los roles de las variables. También se hace innecesario el uso del molesto self.
como prefijo de todos los miembros de instancia.

Más allá de lo básico

Ruby tiene un conjunto de otras funcionalidades entre las que se encuentran las
siguientes:

      manejo de excepciones, como Java y Python, para facilitar el manejo de errores.

      un verdadero mark-and-sweep garbage collector para todos los objetos de Ruby.
       No es necesario mantener contadores de referencias en bibliotecas externas.
       Como dice Matz, “Esto es mejor para tu salud”.

      escribir extenciones en C para Ruby es más fácil que hacer lo mismo para Perl o
       Python, con una API muy elegante para utilizar Ruby desde C. Esto incluye
       llamadas para embeber Ruby en otros programas, y así usarlo como lenguaje de
       scripting. También está disponible una interfaz SWIG.

      puede cargar bibliotecas de extensión dinámicamente si lo permite el sistema
       operativo.

      tiene manejo de hilos (threading) independiente del sistema operativo. De esta
       forma, tienes soporte multi-hilo en todas las plataformas en las que corre Ruby, sin
       importar si el sistema operativo lo soporta o no, ¡incluso en MS-DOS!

      Ruby es fácilmente portable: se desarrolla mayoritariamente en GNU/Linux, pero
       corre en varios tipos de UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS,
       BeOS, OS/2, etc.
Qué esperar: Lenguaje X a Ruby

      A Ruby desde Java
      A Ruby desde PHP

Estamos en proceso de traducir todos estos artículos, pero mientras lo hacemos no
queremos privarte de que los leas en inglés:

      To Ruby From C and C++ (en inglés)
      To Ruby From Java (en inglés)
      To Ruby From Perl (en inglés)
      To Ruby From PHP (en inglés)
      To Ruby From Python (en inglés)

Funcionalidades importantes del lenguaje y algunas advertencias

Aquí tienes algunas referencias y consejos sobre funcionalidades de Ruby que verás
mientras lo aprendes.

Iteración

Dos funcionalidades de Ruby que se diferencian de lo que puedes haber visto
previamente, y que toma cierto tiempo acostumbrarse a ellas, son los “bloques” e
iteradores. En vez de recorrer un índice (como con C, C++, o Java anterior al 1.5), o
recorrer una lista (como el for (@a) {...} de Perl, o for i in aList: ... en Python, con Ruby
verás muy frecuentemente código de este estilo:

una_lista.each do |este_item|
 # Estamos dentro del bloque.
 # Trabaja con este_item.
end

Para obtener más información sobre each (y sus amigos collect, find, inject, sort, etc.),
ejecuta ri Enumerable (y después ri Enumerable#nombre_del_metodo).
Todo tiene un valor

No hay diferencia entre una expresión y un comando. Todo tiene un valor, incluso si ese
valor es nil. Esto es posible:

x = 10
y = 11
z = if x < y
 true
else
 false
end
z # => true

Los symbols (símbolos) no son strings especiales

A muchos novatos en Ruby les cuesta entender qué son los symbols, y qué utilidad
pueden tener.

Los symbols pueden ser descritos como identidades. Lo importante de un Symbol es quién
es, no qué es. Arranca irb y experimenta la diferencia:

irb(main):001:0> :jorge.object_id == :jorge.object_id
=> true
irb(main):002:0> "jorge".object_id == "jorge".object_id
=> false
irb(main):003:0>

El método object_id retorna la identidad de un objeto. Si dos objetos tienen el mismo
object_id, son el mismo objeto (apuntan al mismo objeto en la memoria).

Como puedes ver, una vez que has usado un Symbol, cualquier otro Symbol con los
mismos caracteres referencia al mismo objeto en memoria. Para dos symbols que
representan los mismos caracteres, el object_id es el mismo.

Ahora veamos el String (“jorge”). El object_id no es el mismo. Eso significa que
representan a dos objetos diferentes en memoria. Siempre que uses un nuevo String,
Ruby reserva memoria para él.

Si tienes dudas sobre usar un Symbol o un String, considera qué es más importante: la
identidad de un objeto (por ejemplo la Key de un Hash), o el contenido (en nuestro
ejemplo, “jorge”).
Todo es un objeto

“Todo es un objeto” no es una exageración. Incluso las clases y los enteros son objetos, y
puedes hacer con ellos las mismas cosas que con cualquier otro objeto:

# Esto es lo mismo que:
# class MiClase
# attr_accessor :variable_de_instancia
# end
MiClase = Class.new do
 attr_accessor :variable_de_instancia
end

Constantes variables

Las constantes no son realmente… constantes. Si modificas una constante previamente
inicializada, Ruby disparará una advertencia, pero no detendrá tu programa. De todas
formas, eso no quiere decir que deberías redefinir tus constantes.

Convenciones de sintaxis

Ruby impone algunas convenciones de sintaxis. Si un identificador comienza con una letra
mayúscula, es una constante. Si comienza con un símbolo de moneda ($), es una variable
global. Si comienza con @, es una variable de instancia. Si comienza con @@, es una
variable de clase.

Sin embargo, los nombres de los métodos tienen permitido comenzar con letras
mayúsculas. Esto puede confundirte, como muestra el siguiente ejemplo:

Constante = 10
def Constante
 11
end

Ahora Constante vale 10, pero Constante() retorna 11.
Falsos parámetros nombrados

A diferencia de Python, Ruby no tiene parámetros nombrados. Sin embargo, pueden ser
emulados mediante el uso de symbols y hashes. Ruby on Rails, entre otros, usa esto a
discreción. Por ejemplo:

def parametros_con_nombre( params )
 params
end
parametros_con_nombre( :param_uno => 10, :param_dos => 42 )
# => {:param_uno=>10, :param_dos=>42}

La verdad universal

En Ruby, todo excepto nil y false es considerado true. En C, Python y muchos otros
lenguajes, 0* y posiblemente otros valores, como listas vacías, son considerados *false.
Examina el siguiente código Python (el ejemplo aplica también a otros lenguajes):

# en Python
if 0:
  print "0 es verdadero"
else:
  print "0 es falso"

Esto imprimirá “0 es falso”. El equivalente en Ruby:

# en Ruby
if 0
  puts "0 es verdadero"
else
  puts "0 es falso"
end

Imprime “0 es verdadero”.

Los modificadores de acceso aplican hasta el fin del alcance

En el siguiente código Ruby,

class MiClase
 private
 def un_metodo; true; end
 def otro_metodo; false; end
end
Puede ser que esperes que otro_metodo sea de alcance público. Esto no es así. El
modificador de acceso ‘private’ continúa hasta el fin del alcance, o hasta que aparezca un
nuevo modificador de acceso, lo que ocurra primero. Por defecto, los métodos son
públicos:

class MiClase
 # Ahora un_metodo es público
 def un_metodo; true; end

 private

 # otro_metodo es privado
 def otro_metodo; false; end
end
public, private y protected en realidad son métodos, así que pueden recibir parámetros. Si
pasas un símbolo a uno de ellos, la visibilidad de ese método es alterada.

Acceso a los métodos

En Java, public significa que un método puede ser accedido por cualquiera. protected
significa que las instancias de la clase, instancias de sus descendientes así como también
de clases en el mismo paquete, pueden accederlo, pero nadie más. Y private significa que
los métodos son accesibles únicamente desde las instancias de la clase.

En Ruby esto es un poco diferente. public es, naturalmente, público. private significa que
los métodos son accesibles sólo cuando pueden ser invocados sin un receptor explícito.
Sólo self tiene permitido ser el receptor de la invocación a un método privado.

Al que debemos estar atentos es a protected. Un método protegido puede ser llamado
desde una instancia de una clase o las instancias de sus ancestros, pero también con otra
instancia como su receptor.
Ejemplo, adaptado del Ruby FAQ:

$ irb
irb(main):001:0> class Test
irb(main):002:1> # public por defecto
irb(main):003:1* def func
irb(main):004:2> 99
irb(main):005:2> end
irb(main):006:1>
irb(main):007:1* def ==(otro)
irb(main):008:2> func == otro.func
irb(main):009:2> end
irb(main):010:1> end
=> nil
irb(main):011:0>
irb(main):012:0* t1 = Test.new
=> #<Test:0x34ab50>
irb(main):013:0> t2 = Test.new
=> #<Test:0x342784>
irb(main):014:0> t1 == t2
=> true
irb(main):015:0> # ahora haz 'func' protected, todavía funciona
irb(main):016:0* # porque protected permite la otra referencia
irb(main):017:0* class Test
irb(main):018:1> protected :func
irb(main):019:1> end
=> Test
irb(main):020:0> t1 == t2
=> true
irb(main):021:0> # ahora haz 'func' private
irb(main):022:0* class Test
irb(main):023:1> private :func
irb(main):024:1> end
=> Test
irb(main):025:0> t1 == t2
NoMethodError: private method `func' called for #<Test:0x342784>
     from (irb):8:in `=='
     from (irb):25
     from :0
irb(main):026:0>
Las clases están abiertas

Las clases de Ruby están abiertas.Puedes abrirlas, agregarles funcionalidad, y modificarlas
en cualquier momento. Incluso las clases principales, como Fixnum o incluso Object, el
padre de todos los objetos. Ruby on Rails define un montón de métodos para menejar el
tiempo y los horarios en Fixnum. Mira:

class Fixnum
 def hours
   self * 3600 # cantidad de segundos en una hora
 end
 alias hour hours
end

# 14 horas desde las 00:00 del 1ro de enero del 2006
Time.mktime(2006, 01, 01) + 14.hours # => Sun Jan 01 14:00:00

Nombres de métodos graciosos

En Ruby, los métodos tienen permitido terminar en signos de exclamación o
interrogación. Por convención, los métodos que responden preguntas (i.e. Array#empty?
retorna true si el receptor está vacío) terminan con un signo de interrogación. Métodos
potencialmente “peligrosos” (i.e. métodos que modifican self o sus argumentos, exit! etc.)
por convención terminan en un signo de exclamación.

De todas formas, no todos los métodos que modifican sus argumentos terminan en signos
de exclamación. Array#replace reemplaza el contenido de un array co nel contenido de
otro array. No tiene mucho sentido tener un método como ese que no modifique self.
Los métodos Singleton

Los métodos Singleton son métodos-por-objeto. Sólo están disponibles en el objeto en el
que los defines.

class Automovil
 def inspect
   "Auto barato"
 end
end

porsche = Automovil.new
porsche.inspect # => Auto barato
def porsche.inspect
 "Auto muy caro"
end

porsche.inspect # => Auto muy caro

# Otros objetos no son afectados
otro_auto = Automovil.new
otro_auto.inspect # => Auto barato

Métodos faltantes

Ruby no se rinde si no puede encontrar un método que responda a un mensaje en
particular. Llama al método method_missing con el nómbre del método que no pudo
encontrar y sus argumentos. Por defecto, method_missing lanza una excepción
NameError, pero puedes redefinirlo para que se ajuste mejor a tu aplicación, y muchas
bibliotecas lo hacen. Aquí tienes un ejemplo:

# id es el nombre del método invocado, la sintaxis * recolecta
# todos los argumentos en un array llamado 'argumentos'
def method_missing( id, *argumentos )
 puts "El método #{id} fue invocado, pero no existe. Tiene " +
    "estos argumentos: #{argumentos.join(", ")}"
end

__ :a, :b, 10
# => El método __ fue invocado, pero no existe. Tiene estos
# argumentos: a, b, 10

Este código sólo imprime los detalles de la invocación, pero eres libre de manejar el
mensaje como te parezca más apropiado.
Pasaje de mensajes, no llamadas a funciones

Una invocación a un método en realidad es un mensaje a otro objeto:

# Esto
1+2
# Es lo mismo que esto ...
1.+(2)
# Que es lo mismo que esto:
1.send "+", 2

Los bloques son objetos, sólo que todavía no lo saben

Los bloques (cierres en realidad) son muy utilizados por la biblioteca estandar. Para llamar
a un bloque, puedes usar yield, o transformarlo en un Proc al anexarle un parámetro
especial a la lista de argumentos, así:

def block( &el_bloque )
 # Aquí dentro, el_bloque es el bloque pasado al método
 el_bloque # retornar el bloque
end
sumador = block { |a, b| a + b }
# sumador ahora es un objeto Proc
sumador.class # => Proc

También puedes crear bloques fuera de las invocaciones a métodos, utilizando Proc.new
con un bloque o llamando al método lambda.

Similarmente, los métodos también pueden ser objetos:

method(:puts).call              "¡puts             es              un              objeto!"
# => ¡puts es un objeto!
Los operadores son comodidades sintácticas

La mayoría de los operadores en Ruby son simples simplificaciones sintácticas (con
algunas reglas de precedencia) para llamar a ciertos métodos. Puedes, por ejemplo,
redefinir el método Fixnum#+:

class Fixnum
 # Puedes, pero por favor no lo hagas
 def +( otro )
   self - otro
 end
end

No necesitas eloperator+ de C++, etc.

Incluso puedes tener acceso estilo array si defines los métodos [] y []=. Para definir los
métodos unarios + y – (piensa en +1 y -2), debes definir los métodos +@ and -@
respectivamente.

Sin embargo, los siguientes operadores no son simplificaciones sintácticas. No son
métodos, y no pueden ser redefinidos:

=, .., ..., !, not, &&, and, ||, or, !=, !~, ::
Además, +=, *= etc. sólo son abreviaciones para var = var + otra_var, var = var * otra_var,
etc. y por ende no pueden ser redefinidos.



Para saber más

Cuando estés listo para saber más sobre Ruby, visita la sección de Documentación de el
siguiente link colocado en la referencia:



Referencias
http://www.ruby-lang.org

Mais conteúdo relacionado

Mais procurados

Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
rulo182
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
glfloresgilberto
 
Intro Python
Intro PythonIntro Python
Intro Python
ctme
 

Mais procurados (19)

Por qué Ruby
Por qué RubyPor qué Ruby
Por qué Ruby
 
Caracteristicas de Ruby
Caracteristicas de RubyCaracteristicas de Ruby
Caracteristicas de Ruby
 
Ruby exposición
Ruby exposiciónRuby exposición
Ruby exposición
 
Java world
Java worldJava world
Java world
 
Tarea3
Tarea3 Tarea3
Tarea3
 
Desarrollo robótico - Robot Operating System (ROS)
Desarrollo robótico - Robot Operating System (ROS)Desarrollo robótico - Robot Operating System (ROS)
Desarrollo robótico - Robot Operating System (ROS)
 
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)
 
Ros y sistemas multi agentes
Ros y sistemas multi agentesRos y sistemas multi agentes
Ros y sistemas multi agentes
 
Fondo1 (2)
Fondo1 (2)Fondo1 (2)
Fondo1 (2)
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
Javier.Ramirez.Rails.Hot.Or.Not.Conferenciarails2008
 
Intro Python
Intro PythonIntro Python
Intro Python
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Introducción a ROS
Introducción a ROSIntroducción a ROS
Introducción a ROS
 
Lenguaje de programación
Lenguaje de programaciónLenguaje de programación
Lenguaje de programación
 
Tecnologia Java
Tecnologia JavaTecnologia Java
Tecnologia Java
 
Diseño de progra tarea
Diseño de progra tareaDiseño de progra tarea
Diseño de progra tarea
 

Semelhante a Upel ruby

Ruby en linux
Ruby en linuxRuby en linux
Ruby en linux
vilna2011
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
Alvaro Tejada
 

Semelhante a Upel ruby (20)

Ruby en linux
Ruby en linuxRuby en linux
Ruby en linux
 
Taller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con RubyTaller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con Ruby
 
Ruby es un lenguaje de programación interpretado
Ruby es un lenguaje de programación interpretadoRuby es un lenguaje de programación interpretado
Ruby es un lenguaje de programación interpretado
 
Tabla
TablaTabla
Tabla
 
Tabla
TablaTabla
Tabla
 
Lenguaje ruby
Lenguaje rubyLenguaje ruby
Lenguaje ruby
 
Lenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetosLenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetos
 
"La era de los frameworks: Ruby On Rails"
"La era de los frameworks: Ruby On Rails""La era de los frameworks: Ruby On Rails"
"La era de los frameworks: Ruby On Rails"
 
Ruby en 2020
Ruby en 2020Ruby en 2020
Ruby en 2020
 
Lenguaje de propagación java
Lenguaje de propagación javaLenguaje de propagación java
Lenguaje de propagación java
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Sesión 03: Ruby y SAP
Sesión 03: Ruby y SAPSesión 03: Ruby y SAP
Sesión 03: Ruby y SAP
 
SAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAPSAP Inside Track Lima 09 - Ruby y SAP
SAP Inside Track Lima 09 - Ruby y SAP
 
Java
JavaJava
Java
 
Guia teorica
Guia teoricaGuia teorica
Guia teorica
 
Manual de PHP Basico
Manual de PHP BasicoManual de PHP Basico
Manual de PHP Basico
 
Resumen Capitulo 1 - Sebesta
Resumen Capitulo 1 - Sebesta Resumen Capitulo 1 - Sebesta
Resumen Capitulo 1 - Sebesta
 
SEBASTIAN QUINTO TORRES.pptx
SEBASTIAN QUINTO TORRES.pptxSEBASTIAN QUINTO TORRES.pptx
SEBASTIAN QUINTO TORRES.pptx
 

Último

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
silviayucra2
 

Último (10)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Upel ruby

  • 1. Upel - IPM Profesor: Este Blog y Contenido Fue realizado por: Eduardo Velasquez Yoelitza Mata Omar Landaeta Estiwarl Landaeta Sección 2 Creación de Web Blog
  • 2. Alguna Reseña y uso del Lenguaje de Programación Ruby: Los ideales del creador de Ruby Ruby es un lenguaje con un balance cuidado. Su creador, Yukihiro “matz” Matsumoto, mezcló partes de sus lenguajes favoritos (Perl, Smalltalk, Eiffel, Ada, y Lisp) para formar un nuevo lenguaje que incorporara tanto la programación funcional como la programación imperativa. A menudo ha manifestado que está “tratando de hacer que Ruby sea natural, no simple”, de una forma que se asemeje a la vida real. Continuando sobre esto, agrega: Ruby es simple en apariencia, pero complejo por dentro, como el cuerpo humano. Acerca del crecimiento de Ruby Desde su liberación pública en 1995, Ruby ha atraído devotos desarrolladores de todo el mundo. En el 2006, Ruby alcanzó reconocimiento masivo, formándose grupos de usuarios activos en las ciudades más importantes del mundo y llenando las capacidades de las conferencias relacionadas a Ruby. Ruby-Talk, la lista de correo más importante sobre el lenguaje Ruby ha crecido hasta lograr un promedio de 200 mensajes por día. El índice TIOBE, que mide el crecimiento de los lenguajes de programación, ubica a Ruby en la posición #13 del ranking mundial. Refiriéndose a su crecimiento, predicen, “Todo indica que Ruby llegará a estar entre los 10 primeros en menos de 6 meses”. Gran parte de su crecimiento se atribuye a la popularidad alcanzada por aplicaciones desarrolladas con Ruby, en particular el framework de desarrollo web Ruby on Rails.
  • 3. Ruby es totalmente libre. No sólo gratis, sino también libre para usarlo, copiarlo, modificarlo y distribuirlo. Viendo todo como un objeto Inicialmente, Matz buscó en otros lenguajes para encontrar la sintaxis ideal. Recordando su búsqueda, dijo, “quería un lenguaje que fuera más poderoso que Perl, y más orientado a objetos que Python En Ruby, todo es un objeto. Se le puede asignar propiedades y acciones a toda información y código. La programación orientada a objetos llama a las propiedades variables de instancia y las acciones son conocidas como métodos. La orientación a objetos pura de Ruby se suele demostrar con un simple código que aplica una acción a un número. 5.times { print "Nos *encanta* Ruby -- ¡es fuera de serie!" } En muchos lenguajes, los números y otros tipos primitivos no son objetos. Ruby sigue la influencia del lenguaje Smalltalk pudiendo poner métodos y variables de instancia a todos sus tipos de datos. Esto facilita el uso de Ruby, porque las reglas que se aplican a los objetos son aplicables a todo Ruby. La flexibilidad de Ruby Ruby es considerado un lenguaje flexible, ya que permite a sus usuarios alterarlo libremente. Las partes esenciales de Ruby pueden ser quitadas o redefinidas a placer. Se puede agregar funcionalidad a partes ya existentes. Ruby intenta no restringir al desarrollador. Por ejemplo, la suma se realiza con el operador suma (+). Pero si prefieres usar la palabra sumar, puedes agregar un método llamado sumar a la clase Numeric que viene incorporada. class Numeric def sumar(x) self.+(x) end end y = 5.sumar 6 # ahora y vale 11
  • 4. Los operadores de Ruby son simples conveniencias sintácticas para los métodos. Los puedes redefinir como y cuando quieras. Los Bloques, una funcionalidad realmente expresiva Los bloques de Ruby son también vistos como una fuente de gran flexibilidad. El desarrollador puede anexar una cláusula a cualquier método, describiendo cómo debe actuar. La cláusula es llamada bloque y se ha convertido en una de las más famosas funcionalidades para los recién llegados a Ruby que vienen de otros lenguajes imperativos como PHP o Visual Basic. Los bloques están inspirados por los lenguajes funcionales. Matz dijo, “en las cláusulas de Ruby, quise respetar la cultura de Lisp4”. motores_de_busqueda = %w[Google Yahoo MSN].map do |motor| "http://www." + motor.downcase + ".com" end En este código, el bloque está descrito entre la construcción do ... end. El método map aplica el bloque a la lista de palabras provista. Muchos otros métodos en Ruby dejan abierta la posibilidad al desarrollador para que escriba su propio bloque describiendo los detalles de qué debe hacer ese método. Ruby y el Mixin A diferencia de otros lenguajes de programación orientada a objetos, Ruby se caracteriza por su intencional herencia simple. Sin embargo, Ruby incorpora el concepto de módulos (llamados categorías en Objective-C), que son colecciones de métodos. Las clases pueden mezclar (mixin) un módulo e incorporar todos sus métodos gratuitamente. Por ejemplo, cualquier clase que implemente el método each puede incorporar el módulo Enumerable, que le agrega un conjunto de métodos que usan each para recorrer sus elementos. class MiArray include Enumerable end En general, los Rubyistas ven esto como una forma mucho más clara de herencia múltiple, que es compleja e incluso puede ser restrictiva.
  • 5. La apariencia visual de Ruby A pesar de que Ruby utiliza la puntuación muy limitadamente y se prefieren las palabras clave en inglés, se utiliza algo de puntuación para decorar el código. Ruby no necesita declaraciones de variables. Se utilizan convenciones simples para nombrar y determinar el alcance de las mismas.  var puede ser una variable local.  @var es una variable de instancia.  $var es una variable global. Estos detalles mejoran la legibilidad permitiendo que el desarrollador identifique fácilmente los roles de las variables. También se hace innecesario el uso del molesto self. como prefijo de todos los miembros de instancia. Más allá de lo básico Ruby tiene un conjunto de otras funcionalidades entre las que se encuentran las siguientes:  manejo de excepciones, como Java y Python, para facilitar el manejo de errores.  un verdadero mark-and-sweep garbage collector para todos los objetos de Ruby. No es necesario mantener contadores de referencias en bibliotecas externas. Como dice Matz, “Esto es mejor para tu salud”.  escribir extenciones en C para Ruby es más fácil que hacer lo mismo para Perl o Python, con una API muy elegante para utilizar Ruby desde C. Esto incluye llamadas para embeber Ruby en otros programas, y así usarlo como lenguaje de scripting. También está disponible una interfaz SWIG.  puede cargar bibliotecas de extensión dinámicamente si lo permite el sistema operativo.  tiene manejo de hilos (threading) independiente del sistema operativo. De esta forma, tienes soporte multi-hilo en todas las plataformas en las que corre Ruby, sin importar si el sistema operativo lo soporta o no, ¡incluso en MS-DOS!  Ruby es fácilmente portable: se desarrolla mayoritariamente en GNU/Linux, pero corre en varios tipos de UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc.
  • 6. Qué esperar: Lenguaje X a Ruby  A Ruby desde Java  A Ruby desde PHP Estamos en proceso de traducir todos estos artículos, pero mientras lo hacemos no queremos privarte de que los leas en inglés:  To Ruby From C and C++ (en inglés)  To Ruby From Java (en inglés)  To Ruby From Perl (en inglés)  To Ruby From PHP (en inglés)  To Ruby From Python (en inglés) Funcionalidades importantes del lenguaje y algunas advertencias Aquí tienes algunas referencias y consejos sobre funcionalidades de Ruby que verás mientras lo aprendes. Iteración Dos funcionalidades de Ruby que se diferencian de lo que puedes haber visto previamente, y que toma cierto tiempo acostumbrarse a ellas, son los “bloques” e iteradores. En vez de recorrer un índice (como con C, C++, o Java anterior al 1.5), o recorrer una lista (como el for (@a) {...} de Perl, o for i in aList: ... en Python, con Ruby verás muy frecuentemente código de este estilo: una_lista.each do |este_item| # Estamos dentro del bloque. # Trabaja con este_item. end Para obtener más información sobre each (y sus amigos collect, find, inject, sort, etc.), ejecuta ri Enumerable (y después ri Enumerable#nombre_del_metodo).
  • 7. Todo tiene un valor No hay diferencia entre una expresión y un comando. Todo tiene un valor, incluso si ese valor es nil. Esto es posible: x = 10 y = 11 z = if x < y true else false end z # => true Los symbols (símbolos) no son strings especiales A muchos novatos en Ruby les cuesta entender qué son los symbols, y qué utilidad pueden tener. Los symbols pueden ser descritos como identidades. Lo importante de un Symbol es quién es, no qué es. Arranca irb y experimenta la diferencia: irb(main):001:0> :jorge.object_id == :jorge.object_id => true irb(main):002:0> "jorge".object_id == "jorge".object_id => false irb(main):003:0> El método object_id retorna la identidad de un objeto. Si dos objetos tienen el mismo object_id, son el mismo objeto (apuntan al mismo objeto en la memoria). Como puedes ver, una vez que has usado un Symbol, cualquier otro Symbol con los mismos caracteres referencia al mismo objeto en memoria. Para dos symbols que representan los mismos caracteres, el object_id es el mismo. Ahora veamos el String (“jorge”). El object_id no es el mismo. Eso significa que representan a dos objetos diferentes en memoria. Siempre que uses un nuevo String, Ruby reserva memoria para él. Si tienes dudas sobre usar un Symbol o un String, considera qué es más importante: la identidad de un objeto (por ejemplo la Key de un Hash), o el contenido (en nuestro ejemplo, “jorge”).
  • 8. Todo es un objeto “Todo es un objeto” no es una exageración. Incluso las clases y los enteros son objetos, y puedes hacer con ellos las mismas cosas que con cualquier otro objeto: # Esto es lo mismo que: # class MiClase # attr_accessor :variable_de_instancia # end MiClase = Class.new do attr_accessor :variable_de_instancia end Constantes variables Las constantes no son realmente… constantes. Si modificas una constante previamente inicializada, Ruby disparará una advertencia, pero no detendrá tu programa. De todas formas, eso no quiere decir que deberías redefinir tus constantes. Convenciones de sintaxis Ruby impone algunas convenciones de sintaxis. Si un identificador comienza con una letra mayúscula, es una constante. Si comienza con un símbolo de moneda ($), es una variable global. Si comienza con @, es una variable de instancia. Si comienza con @@, es una variable de clase. Sin embargo, los nombres de los métodos tienen permitido comenzar con letras mayúsculas. Esto puede confundirte, como muestra el siguiente ejemplo: Constante = 10 def Constante 11 end Ahora Constante vale 10, pero Constante() retorna 11.
  • 9. Falsos parámetros nombrados A diferencia de Python, Ruby no tiene parámetros nombrados. Sin embargo, pueden ser emulados mediante el uso de symbols y hashes. Ruby on Rails, entre otros, usa esto a discreción. Por ejemplo: def parametros_con_nombre( params ) params end parametros_con_nombre( :param_uno => 10, :param_dos => 42 ) # => {:param_uno=>10, :param_dos=>42} La verdad universal En Ruby, todo excepto nil y false es considerado true. En C, Python y muchos otros lenguajes, 0* y posiblemente otros valores, como listas vacías, son considerados *false. Examina el siguiente código Python (el ejemplo aplica también a otros lenguajes): # en Python if 0: print "0 es verdadero" else: print "0 es falso" Esto imprimirá “0 es falso”. El equivalente en Ruby: # en Ruby if 0 puts "0 es verdadero" else puts "0 es falso" end Imprime “0 es verdadero”. Los modificadores de acceso aplican hasta el fin del alcance En el siguiente código Ruby, class MiClase private def un_metodo; true; end def otro_metodo; false; end end
  • 10. Puede ser que esperes que otro_metodo sea de alcance público. Esto no es así. El modificador de acceso ‘private’ continúa hasta el fin del alcance, o hasta que aparezca un nuevo modificador de acceso, lo que ocurra primero. Por defecto, los métodos son públicos: class MiClase # Ahora un_metodo es público def un_metodo; true; end private # otro_metodo es privado def otro_metodo; false; end end public, private y protected en realidad son métodos, así que pueden recibir parámetros. Si pasas un símbolo a uno de ellos, la visibilidad de ese método es alterada. Acceso a los métodos En Java, public significa que un método puede ser accedido por cualquiera. protected significa que las instancias de la clase, instancias de sus descendientes así como también de clases en el mismo paquete, pueden accederlo, pero nadie más. Y private significa que los métodos son accesibles únicamente desde las instancias de la clase. En Ruby esto es un poco diferente. public es, naturalmente, público. private significa que los métodos son accesibles sólo cuando pueden ser invocados sin un receptor explícito. Sólo self tiene permitido ser el receptor de la invocación a un método privado. Al que debemos estar atentos es a protected. Un método protegido puede ser llamado desde una instancia de una clase o las instancias de sus ancestros, pero también con otra instancia como su receptor.
  • 11. Ejemplo, adaptado del Ruby FAQ: $ irb irb(main):001:0> class Test irb(main):002:1> # public por defecto irb(main):003:1* def func irb(main):004:2> 99 irb(main):005:2> end irb(main):006:1> irb(main):007:1* def ==(otro) irb(main):008:2> func == otro.func irb(main):009:2> end irb(main):010:1> end => nil irb(main):011:0> irb(main):012:0* t1 = Test.new => #<Test:0x34ab50> irb(main):013:0> t2 = Test.new => #<Test:0x342784> irb(main):014:0> t1 == t2 => true irb(main):015:0> # ahora haz 'func' protected, todavía funciona irb(main):016:0* # porque protected permite la otra referencia irb(main):017:0* class Test irb(main):018:1> protected :func irb(main):019:1> end => Test irb(main):020:0> t1 == t2 => true irb(main):021:0> # ahora haz 'func' private irb(main):022:0* class Test irb(main):023:1> private :func irb(main):024:1> end => Test irb(main):025:0> t1 == t2 NoMethodError: private method `func' called for #<Test:0x342784> from (irb):8:in `==' from (irb):25 from :0 irb(main):026:0>
  • 12. Las clases están abiertas Las clases de Ruby están abiertas.Puedes abrirlas, agregarles funcionalidad, y modificarlas en cualquier momento. Incluso las clases principales, como Fixnum o incluso Object, el padre de todos los objetos. Ruby on Rails define un montón de métodos para menejar el tiempo y los horarios en Fixnum. Mira: class Fixnum def hours self * 3600 # cantidad de segundos en una hora end alias hour hours end # 14 horas desde las 00:00 del 1ro de enero del 2006 Time.mktime(2006, 01, 01) + 14.hours # => Sun Jan 01 14:00:00 Nombres de métodos graciosos En Ruby, los métodos tienen permitido terminar en signos de exclamación o interrogación. Por convención, los métodos que responden preguntas (i.e. Array#empty? retorna true si el receptor está vacío) terminan con un signo de interrogación. Métodos potencialmente “peligrosos” (i.e. métodos que modifican self o sus argumentos, exit! etc.) por convención terminan en un signo de exclamación. De todas formas, no todos los métodos que modifican sus argumentos terminan en signos de exclamación. Array#replace reemplaza el contenido de un array co nel contenido de otro array. No tiene mucho sentido tener un método como ese que no modifique self.
  • 13. Los métodos Singleton Los métodos Singleton son métodos-por-objeto. Sólo están disponibles en el objeto en el que los defines. class Automovil def inspect "Auto barato" end end porsche = Automovil.new porsche.inspect # => Auto barato def porsche.inspect "Auto muy caro" end porsche.inspect # => Auto muy caro # Otros objetos no son afectados otro_auto = Automovil.new otro_auto.inspect # => Auto barato Métodos faltantes Ruby no se rinde si no puede encontrar un método que responda a un mensaje en particular. Llama al método method_missing con el nómbre del método que no pudo encontrar y sus argumentos. Por defecto, method_missing lanza una excepción NameError, pero puedes redefinirlo para que se ajuste mejor a tu aplicación, y muchas bibliotecas lo hacen. Aquí tienes un ejemplo: # id es el nombre del método invocado, la sintaxis * recolecta # todos los argumentos en un array llamado 'argumentos' def method_missing( id, *argumentos ) puts "El método #{id} fue invocado, pero no existe. Tiene " + "estos argumentos: #{argumentos.join(", ")}" end __ :a, :b, 10 # => El método __ fue invocado, pero no existe. Tiene estos # argumentos: a, b, 10 Este código sólo imprime los detalles de la invocación, pero eres libre de manejar el mensaje como te parezca más apropiado.
  • 14. Pasaje de mensajes, no llamadas a funciones Una invocación a un método en realidad es un mensaje a otro objeto: # Esto 1+2 # Es lo mismo que esto ... 1.+(2) # Que es lo mismo que esto: 1.send "+", 2 Los bloques son objetos, sólo que todavía no lo saben Los bloques (cierres en realidad) son muy utilizados por la biblioteca estandar. Para llamar a un bloque, puedes usar yield, o transformarlo en un Proc al anexarle un parámetro especial a la lista de argumentos, así: def block( &el_bloque ) # Aquí dentro, el_bloque es el bloque pasado al método el_bloque # retornar el bloque end sumador = block { |a, b| a + b } # sumador ahora es un objeto Proc sumador.class # => Proc También puedes crear bloques fuera de las invocaciones a métodos, utilizando Proc.new con un bloque o llamando al método lambda. Similarmente, los métodos también pueden ser objetos: method(:puts).call "¡puts es un objeto!" # => ¡puts es un objeto!
  • 15. Los operadores son comodidades sintácticas La mayoría de los operadores en Ruby son simples simplificaciones sintácticas (con algunas reglas de precedencia) para llamar a ciertos métodos. Puedes, por ejemplo, redefinir el método Fixnum#+: class Fixnum # Puedes, pero por favor no lo hagas def +( otro ) self - otro end end No necesitas eloperator+ de C++, etc. Incluso puedes tener acceso estilo array si defines los métodos [] y []=. Para definir los métodos unarios + y – (piensa en +1 y -2), debes definir los métodos +@ and -@ respectivamente. Sin embargo, los siguientes operadores no son simplificaciones sintácticas. No son métodos, y no pueden ser redefinidos: =, .., ..., !, not, &&, and, ||, or, !=, !~, :: Además, +=, *= etc. sólo son abreviaciones para var = var + otra_var, var = var * otra_var, etc. y por ende no pueden ser redefinidos. Para saber más Cuando estés listo para saber más sobre Ruby, visita la sección de Documentación de el siguiente link colocado en la referencia: Referencias http://www.ruby-lang.org