Ruby para principiantes trabajar con clases

Ruby es uno de los idiomas más populares utilizados en la web. Hace poco, comenzamos una nueva serie de screencast aquí en Nettuts + que te presentará a Ruby, así como a los grandes marcos y herramientas que acompañan el desarrollo de Ruby. En este capítulo, veremos cómo crear nuestras propias clases de Ruby..


Alcanzar

  • Parte 1:Instalando Ruby y Comenzando
  • Parte 2:Variables, tipos de datos y archivos 
  • Parte 3:Trabajando con clases

Ver Screencast


Modificar un objeto en blanco

En el capítulo dos, aprendimos cómo agregar métodos a un objeto ya existente. Si queremos comenzar con un objeto en blanco que luego podemos aumentar con métodos y propiedades, podemos crear una instancia de Objeto clase.

o = Object.new def o.my_method 1 + 1 end o.my_method # => 2

¿Qué pasa con las propiedades? Bueno, Ruby tiene variables de instancia (variables que obtiene cada instancia de un objeto); una variable de instancia comienza con un signo 'a' (@). Puede obtener y establecer estas variables de instancia creando funciones especialmente para ese propósito.

def o.set_name (nombre) @name = name end def o.get_name @name end o.set_name "Andrew" o.get_name # => Andrew

Debe tener en cuenta que la variable @nombre no necesita ser inicializado en ninguna parte. Ruby se encarga de mantener eso organizado para ti. Ahora podemos configurar y obtener las variables de instancia. @nombre. Sin embargo, ¿no es bastante feo de usar? escoger un nombre y get_name para propiedades? Haciendo algo como o.name = "Andrew" escribir y o.name Leer sería mucho más natural. Veremos cómo hacer esto en un minuto; Pero por ahora, vamos a empezar a crear una clase propia..


Creando una clase

Es bastante simple crear una clase. Solo usa la siguiente sintaxis. En esta lección, estaremos creando una muy inútil. Persona clase:

clase persona fin

De nuevo, super-simple. Vamos a empezar a rellenarlo.


Creando propiedades

Hemos visto cómo crear propiedades: solo son envoltorios de métodos para variables de instancia. Sin embargo, queremos que actúen más como la forma en que se espera que actúen las propiedades. Es fácil para el método get:

def nombre @nombre final

Ya que estamos dentro de la clase, no tenemos que dar el nombre de un objeto en la firma del método; solo el nombre del método servirá. Cuando creamos una instancia de la Persona clase de decir, p1-Podremos llamar a esto de la manera habitual.-p1.nombre.

Pero, ¿cómo podemos mejorar la apariencia de establecer la @nombre variable?

Ruby nos da una increíble cantidad de azúcar para hacer esto realmente genial. Mira esto:

def nombre = nombre @nombre = nombre fin

Está bien, ¿y qué? De esta manera, estamos escribiendo. p1.name = ("joe") o al menos p1.name = "joe", porque los paréntesis no son necesarios. ¿Es eso mucho mejor? Bueno, aquí está la parte interesante: puedes poner espacios y Ruby no se saltará nada:

p1.name = "joe"

Ahora, podemos escribir y leer nuestras variables de instancia de la forma en que se espera que se lean las propiedades.

Pero se pone aún mejor. Establecer propiedades a través de métodos como este le da la oportunidad de hacer algo con el valor que el usuario de su clase transfiere, algo más que asignarlo a una variable de instancia, si es apropiado para su clase. Sin embargo, hay una buena probabilidad de que la mayoría de las veces haga lo mismo que nosotros aquí: simplemente configure u obtenga las variables de instancia. En ese caso, Ruby lo hace aún más fácil. Solo agrega esto en la parte superior de tu clase:

attr_accessor: name,: age,: your_properties_here

Pasar attr_accessor Los nombres de tus propiedades como símbolos. Esto crea el var y var = Métodos para ti. Entonces, podrás usar el @ Versiones donde sea que necesites en tu código..

Si desea propiedades de solo lectura o solo escritura, puede utilizar attr_reader o attr_writer, respectivamente. Por supuesto, si usas, di, attr_writer, A continuación, puede crear un método de lector personalizado si es necesario.


Método de creación de instancia

Hemos visto cómo crear métodos de instancia; no olvide que puede usar esos valores de propiedad si necesita:

def greet "# @ name dice: '¡Hola!'" fin

Creando un Constructor

A menudo, querrá realizar algún código de configuración cuando se crea una instancia de una clase. Esto se hace en una función constructora. En Ruby, la función constructora se llama inicializar. Pop esto cerca de la parte superior de nuestra Persona clase:

def initialize (nombre, edad, trabajo = 'desempleado') @name = nombre @age = age @job = fin de trabajo

Como puede ver, la inicialización toma tres parámetros. El tercero, trabajo, es opcional, porque le hemos dado un valor predeterminado. Por supuesto, esto funciona para cualquier función, no solo una función de constructor. Ahora, cuando queremos crear una instancia de persona, tenemos que hacer lo siguiente:

joe = Person.new ("Joe", 35, "fontanero") jill = Person.new "Jill", 14

Creación de métodos privados

Los métodos privados son funciones que solo pueden ser llamadas por otras funciones dentro de la clase; no están expuestos al mundo exterior. La forma habitual de crear métodos privados es la siguiente: debajo de todo su código público (los métodos de instancia y clase), agregue la palabra clave privado. Cualquier función que siga a esta palabra clave es privada..

 # Instancia y métodos de clase por encima de la definición privada get_real_weight @weight end end # de la clase

Si intenta llamar a este método en una instancia de Persona, no funcionará.


Creación de métodos de clase y variables

Los métodos y las propiedades de la clase son funciones y variables que no son accesibles desde instancias de una clase, sino desde la propia clase. Por ejemplo, vamos a crear un método de clase que devuelve el número de Persona instancias que hemos creado.

Primero, tenemos que crear una variable de clase que contendrá el número de Persona instancias que hemos creado. Las variables de clase están prefijadas con dos signos at. Entonces, agregue esto a su clase, preferiblemente bajo las líneas attr_ *:

@@ count = 0

Ahora, cada vez que hacemos una nueva. Persona, Queremos incrementar esta variable. ¿Qué se ejecuta cada vez que hacemos un Persona? inicializar, por supuesto; así que actualízalo en consecuencia. Ahora se ve así:

def initialize (nombre, edad, trabajo = 'desempleado') @name = nombre @age = age @job = trabajo @@ count + = 1 final

Entonces, por supuesto, tenemos que crear el método de clase:

def self.count @@ count end

Ahora, intente esto:

joe = Person.new ("Joe", 35, "fontanero") jill = Person.new ("Jill", 13) bob = Person.new "Bob", 70 Person.count # => 3

Nota - Ruby realmente no tiene métodos de clase (o métodos estáticos, como algunos idiomas los llaman). De hecho, hay un poco de "magia" bastante interesante bajo la superficie que hace que estos se vean como métodos de clase. Entraremos en eso, generalmente llamado metaprogramación, en un capítulo futuro..

Conclusión

Es todo por hoy; Si tiene alguna pregunta, hágamelo saber en los comentarios. La próxima vez, exploraremos muchos métodos comunes en las clases incorporadas de Ruby.

PD - He estado jugando con la configuración de sonido en mi micrófono. ¿Es el volumen en este examen lo suficientemente alto, o debería ser más alto??