Чистый код — это не роскошь, а необходимость для профессиональной разработки. Вот проверенные практики, которые я собирал годами проведения code review и собеседований.
# Плохо
class UserManager
def initialize(user)
@user = user
end
def save_to_db
# ...
end
def send_welcome_email
# ...
end
end
# Хорошо
class UserPersister
def initialize(user)
@user = user
end
def save
# ...
end
end
class UserNotifier
def initialize(user)
@user = user
end
def send_welcome_email
# ...
end
end
snake_case
для методов, CamelCase
для классов&&/||
над and/or
для логических операцийmodule Loggable
def log(message)
puts "[#{self.class}] #{message}"
end
end
class Order
include Loggable
def process
log "Processing started"
# ...
end
end
# Хороший стиль
def active?
@status == 'active'
end
# Использование
if user.active?
# ...
end
# Лучше возвращать новый объект
class Calculator
def add(a, b)
a + b
end
end
# Чем изменять состояние
class Calculator
def initialize
@result = 0
end
def add(n)
@result += n
end
end
# Хорошая практика
def fetch_data
raise ArgumentError, "URL cannot be blank" if url.empty?
# ...
rescue Net::HTTPError => e
logger.error "HTTP error: #{e.message}"
retry if can_retry?
end
describe OrderProcessor do
it 'marks order as completed after successful payment' do
order = create(:order)
processor = OrderProcessor.new(order)
expect { processor.process }.to change(order, :status).to('completed')
end
end
class ReportGenerator
def self.for(type)
case type
when :csv then CsvReport.new
when :pdf then PdfReport.new
else raise "Unknown report type"
end
end
end
Признаки проблемного кода:
user.company.address.street
)# Хороший пример
File.open('file.txt') do |file|
process_file(file)
end
# Лучше чем
file = File.open('file.txt')
process_file(file)
file.close
# Предпочитать
users.select(&:active?).map(&:name)
# Чем
active_users = []
users.each do |user|
if user.active?
active_users << user.name
end
end
Резюмируем: Чистый Ruby-код — это сочетание соблюдения соглашений, применения принципов ООП, грамотного проектирования и использования инструментов контроля качества. Код должен быть не только рабочим, но и читаемым, тестируемым и легко изменяемым. Помните: код читается гораздо чаще, чем пишется, поэтому инвестируйте время в его качество.