clean-code-ruby icon indicating copy to clipboard operation
clean-code-ruby copied to clipboard

Methods should do one thing - one question

Open wowremywang opened this issue 6 years ago • 1 comments

Hi @uohzxela Thanks for your good contents. It is really helpful. But I have a question about Methods should do one thing

Bad:

def email_clients(clients)
  clients.each do |client|
    client_record = database.lookup(client)
    email(client) if client_record.active?
  end
end

email_clients(clients)

Good:

def email_clients(clients)
  clients.each { |client| email(client) }
end

def active_clients(clients)
  clients.select { |client| active_client?(client) }
end

def active_client?(client)
  client_record = database.lookup(client)
  client_record.active?
end

email_clients(active_clients(clients))

It seems Good code is more clear but if we use this code, we have to loop all clients twice. But first Bad code only loops clients once. So Bad code is faster than Good code. What do you think?

wowremywang avatar Sep 27 '19 09:09 wowremywang

Am thinking this is better too

gathuku avatar Sep 30 '19 06:09 gathuku