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 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.
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