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ó
- 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
- 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
- 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
- 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
endSolució:
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
endExercici 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
endSolució:
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
endResum
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.
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
