La refactorització és el procés de millorar el codi existent sense canviar-ne el comportament extern. L'objectiu és fer que el codi sigui més llegible, mantenible i eficient. En aquesta secció, explorarem diverses tècniques i estratègies per refactoritzar el codi en Ruby.

Objectius de la Refactorització

  • Millorar la llegibilitat: Fer que el codi sigui més fàcil de llegir i entendre.
  • Reduir la complexitat: Simplificar el codi per fer-lo més fàcil de mantenir.
  • Eliminar la duplicació: Reduir la redundància en el codi.
  • Millorar el rendiment: Optimitzar el codi per fer-lo més eficient.

Tècniques de Refactorització

  1. Extracció de Mètodes

L'extracció de mètodes consisteix a moure blocs de codi repetits o complexos a mètodes separats. Això ajuda a reduir la duplicació i a fer que el codi sigui més modular.

Exemple:

# Abans de la refactorització
class Invoice
  def print_details
    puts "Invoice Details"
    puts "Date: #{Time.now}"
    puts "Amount: $100"
  end
end

# Després de la refactorització
class Invoice
  def print_details
    puts "Invoice Details"
    print_date
    print_amount
  end

  private

  def print_date
    puts "Date: #{Time.now}"
  end

  def print_amount
    puts "Amount: $100"
  end
end

  1. Substitució de Condicionals per Polimorfisme

Els condicionals complexos poden ser difícils de llegir i mantenir. Substituir-los per polimorfisme pot simplificar el codi.

Exemple:

# Abans de la refactorització
class Animal
  def make_sound(type)
    if type == 'dog'
      'Woof!'
    elsif type == 'cat'
      'Meow!'
    else
      'Unknown sound'
    end
  end
end

# Després de la refactorització
class Animal
  def make_sound
    raise NotImplementedError, 'This method should be overridden'
  end
end

class Dog < Animal
  def make_sound
    'Woof!'
  end
end

class Cat < Animal
  def make_sound
    'Meow!'
  end
end

  1. Utilització de Mòduls per Compartir Comportament

Els mòduls poden ser utilitzats per compartir comportament entre classes sense necessitat d'herència.

Exemple:

# Abans de la refactorització
class Dog
  def speak
    'Woof!'
  end
end

class Cat
  def speak
    'Meow!'
  end
end

# Després de la refactorització
module Speakable
  def speak
    raise NotImplementedError, 'This method should be overridden'
  end
end

class Dog
  include Speakable

  def speak
    'Woof!'
  end
end

class Cat
  include Speakable

  def speak
    'Meow!'
  end
end

  1. Simplificació de Bucles

Els bucles complexos poden ser simplificats utilitzant mètodes d'iteració més expressius.

Exemple:

# Abans de la refactorització
numbers = [1, 2, 3, 4, 5]
sum = 0
numbers.each do |number|
  sum += number
end

# Després de la refactorització
numbers = [1, 2, 3, 4, 5]
sum = numbers.reduce(:+)

Exercicis Pràctics

Exercici 1: Extracció de Mètodes

Refactoritza el següent codi per utilitzar l'extracció de mètodes:

class Report
  def generate
    puts "Report Title"
    puts "Date: #{Time.now}"
    puts "Content: This is the report content."
  end
end

Solució:

class Report
  def generate
    puts "Report Title"
    print_date
    print_content
  end

  private

  def print_date
    puts "Date: #{Time.now}"
  end

  def print_content
    puts "Content: This is the report content."
  end
end

Exercici 2: Substitució de Condicionals per Polimorfisme

Refactoritza el següent codi per utilitzar polimorfisme:

class Vehicle
  def move(type)
    if type == 'car'
      'Driving'
    elsif type == 'bike'
      'Riding'
    else
      'Unknown movement'
    end
  end
end

Solució:

class Vehicle
  def move
    raise NotImplementedError, 'This method should be overridden'
  end
end

class Car < Vehicle
  def move
    'Driving'
  end
end

class Bike < Vehicle
  def move
    'Riding'
  end
end

Resum

La refactorització és una pràctica essencial per mantenir el codi net, llegible i fàcil de mantenir. Hem explorat diverses tècniques de refactorització, incloent l'extracció de mètodes, la substitució de condicionals per polimorfisme, l'ús de mòduls per compartir comportament i la simplificació de bucles. Practicar aquestes tècniques t'ajudarà a escriure codi de millor qualitat i a millorar les teves habilitats com a programador.

© Copyright 2024. Tots els drets reservats