En aquest tema, explorarem les variables i mètodes de classe en Ruby. Aquestes són eines poderoses que ens permeten definir comportaments i dades que són compartits per totes les instàncies d'una classe. A diferència de les variables i mètodes d'instància, que són específics per a cada objecte, les variables i mètodes de classe són comuns a tota la classe.
Variables de Classe
Què són les Variables de Classe?
Les variables de classe són variables que són compartides per totes les instàncies d'una classe. Es defineixen amb @@
davant del nom de la variable.
Exemple de Variables de Classe
class Vehicle @@number_of_vehicles = 0 def initialize @@number_of_vehicles += 1 end def self.total_vehicles @@number_of_vehicles end end car = Vehicle.new bike = Vehicle.new puts Vehicle.total_vehicles # Sortida: 2
Explicació del Codi
- Definició de la Variable de Classe:
@@number_of_vehicles
és una variable de classe que es defineix dins de la classeVehicle
. - Increment de la Variable de Classe: Cada vegada que es crea una nova instància de
Vehicle
, el mètodeinitialize
incrementa@@number_of_vehicles
en 1. - Mètode de Classe:
self.total_vehicles
és un mètode de classe que retorna el valor de@@number_of_vehicles
.
Mètodes de Classe
Què són els Mètodes de Classe?
Els mètodes de classe són mètodes que es defineixen a nivell de classe i no a nivell d'instància. Es defineixen utilitzant self
abans del nom del mètode.
Exemple de Mètodes de Classe
class Calculator def self.add(a, b) a + b end def self.subtract(a, b) a - b end end puts Calculator.add(5, 3) # Sortida: 8 puts Calculator.subtract(5, 3) # Sortida: 2
Explicació del Codi
- Definició de Mètodes de Classe:
self.add
iself.subtract
són mètodes de classe definits dins de la classeCalculator
. - Crida als Mètodes de Classe: Els mètodes de classe es criden utilitzant el nom de la classe seguit d'un punt i el nom del mètode (
Calculator.add
).
Comparació entre Variables i Mètodes d'Instància i de Classe
Aspecte | Variables d'Instància | Variables de Classe | Mètodes d'Instància | Mètodes de Classe |
---|---|---|---|---|
Definició | @variable |
@@variable |
def method |
def self.method |
Àmbit | Específic per a cada instància | Compartit per totes les instàncies | Específic per a cada instància | Compartit per totes les instàncies |
Accés | Només dins de la instància | Dins de la classe i les instàncies | Només dins de la instància | Només dins de la classe |
Exemple de Definició | @name = "Car" |
@@count = 0 |
def drive |
def self.total |
Exercicis Pràctics
Exercici 1: Comptador d'Instàncies
Crea una classe Book
que tingui una variable de classe @@count
que compti el nombre d'instàncies creades. Afegeix un mètode de classe self.total_books
que retorni aquest comptador.
class Book @@count = 0 def initialize @@count += 1 end def self.total_books @@count end end # Prova el teu codi book1 = Book.new book2 = Book.new book3 = Book.new puts Book.total_books # Sortida esperada: 3
Exercici 2: Mètodes de Classe per a Operacions Matemàtiques
Crea una classe MathOperations
amb mètodes de classe per sumar, restar, multiplicar i dividir dos nombres.
class MathOperations def self.add(a, b) a + b end def self.subtract(a, b) a - b end def self.multiply(a, b) a * b end def self.divide(a, b) return "No es pot dividir per zero" if b == 0 a / b end end # Prova el teu codi puts MathOperations.add(10, 5) # Sortida esperada: 15 puts MathOperations.subtract(10, 5) # Sortida esperada: 5 puts MathOperations.multiply(10, 5) # Sortida esperada: 50 puts MathOperations.divide(10, 5) # Sortida esperada: 2 puts MathOperations.divide(10, 0) # Sortida esperada: No es pot dividir per zero
Resum
En aquesta secció, hem après sobre les variables i mètodes de classe en Ruby. Les variables de classe són compartides per totes les instàncies d'una classe, mentre que els mètodes de classe són mètodes que es defineixen a nivell de classe. Hem vist exemples pràctics i hem realitzat exercicis per reforçar aquests conceptes. Ara estem preparats per avançar cap a temes més avançats en la programació orientada a objectes en Ruby.
Curs de Programació en Ruby
Mòdul 1: Introducció a Ruby
Mòdul 2: Conceptes Bàsics de Ruby
Mòdul 3: Treballant amb Col·leccions
Mòdul 4: Programació Orientada a Objectes en Ruby
- Classes i Objectes
- Variables i Mètodes d'Instància
- Variables i Mètodes de Classe
- Herència
- Mòduls i Mixins
Mòdul 5: Conceptes Avançats de Ruby
- Blocs, Procs i Lambdas
- Metaprogramació
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Expressions Regulars
Mòdul 6: Introducció a Ruby on Rails
- Què és Ruby on Rails?
- Configuració de l'Entorn Rails
- Creació d'una Aplicació Simple en Rails
- Arquitectura MVC
- Rutes
Mòdul 7: Proves en Ruby
- Introducció a les Proves
- Proves Unitàries amb Minitest
- Desenvolupament Basat en Comportament amb RSpec
- Mocking i Stubbing
Mòdul 8: Millors Pràctiques en Ruby
- Estil de Codi i Convencions
- Refactorització
- Optimització del Rendiment
- Millors Pràctiques de Seguretat