A
Alexandru E. Ungur
Hi all,
I recently recently released my first vim script, nothing big, it
just toggles words between true/false, on/off, etc. You can find
more here http://vim.sourceforge.net/scripts/script.php?script_id=1748
if you want.
The thing is, I'm not sure if I chose the most elegant/beautiful/**
way to solve the problem, basically I ended up deciding between
two ways of handling the problem:
class String
@@pairs = [ %w[on off], %w[yes no], %w[true false] ]
def toggle_word1
pair = @@pairs.select{|p| p.include?(downcase)}.flatten
return nil if pair.empty?
antiword = pair[pair.index(downcase) ^ 1]
case self
when upcase then return antiword.upcase
when downcase then return antiword.downcase
when capitalize then return antiword.capitalize
else return antiword
end
end
def toggle_word2
pair = @@pairs.select{|p| p.include?(downcase)}.flatten
wordcase = %w[upcase downcase capitalize].detect {|c| send(c) == self} || "downcase"
pair.empty? ? nil : pair[pair.index(downcase) ^ 1].send(wordcase)
end
end
Both toggle_word1 and toggle_word2 are doing the exact same thing, that is:
"Yes".toggle_word1 # => "No"
"No".toggle_word2 # => "Yes"
and so on.
My question is, which is more elegant, more... rubyful ?
I like that toggle_word1 is almost like plain english, especially
that "case" construct, but I like in toggle_word2 that the same "case"
construct was replaced with a single line of code, well with two
actually. However perhaps toggle_word2 is a little too much
code golfing...?
Thank you in advance for your comments,
Have a nice day everyone,
Alex
I recently recently released my first vim script, nothing big, it
just toggles words between true/false, on/off, etc. You can find
more here http://vim.sourceforge.net/scripts/script.php?script_id=1748
if you want.
The thing is, I'm not sure if I chose the most elegant/beautiful/**
way to solve the problem, basically I ended up deciding between
two ways of handling the problem:
class String
@@pairs = [ %w[on off], %w[yes no], %w[true false] ]
def toggle_word1
pair = @@pairs.select{|p| p.include?(downcase)}.flatten
return nil if pair.empty?
antiword = pair[pair.index(downcase) ^ 1]
case self
when upcase then return antiword.upcase
when downcase then return antiword.downcase
when capitalize then return antiword.capitalize
else return antiword
end
end
def toggle_word2
pair = @@pairs.select{|p| p.include?(downcase)}.flatten
wordcase = %w[upcase downcase capitalize].detect {|c| send(c) == self} || "downcase"
pair.empty? ? nil : pair[pair.index(downcase) ^ 1].send(wordcase)
end
end
Both toggle_word1 and toggle_word2 are doing the exact same thing, that is:
"Yes".toggle_word1 # => "No"
"No".toggle_word2 # => "Yes"
and so on.
My question is, which is more elegant, more... rubyful ?
I like that toggle_word1 is almost like plain english, especially
that "case" construct, but I like in toggle_word2 that the same "case"
construct was replaced with a single line of code, well with two
actually. However perhaps toggle_word2 is a little too much
code golfing...?
Thank you in advance for your comments,
Have a nice day everyone,
Alex