Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
#RUBYISMS a = b.foo if a.empty? a = b.bar else a.reverse! end #can be simplied a little by assigning and #checking returned boolean type if (a = b.foo).empty? a = b.bar else a.reverse! end ----------------------------------------------- #check the most obvious case first in conditions case savings_account when "not much" buy_bike when "some dough" buy_yugo when "a good wad in the wallet" buy_toyota when "just won the lottery" buy_dream_car end ----------------------------------------------- #not good breakfast = nil if breakfeast == nil breakfast = "bacon and egss" end #not bad if breakfast.nil? breakfast = "bacon and eggs" end #pretty cool if !breakfast breakfast = "bacon and eggs" end # if !something is the same as unless something unless breakfeast breakfast = "bacon and eggs" end #can it get better? awww yea! breakfast = "bacon and eggs" unless breakfast #even better???!!! breakfast ||= "bacon and eggs" ----------------------------------------------- #too much work, ugh! val = 12 if val == 1 || val == 12 || val == 42 puts "woo hoo!" end #sweetness if [1,12,42].include?(val) puts "woo hoo!" end ----------------------------------------------- #only include value if it is not present in array fruits = ['apple','banana'] #ouch fruits << 'apple' unless fruits.include?('apple') #better fruits |= ['apple'] ----------------------------------------------- #a lot of work user_id = nil if comments if comments.first if comments.first.user user_id = comments.first.user.id end end end #are they really paying me to do this #evaluate logic from left to right, returning last value executed user_id = comments && comments.first && comments.first.user && comments.first.user.id ----------------------------------------------- #return values from methods def say_goodnight(name) result = "Good night, " + name.capitalize return result end #rubyized #remember last value of method gets returned by default #use interpolated values instead of concatenating def say_goodnight(name) "Good night, #{name,capitalize}" end ----------------------------------------------- def old_enough?(age) if age > 15 true else false end end #would be better written as def old_enough?(age) age > 15 end ----------------------------------------------- #Classes getters/setters class Person def initialize(name) @name = name end def name @name end def name=(name) @name = name end end #use attr_accessor to do the same thing, sweetness! class Person attr_accessor :name def initialize(name) @name = name end end ----------------------------------------------- a = [ 'ant', 'bee', 'cat', 'dog', 'elk' ] #sometimes its easier to create this array alternatively like this a = %w{ ant bee cat dog elk } ----------------------------------------------- for i in 0..9 puts i, " " end #this is so much cooler! 10.times {|i| puts i} #don't forget other iterators like upto, downto, and step ----------------------------------------------- people = array of people... #PAINFULL!! i = 0 while i < people.size puts people[i].name i += 1 end #LESS PAINFUL! for i in 0..people.size puts people[i].name end #rubyize it by using the each iterator people.each { |person| puts person.name } ----------------------------------------------- #call makes 26 calls for each letter everytime #capital_letters method is called def capital_letters ('A'..'Z').to_a end #instead, creating a class variable caches the to_a in memory #the method call uses cached value @@capital_letters=('A'..'Z').to_a def capital_letters @@capital_letters end ----------------------------------------------- #don't reinvent the wheel, check the built in api def stringify_array(an_array) a_string = "" for element in an_array if a_string.size > 0 a_string += ", " end a_string += element.to_s end return a_string end some_array = %w(hello there buddy) puts stringify_array(some_array) #join gives us exactly what we need puts some_array.join(", ")
This paste will be private.
From the Design Piracy series on my blog: