Sinisterly
[Ruby] Refactoring - Printable Version

+- Sinisterly (https://sinister.ly)
+-- Forum: Coding (https://sinister.ly/Forum-Coding)
+--- Forum: Coding (https://sinister.ly/Forum-Coding--71)
+--- Thread: [Ruby] Refactoring (/Thread-Ruby-Refactoring)



[Ruby] Refactoring - Inori - 05-22-2015

In Ruby, there's always more than one way to accomplish something. Some ways are cleaner, more efficient and faster than others, however.

Speed refactors:

If you have a lot of code, cutting down 1/100th of a second can add up. Here are some ways of speeding up your Ruby interpreter.

Hash Key lookups:
while setting keys in a hash, it's tempting to use a string or an integer. The better way to do this is with Symbols.
Code:
#slow hash = { "test_key" => "test value" } #fast hash = { :test_key => "test value" } #now if we look for the key using #the slow way hash.has_key?("test_key") #and the fast way hash.has_key?(:test_key) #the first way takes 0.02ish seconds, while the second takes 0.01

Cleanliness refactors:

I get really irritated when people make messy, hard to understand code. The following will help any new Ruby programmer with that.

Arrays:
If you need an array of sequential numbers or letters, you can use this trick:
Code:
#please don't (especially not the strings, if not needed) letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] #use this one letters = ("a".."z").to_a
The efficient way converts a Range to an Array with the .to_a method

Loops:
Cutting lines out from simple loops is one of the easiest tricks in the refactoring book. It works as follows.
Code:
alphabet = (:a..:z).to_a #remember this? #sloppy way alphabet.each do |letter| puts letter end #better way alphabet.each do { |letter| puts letter }

Conditional statements:
A huge if/elsif/else statement is a pain in the ass to sift through and is often an eyesore. A better way is to use case.
Code:
a = 0 #annoying if a == 0 puts "logic exists" elsif a == 1 puts "what the fuck?" else puts "I don't even know.." end #far more satisfying case a when 0 puts "logic exists" when 1 puts "what the fuck?" else puts "I don't even know.." end

If you just need "if", you can do the following:
Code:
a = 0 #please don't do this if a == 0 puts "logic is a thing." end #do this puts "logic is a thing." if a == 0 end


These are just a few examples of refactoring. Check out Stack Overflow or CodeCademy for more examples. And for fuck's sake, don't use the sloppy, lazy way.
Thanks!
-Touka


RE: [Ruby] Refactoring - Jolly - 05-22-2015

Thanks for the great tutorial, it sure helps out a lot! Biggrin