How do you assign a variable with the result of a if..else block?

Posted by Pierre Olivier Martel on Stack Overflow See other posts from Stack Overflow or by Pierre Olivier Martel
Published on 2010-05-27T21:20:39Z Indexed on 2010/05/27 21:31 UTC
Read the original article Hit count: 273

Filed under:
|

I had an argument with a colleague about the best way to assign a variable in an if..else block. His orignal code was :

@products = if params[:category]
  Category.find(params[:category]).products
else
  Product.all
end

I rewrote it this way :

if params[:category]
  @products = Category.find(params[:category]).products
else
  @products = Product.all
end

This could also be rewritten with a one-liner using a ternery operator (? :) but let's pretend that product assignment was longer than a 100 character and couldn't fit in one line.

Which of the two is clearer to you? The first solution takes a little less space but I thought that declaring a variable and assigning it three lines after can be more error prone. I also like to see my if and else aligned, makes it easier for my brain to parse it!

© Stack Overflow or respective owner

Related posts about ruby

Related posts about coding-style