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

  1. Definició de la Variable de Classe: @@number_of_vehicles és una variable de classe que es defineix dins de la classe Vehicle.
  2. Increment de la Variable de Classe: Cada vegada que es crea una nova instància de Vehicle, el mètode initialize incrementa @@number_of_vehicles en 1.
  3. 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

  1. Definició de Mètodes de Classe: self.add i self.subtract són mètodes de classe definits dins de la classe Calculator.
  2. 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.

© Copyright 2024. Tots els drets reservats