Skip to content

Instantly share code, notes, and snippets.

@andremedeiros
Created December 16, 2014 17:16
Show Gist options
  • Save andremedeiros/bbf423220d63de017721 to your computer and use it in GitHub Desktop.
Save andremedeiros/bbf423220d63de017721 to your computer and use it in GitHub Desktop.
Style poll
# Option 1
info = if publication
"Title: #{ publication.title } (ID: #{ publication.id })"
else
'N/A'
end
# Option 2
info = case publication
when Publication then puts "Title: #{ publication.title } (ID: #{ publication.id })"
when nil then puts 'N/A'
end
@rudiservo
Copy link

depends on how many "cases you have", for one either is fine but if you have too many maybe the second one is more readable for faster debuging.

@thelazycamel
Copy link

how about a third option...

info = publication ? "Title: #{ publication.title } (ID: #{ publication.id })" : "N/A"

@felixhageloh
Copy link

one funky style i've seen:

info = pubication 
     ?  "Title: #{ publication.title } (ID: #{ publication.id })"
     : "N/A"

I kinda like how the operators align it but it takes a while to parse in your head if you are not used it. Also I think ruby syntax won't let you do it.

@felixhageloh
Copy link

for option 2 I also find the indentation a bit weird. Maybe if the when statements where indented or even aligned with the case.

@kpolitowicz
Copy link

def publication_caption(publication)
  return 'N/A' if publication.nil?
  "Title: #{ publication.title } (ID: #{ publication.id })"
end

info = pubication_caption(publication)

Actually long term in such cases I would use the null object pattern (see https://github.com/avdi/naught) and define #to_s on both NullPublication and Publication.

From your options however, the first one seems a lot more readable, if the only case you need to address is NIlClass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment