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?

···

--
Posted via http://www.ruby-forum.com/.

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 Libbey

···

On Jan 25, 8:53 pm, Zhenning Guan <g.zhen.n...@gmail.com> wrote:

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?
--
Posted viahttp://www.ruby-forum.com/.

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?

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?

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

···

2010/1/26 Zhenning Guan <g.zhen.ning@gmail.com>:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/