Upel ruby
Upcoming SlideShare
Loading in...5
×
 

Upel ruby

on

  • 876 views

Para los amantes de la programacion, acá compartimos con ustedes uno de los lenguajes mas usados en la creación de web y programas

Para los amantes de la programacion, acá compartimos con ustedes uno de los lenguajes mas usados en la creación de web y programas

Statistics

Views

Total Views
876
Views on SlideShare
873
Embed Views
3

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 3

http://elrinconrubyalgomas.net76.net 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Upel ruby Upel ruby Document Transcript

  • Upel - IPMProfesor: 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 deusuarios 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, ymás orientado a objetos que Python En Ruby, todo es un objeto. Se le puede asignar propiedades y acciones a todainformación y código. La programación orientada a objetos llama a las propiedadesvariables de instancia y las acciones son conocidas como métodos. La orientación aobjetos pura de Ruby se suele demostrar con un simple código que aplica una acción a unnúmero.5.times { print "Nos *encanta* Ruby -- ¡es fuera de serie!" } En muchos lenguajes, los números y otros tipos primitivos no son objetos. Rubysigue la influencia del lenguaje Smalltalk pudiendo poner métodos y variables de instanciaa todos sus tipos de datos. Esto facilita el uso de Ruby, porque las reglas que se aplican alos objetos son aplicables a todo Ruby.La flexibilidad de RubyRuby es considerado un lenguaje flexible, ya que permite a sus usuarios alterarlolibremente. Las partes esenciales de Ruby pueden ser quitadas o redefinidas a placer. Sepuede agregar funcionalidad a partes ya existentes. Ruby intenta no restringir aldesarrollador.Por ejemplo, la suma se realiza con el operador suma (+). Pero si prefieres usar la palabrasumar, puedes agregar un método llamado sumar a la clase Numeric que vieneincorporada.class Numeric def sumar(x) self.+(x) endendy = 5.sumar 6# ahora y vale 11 View slide
  • Los operadores de Ruby son simples conveniencias sintácticas para los métodos. Lospuedes redefinir como y cuando quieras.Los Bloques, una funcionalidad realmente expresivaLos bloques de Ruby son también vistos como una fuente de gran flexibilidad. Eldesarrollador puede anexar una cláusula a cualquier método, describiendo cómo debeactuar. La cláusula es llamada bloque y se ha convertido en una de las más famosasfuncionalidades para los recién llegados a Ruby que vienen de otros lenguajes imperativoscomo PHP o Visual Basic.Los bloques están inspirados por los lenguajes funcionales. Matz dijo, “en las cláusulas deRuby, quise respetar la cultura de Lisp4”.motores_de_busqueda = %w[Google Yahoo MSN].map do |motor| "http://www." + motor.downcase + ".com" endEn este código, el bloque está descrito entre la construcción do ... end. El método mapaplica el bloque a la lista de palabras provista. Muchos otros métodos en Ruby dejanabierta la posibilidad al desarrollador para que escriba su propio bloque describiendo losdetalles de qué debe hacer ese método.Ruby y el MixinA diferencia de otros lenguajes de programación orientada a objetos, Ruby se caracterizapor 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étodosgratuitamente. Por ejemplo, cualquier clase que implemente el método each puedeincorporar el módulo Enumerable, que le agrega un conjunto de métodos que usan eachpara recorrer sus elementos.class MiArray include EnumerableendEn general, los Rubyistas ven esto como una forma mucho más clara de herencia múltiple,que es compleja e incluso puede ser restrictiva. View slide
  • La apariencia visual de RubyA pesar de que Ruby utiliza la puntuación muy limitadamente y se prefieren las palabrasclave en inglés, se utiliza algo de puntuación para decorar el código. Ruby no necesitadeclaraciones de variables. Se utilizan convenciones simples para nombrar y determinar elalcance 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 identifiquefá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ásicoRuby tiene un conjunto de otras funcionalidades entre las que se encuentran lassiguientes:  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 PHPEstamos en proceso de traducir todos estos artículos, pero mientras lo hacemos noqueremos 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 advertenciasAquí tienes algunas referencias y consejos sobre funcionalidades de Ruby que verásmientras lo aprendes.IteraciónDos funcionalidades de Ruby que se diferencian de lo que puedes haber vistopreviamente, y que toma cierto tiempo acostumbrarse a ellas, son los “bloques” eiteradores. En vez de recorrer un índice (como con C, C++, o Java anterior al 1.5), orecorrer una lista (como el for (@a) {...} de Perl, o for i in aList: ... en Python, con Rubyverás muy frecuentemente código de este estilo:una_lista.each do |este_item| # Estamos dentro del bloque. # Trabaja con este_item.endPara 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 valorNo hay diferencia entre una expresión y un comando. Todo tiene un valor, incluso si esevalor es nil. Esto es posible:x = 10y = 11z = if x < y trueelse falseendz # => trueLos symbols (símbolos) no son strings especialesA muchos novatos en Ruby les cuesta entender qué son los symbols, y qué utilidadpueden tener.Los symbols pueden ser descritos como identidades. Lo importante de un Symbol es quiénes, no qué es. Arranca irb y experimenta la diferencia:irb(main):001:0> :jorge.object_id == :jorge.object_id=> trueirb(main):002:0> "jorge".object_id == "jorge".object_id=> falseirb(main):003:0>El método object_id retorna la identidad de un objeto. Si dos objetos tienen el mismoobject_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 losmismos caracteres referencia al mismo objeto en memoria. Para dos symbols querepresentan los mismos caracteres, el object_id es el mismo.Ahora veamos el String (“jorge”). El object_id no es el mismo. Eso significa querepresentan 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: laidentidad de un objeto (por ejemplo la Key de un Hash), o el contenido (en nuestroejemplo, “jorge”).
  • Todo es un objeto“Todo es un objeto” no es una exageración. Incluso las clases y los enteros son objetos, ypuedes hacer con ellos las mismas cosas que con cualquier otro objeto:# Esto es lo mismo que:# class MiClase# attr_accessor :variable_de_instancia# endMiClase = Class.new do attr_accessor :variable_de_instanciaendConstantes variablesLas constantes no son realmente… constantes. Si modificas una constante previamenteinicializada, Ruby disparará una advertencia, pero no detendrá tu programa. De todasformas, eso no quiere decir que deberías redefinir tus constantes.Convenciones de sintaxisRuby impone algunas convenciones de sintaxis. Si un identificador comienza con una letramayúscula, es una constante. Si comienza con un símbolo de moneda ($), es una variableglobal. Si comienza con @, es una variable de instancia. Si comienza con @@, es unavariable de clase.Sin embargo, los nombres de los métodos tienen permitido comenzar con letrasmayúsculas. Esto puede confundirte, como muestra el siguiente ejemplo:Constante = 10def Constante 11endAhora Constante vale 10, pero Constante() retorna 11.
  • Falsos parámetros nombradosA diferencia de Python, Ruby no tiene parámetros nombrados. Sin embargo, pueden seremulados mediante el uso de symbols y hashes. Ruby on Rails, entre otros, usa esto adiscreción. Por ejemplo:def parametros_con_nombre( params ) paramsendparametros_con_nombre( :param_uno => 10, :param_dos => 42 )# => {:param_uno=>10, :param_dos=>42}La verdad universalEn Ruby, todo excepto nil y false es considerado true. En C, Python y muchos otroslenguajes, 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 Pythonif 0: print "0 es verdadero"else: print "0 es falso"Esto imprimirá “0 es falso”. El equivalente en Ruby:# en Rubyif 0 puts "0 es verdadero"else puts "0 es falso"endImprime “0 es verdadero”.Los modificadores de acceso aplican hasta el fin del alcanceEn el siguiente código Ruby,class MiClase private def un_metodo; true; end def otro_metodo; false; endend
  • Puede ser que esperes que otro_metodo sea de alcance público. Esto no es así. Elmodificador de acceso ‘private’ continúa hasta el fin del alcance, o hasta que aparezca unnuevo modificador de acceso, lo que ocurra primero. Por defecto, los métodos sonpúblicos:class MiClase # Ahora un_metodo es público def un_metodo; true; end private # otro_metodo es privado def otro_metodo; false; endendpublic, private y protected en realidad son métodos, así que pueden recibir parámetros. Sipasas un símbolo a uno de ellos, la visibilidad de ese método es alterada.Acceso a los métodosEn Java, public significa que un método puede ser accedido por cualquiera. protectedsignifica que las instancias de la clase, instancias de sus descendientes así como tambiénde clases en el mismo paquete, pueden accederlo, pero nadie más. Y private significa quelos 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 quelos 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 llamadodesde una instancia de una clase o las instancias de sus ancestros, pero también con otrainstancia como su receptor.
  • Ejemplo, adaptado del Ruby FAQ:$ irbirb(main):001:0> class Testirb(main):002:1> # public por defectoirb(main):003:1* def funcirb(main):004:2> 99irb(main):005:2> endirb(main):006:1>irb(main):007:1* def ==(otro)irb(main):008:2> func == otro.funcirb(main):009:2> endirb(main):010:1> end=> nilirb(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=> trueirb(main):015:0> # ahora haz func protected, todavía funcionairb(main):016:0* # porque protected permite la otra referenciairb(main):017:0* class Testirb(main):018:1> protected :funcirb(main):019:1> end=> Testirb(main):020:0> t1 == t2=> trueirb(main):021:0> # ahora haz func privateirb(main):022:0* class Testirb(main):023:1> private :funcirb(main):024:1> end=> Testirb(main):025:0> t1 == t2NoMethodError: private method `func called for #<Test:0x342784> from (irb):8:in `== from (irb):25 from :0irb(main):026:0>
  • Las clases están abiertasLas clases de Ruby están abiertas.Puedes abrirlas, agregarles funcionalidad, y modificarlasen cualquier momento. Incluso las clases principales, como Fixnum o incluso Object, elpadre de todos los objetos. Ruby on Rails define un montón de métodos para menejar eltiempo y los horarios en Fixnum. Mira:class Fixnum def hours self * 3600 # cantidad de segundos en una hora end alias hour hoursend# 14 horas desde las 00:00 del 1ro de enero del 2006Time.mktime(2006, 01, 01) + 14.hours # => Sun Jan 01 14:00:00Nombres de métodos graciososEn Ruby, los métodos tienen permitido terminar en signos de exclamación ointerrogació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étodospotencialmente “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 signosde exclamación. Array#replace reemplaza el contenido de un array co nel contenido deotro array. No tiene mucho sentido tener un método como ese que no modifique self.
  • Los métodos SingletonLos métodos Singleton son métodos-por-objeto. Sólo están disponibles en el objeto en elque los defines.class Automovil def inspect "Auto barato" endendporsche = Automovil.newporsche.inspect # => Auto baratodef porsche.inspect "Auto muy caro"endporsche.inspect # => Auto muy caro# Otros objetos no son afectadosotro_auto = Automovil.newotro_auto.inspect # => Auto baratoMétodos faltantesRuby no se rinde si no puede encontrar un método que responda a un mensaje enparticular. Llama al método method_missing con el nómbre del método que no pudoencontrar y sus argumentos. Por defecto, method_missing lanza una excepciónNameError, pero puedes redefinirlo para que se ajuste mejor a tu aplicación, y muchasbibliotecas lo hacen. Aquí tienes un ejemplo:# id es el nombre del método invocado, la sintaxis * recolecta# todos los argumentos en un array llamado argumentosdef 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, 10Este código sólo imprime los detalles de la invocación, pero eres libre de manejar elmensaje como te parezca más apropiado.
  • Pasaje de mensajes, no llamadas a funcionesUna invocación a un método en realidad es un mensaje a otro objeto:# Esto1+2# Es lo mismo que esto ...1.+(2)# Que es lo mismo que esto:1.send "+", 2Los bloques son objetos, sólo que todavía no lo sabenLos bloques (cierres en realidad) son muy utilizados por la biblioteca estandar. Para llamara un bloque, puedes usar yield, o transformarlo en un Proc al anexarle un parámetroespecial 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 bloqueendsumador = block { |a, b| a + b }# sumador ahora es un objeto Procsumador.class # => ProcTambién puedes crear bloques fuera de las invocaciones a métodos, utilizando Proc.newcon 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ácticasLa mayoría de los operadores en Ruby son simples simplificaciones sintácticas (conalgunas 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 endendNo necesitas eloperator+ de C++, etc.Incluso puedes tener acceso estilo array si defines los métodos [] y []=. Para definir losmé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 sonmé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ásCuando estés listo para saber más sobre Ruby, visita la sección de Documentación de elsiguiente link colocado en la referencia:Referenciashttp://www.ruby-lang.org