How to refactor these code?

def ss(s = ‘hello’, yeah = nil)
if yeah
puts “something”
else
puts “other thing”
end

#code continue …
end

I have this method, use it like that:

ss(‘hi’, yeah = true)
ss(‘hello’)
ss(‘fuck’, yeah = true)
ss(‘hello’,yeah = true)

very ugly… sometimes I just need to passed yeah = true, but I have to
added ‘hello’ first.

what should I do?

A little more context would be helpful, but you could do something
like:

def ss(options={})
s = options.delete(:s) || “hello”
yeah = options.delete(:yeah)

puts (yeah ? “something” : “other thing”)

#code continue …
end

ss(:hello => ‘hi’, :yeah => true)
ss(:yeah => false)

and so on.

Burke L.

2010/1/26 Zhenning G. [email protected]:

def ss(s = ‘hello’, yeah = nil)
if yeah
puts “something”
else
puts “other thing”
end

#code continue …
end

What do you need argument “s” for?

what should I do?
Define two methods. At least from the interface this is cleaner.
Generally flags that control method behavior are considered bad
practice because they tend to make the implementation of a method more
complex and tie things together that might really be independent (just
consider what happens if you inherit a class and want to change only
one of the two variants).

Note, you can still share an internal implementation under the hood e.g.

def ss1
ss_impl “something”
end

def ss2
ss_impl “other thing”
end

private
def ss_impl(x)

end

But your example is really a bit short to come up with a definitive
answer how to improve this.

Kind regards

robert

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs