SlideShare a Scribd company logo
# ruby style
# how to concision
# naming
conventions!
# CamelCase for module and class names
#
OneModule
OneClass
# snake_case for variables, methods, and
symbols
#
one_variable
is_a_method?
now_a_method!
:a_symbol
# CONSTANTS are variables that don't vary for
# the duration of a program, they should be written
# in SCREAMING_SNAKE_CASE
#
LOUD_AND_PROUD_CONSTANT = "global
access"
# class and module names in ruby are constants
# we write their names in camel case by convention
#
class CamelCase
# avoid single letter variables except for
# when their use is very clear
#
num = (1..100).reverse_each {|x| puts x }
# an exclamation mark is used by convention
# for methods that change the state of the
# object they are called on.
# these are called 'dangerous methods'
#
strings.mutate_in_ruby! # good to know
# a question mark is used by convention
# for methods that return true or false,
# these are called 'predicate methods'
#
assertion.is_naming_convention? # true
# an equals sign is used at the end of
# method names that make assignments
# these are called 'setter methods’
# and is SYNTACTIC
#
class SomeClass
def setter=( value )
@instance_variable = value
end
end
# setter methods can be called with
# simplified syntax (syntactic sugar)
#
instance = SomeClass.new
instance.setter=(new_value) # can do
instance.setter = new_value # should do
# there’s a lot of this in Rails
# a common mistake is trying to use
# it inside class definitions without
# specifying the object
#
class SomeClass
def setter=( value )
@instance_variable = value
end
instance_variable = value # doesn’t work and
instance_variable=(value) # is trying to do this
self.instance_variable = value # do this
end
# with setters inside a class, just remember
that:
#
<<RULE
Assignment expressions will only invoke a
setter method when invoked through an
object.
RULE
ruby.can_use_semicolons? # true
# but please don't unless you really
# want more than one statement per line
#
can_be tidy; can_also_be obfuscated;
# whitespace
# indent with 2 spaces
# don't use tabs... ever
# always put whitespace around the
# assignment operator
#
foo = 1
# unless you're setting default
# method parameters
#
def foo( baz=2 )
puts 2 ** baz
end
# use underscores to make long
# numbers more readable
#
10000000000 # how many zeros?
10_000_000_000 # keeps fingers off the screen
DoNot::call::methods::with_double_colons
# yes, you can do it
#
a = 256::to_s::reverse!::to_i * 2 # 1304
# but it’s usually thought of as constant access
#
SomeObject::ITS_CONSTANT
# when block commenting it is nice to
# leave a blank line before the actual
# code for the sake of readability
#
def apprehend( archibald )
archibald.get_him
end
"Strings"
# for strings with lots of odd characters
# it can be better to use the alternative
# string literal syntax to avoid using escapes
#
string = %q[<a href="javascript:method('call')">js?</a>]
# resolves to "<a
href="javascript:method('call')">js?</a>"
# if you have a really big string it
# can be better to define it like so
#
big_string = <<delimiter
]})@#$^UHEOIG(FKALSNC
this is just one string
and that is totally okay
()@))_-p[[}{P{{p[]}{[
delimiter
# this is arguably inferior:
#
big_string = "this string right here " +
" be concatenated with this one" +
" aaaaand this one too" +
" all these concatenations" +
" are all a bit tiresome, no?"
# << or <<- can also be useful for
# passing big strings as arguments
#
DoesTheObjectMatter.new(:value => <<-eos
don't worry about this it's all
just one big string, no one is
the wiser
eos
this = :no_longer_the_above_string
# passing arguments with hash-like syntax
# can save other people's time when reading
# your code:
#
divide(1, 3) # which is which?
divide(:num => 1, :denom => 3) # clearer
# you can designate code blocks two ways.
# the conventional way for multi-liners is with
#
do
...
end
# you can also use '{ .. }' but please
# only use those for single-line blocks
#
single_line_block = (1..1000).map {|x| x**2 }
# procs and lambdas can be helpful for keeping
# your code DRY, among myriad other things.
# use the lambda literal syntax (not keyword)
# for good style
#
anonymous_method = ->( p_one, p_two ) do
p_one + " and " + p_two
end
# boolean logic!
and, or != &&, ||
# use &&, ||
# 'and', 'or' are seldom used by convention
# and can do unexpected things because they
# bind differently than &&, ||
#
puts nil || "rainier" # this prints "rainier"
puts nil or "rainier" # this prints nil
# why? the later parses to:
#
puts (nil) or "rainier"
# the former to:
#
puts ( nil || "rainier" )
# one-line 'if' statements
# works
#
variable = if test then pos_result else neg_result
end
# better
#
variable = test ? pos_result : neg_result
# nest 'if' like this:
#
if test
nest_test ? nest_result : nest_other_result
else
first_layer_result
end
# deeply nested 'if' statements are generally
# considered to be bad style
# use 'unless' instead of negative 'if'
#
something.action if !test # questionable
something.action unless test # better
# but never use 'unless' with 'else'
# use an 'if' instead.
# but never use 'unless'
with 'else'
# use an 'if' instead
# similar situation with while/until
#
something.action while !test # no
something.action until test # yes
# use ||= to freely initialize variables
# to avoid unnecessary 'if' statements
#
variable ||= 'kenny wheeler'
# if the first argument begins with a parentheses
# then use parentheses in method invocation
# this is a common source of consternation.
#
method ( 3 + 2 ) % 2 # ambiguous
method(( 3 + 2 ) % 2) # unambiguous
(method( 3 + 2 ) % 2) # unambiguous
gem install rubocop
<<-arbitrary_string_delimiter
from the README:
rubocop is a Ruby code style checker based on the
Ruby Style Guide, which is available on github:
https://github.com/bbatsov/ruby-style-guide
rubocop is pretty strict, but can be useful
arbitrary_string_delimiter

More Related Content

PPTX
Final project powerpoint template (fndprg) (1)
DOCX
Vb script tutorial
PDF
Refactoring: A First Example - Martin Fowler’s First Example of Refactoring, ...
PPT
PERL Unit 6 regular expression
PPT
QTP VB Script Trainings
PPTX
VB Script
PPTX
Concision
PDF
Raul Rica Otero Presentacion
Final project powerpoint template (fndprg) (1)
Vb script tutorial
Refactoring: A First Example - Martin Fowler’s First Example of Refactoring, ...
PERL Unit 6 regular expression
QTP VB Script Trainings
VB Script
Concision
Raul Rica Otero Presentacion

Similar to Ruby Style Guide (20)

PPTX
Ruby from zero to hero
PDF
Ruby Topic Maps Tutorial (2007-10-10)
PDF
python.pdf
PDF
Ruby Intro {spection}
PDF
Learning Ruby
PPTX
Ruby data types and objects
PDF
Eloquent ruby
PDF
Write your Ruby in Style
PPTX
Clean code
PPTX
Ruby on Rails
DOCX
Ruby Programming
PDF
Ruby Gotchas
PPTX
Ruby -the wheel Technology
PDF
Ruby Gotchas
PPTX
Ruby Basics
PDF
Ruby 程式語言綜覽簡介
KEY
No comment
PDF
Testing Ruby with Rspec (a beginner's guide)
PDF
Ruby — An introduction
Ruby from zero to hero
Ruby Topic Maps Tutorial (2007-10-10)
python.pdf
Ruby Intro {spection}
Learning Ruby
Ruby data types and objects
Eloquent ruby
Write your Ruby in Style
Clean code
Ruby on Rails
Ruby Programming
Ruby Gotchas
Ruby -the wheel Technology
Ruby Gotchas
Ruby Basics
Ruby 程式語言綜覽簡介
No comment
Testing Ruby with Rspec (a beginner's guide)
Ruby — An introduction
Ad

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPT
Teaching material agriculture food technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
KodekX | Application Modernization Development
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Chapter 3 Spatial Domain Image Processing.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Teaching material agriculture food technology
Encapsulation_ Review paper, used for researhc scholars
MYSQL Presentation for SQL database connectivity
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
KodekX | Application Modernization Development
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Review of recent advances in non-invasive hemoglobin estimation
NewMind AI Weekly Chronicles - August'25 Week I
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Understanding_Digital_Forensics_Presentation.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Programs and apps: productivity, graphics, security and other tools
The Rise and Fall of 3GPP – Time for a Sabbatical?
Mobile App Security Testing_ A Comprehensive Guide.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Ad

Ruby Style Guide

  • 1. # ruby style # how to concision
  • 3. # CamelCase for module and class names # OneModule OneClass
  • 4. # snake_case for variables, methods, and symbols # one_variable is_a_method? now_a_method! :a_symbol
  • 5. # CONSTANTS are variables that don't vary for # the duration of a program, they should be written # in SCREAMING_SNAKE_CASE # LOUD_AND_PROUD_CONSTANT = "global access" # class and module names in ruby are constants # we write their names in camel case by convention # class CamelCase
  • 6. # avoid single letter variables except for # when their use is very clear # num = (1..100).reverse_each {|x| puts x }
  • 7. # an exclamation mark is used by convention # for methods that change the state of the # object they are called on. # these are called 'dangerous methods' # strings.mutate_in_ruby! # good to know
  • 8. # a question mark is used by convention # for methods that return true or false, # these are called 'predicate methods' # assertion.is_naming_convention? # true
  • 9. # an equals sign is used at the end of # method names that make assignments # these are called 'setter methods’ # and is SYNTACTIC # class SomeClass def setter=( value ) @instance_variable = value end end
  • 10. # setter methods can be called with # simplified syntax (syntactic sugar) # instance = SomeClass.new instance.setter=(new_value) # can do instance.setter = new_value # should do # there’s a lot of this in Rails
  • 11. # a common mistake is trying to use # it inside class definitions without # specifying the object # class SomeClass def setter=( value ) @instance_variable = value end instance_variable = value # doesn’t work and instance_variable=(value) # is trying to do this self.instance_variable = value # do this end
  • 12. # with setters inside a class, just remember that: # <<RULE Assignment expressions will only invoke a setter method when invoked through an object. RULE
  • 13. ruby.can_use_semicolons? # true # but please don't unless you really # want more than one statement per line # can_be tidy; can_also_be obfuscated;
  • 14. # whitespace # indent with 2 spaces # don't use tabs... ever # always put whitespace around the # assignment operator # foo = 1
  • 15. # unless you're setting default # method parameters # def foo( baz=2 ) puts 2 ** baz end
  • 16. # use underscores to make long # numbers more readable # 10000000000 # how many zeros? 10_000_000_000 # keeps fingers off the screen
  • 17. DoNot::call::methods::with_double_colons # yes, you can do it # a = 256::to_s::reverse!::to_i * 2 # 1304 # but it’s usually thought of as constant access # SomeObject::ITS_CONSTANT
  • 18. # when block commenting it is nice to # leave a blank line before the actual # code for the sake of readability # def apprehend( archibald ) archibald.get_him end
  • 20. # for strings with lots of odd characters # it can be better to use the alternative # string literal syntax to avoid using escapes # string = %q[<a href="javascript:method('call')">js?</a>] # resolves to "<a href="javascript:method('call')">js?</a>"
  • 21. # if you have a really big string it # can be better to define it like so # big_string = <<delimiter ]})@#$^UHEOIG(FKALSNC this is just one string and that is totally okay ()@))_-p[[}{P{{p[]}{[ delimiter
  • 22. # this is arguably inferior: # big_string = "this string right here " + " be concatenated with this one" + " aaaaand this one too" + " all these concatenations" + " are all a bit tiresome, no?"
  • 23. # << or <<- can also be useful for # passing big strings as arguments # DoesTheObjectMatter.new(:value => <<-eos don't worry about this it's all just one big string, no one is the wiser eos this = :no_longer_the_above_string
  • 24. # passing arguments with hash-like syntax # can save other people's time when reading # your code: # divide(1, 3) # which is which? divide(:num => 1, :denom => 3) # clearer
  • 25. # you can designate code blocks two ways. # the conventional way for multi-liners is with # do ... end
  • 26. # you can also use '{ .. }' but please # only use those for single-line blocks # single_line_block = (1..1000).map {|x| x**2 }
  • 27. # procs and lambdas can be helpful for keeping # your code DRY, among myriad other things. # use the lambda literal syntax (not keyword) # for good style # anonymous_method = ->( p_one, p_two ) do p_one + " and " + p_two end
  • 29. and, or != &&, ||
  • 30. # use &&, ||
  • 31. # 'and', 'or' are seldom used by convention # and can do unexpected things because they # bind differently than &&, || # puts nil || "rainier" # this prints "rainier" puts nil or "rainier" # this prints nil
  • 32. # why? the later parses to: # puts (nil) or "rainier" # the former to: # puts ( nil || "rainier" )
  • 33. # one-line 'if' statements # works # variable = if test then pos_result else neg_result end # better # variable = test ? pos_result : neg_result
  • 34. # nest 'if' like this: # if test nest_test ? nest_result : nest_other_result else first_layer_result end # deeply nested 'if' statements are generally # considered to be bad style
  • 35. # use 'unless' instead of negative 'if' # something.action if !test # questionable something.action unless test # better # but never use 'unless' with 'else' # use an 'if' instead.
  • 36. # but never use 'unless' with 'else' # use an 'if' instead # similar situation with while/until # something.action while !test # no something.action until test # yes
  • 37. # use ||= to freely initialize variables # to avoid unnecessary 'if' statements # variable ||= 'kenny wheeler'
  • 38. # if the first argument begins with a parentheses # then use parentheses in method invocation # this is a common source of consternation. # method ( 3 + 2 ) % 2 # ambiguous method(( 3 + 2 ) % 2) # unambiguous (method( 3 + 2 ) % 2) # unambiguous
  • 39. gem install rubocop <<-arbitrary_string_delimiter from the README: rubocop is a Ruby code style checker based on the Ruby Style Guide, which is available on github: https://github.com/bbatsov/ruby-style-guide rubocop is pretty strict, but can be useful arbitrary_string_delimiter