Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby Idioms

Ruby Idioms

Florian Plank

February 12, 2014
Tweet

More Decks by Florian Plank

Other Decks in Programming

Transcript

  1. RUBY & RUBY ON RAILS
    IDIOMS

    View Slide

  2. A word on style

    View Slide

  3. - Soft tabs, two space indent
    - Lines shorter than 80 characters
    - No spaces after [( and before )]
    - Methods: snake_case
    - Classes/Modules: CamelCase
    - Constants: SCREAMING_SNAKE_CASE
    - Space after commas: foo(a, b)

    View Slide

  4. “Idioms”

    View Slide

  5. if answer == 42
    # ...
    elsif foo == 'foo'
    # ...
    else
    # ...
    end

    View Slide

  6. if answer == 42 then # ...
    elsif foo == 'foo' then # ...
    else # ...
    end

    View Slide

  7. if answer == 42 then
    # ...
    elsif foo == 'foo' then
    # ...
    else
    # ...
    end

    View Slide

  8. if !correct
    # ...
    end

    View Slide

  9. unless correct
    # ...
    end

    View Slide

  10. unless correct
    # ...
    else
    # ...
    end

    View Slide

  11. unless correct
    single_line_of_something
    end

    View Slide

  12. single_line_of_something unless correct
    single_line_of_something if correct

    View Slide

  13. message = if correct
    "You are right!"
    else
    "Sorry, that's wrong."
    end

    View Slide

  14. if !flaky_value.nil?
    # ...
    end

    View Slide

  15. if flaky_value
    # ...
    end

    View Slide

  16. if env == :production or env == :development
    # ...
    end

    View Slide

  17. if [:production, :development].include?(env)
    # ...
    end

    View Slide

  18. String(123)

    View Slide

  19. 123.to_s

    View Slide

  20. 123.is_a? String

    View Slide

  21. 123.respond_to? :to_s

    View Slide

  22. def destroy_universe
    # ...
    end
    destroy_universe
    def destroy_planet(planet)
    # ...
    end
    destroy_planet(:mars)

    View Slide

  23. destroy_universe()

    View Slide

  24. def foo(arg1, arg2)
    # ...
    end
    foo 1, 2

    View Slide

  25. def foo(options, &block)
    # ...
    end
    foo {}

    View Slide

  26. def green?
    # ...
    end
    def destroy!
    # ...
    end

    View Slide

  27. def foo(name, options)
    # ...
    end
    foo('bar', {:something => 'else', :answer => 42})
    foo('bar', :something => 'else', :answer => 42)

    View Slide

  28. def foo
    # ... body
    return results
    end

    View Slide

  29. def foo(arg)
    return unless arg == 42
    # ... body
    end

    View Slide

  30. a, b = b, a

    View Slide

  31. a, b = [1, 2, 3]

    View Slide

  32. %w(helsinki oulu tampere)
    # => ["helsinki", "oulu", "tampere"]

    View Slide

  33. %i(helsinki oulu tampere)
    # => [:helsinki, :oulu, :tampere]

    View Slide

  34. %i|helsinki oulu tampere|
    %i-helsinki oulu tampere-

    View Slide

  35. the_number ||= complex_calculation

    View Slide

  36. list = []
    dictionary = {}

    View Slide

  37. class Store
    class << self
    def advanced_search
    # ...
    end
    end
    end

    View Slide

  38. Struct.new("Point", :x, :y)

    View Slide

  39. class Point < Struct.new(:x, :y)
    end
    origin = Point.new(0,0)

    View Slide

  40. Point = Struct.new(:x, :y) do
    def to_s
    "[#{x}, #{y}]"
    end
    end
    Point.new(0,0).to_s
    # => "[0, 0]"

    View Slide

  41. class Parent
    @@class_var = "parent"
    def self.print_class_var
    puts @@class_var
    end
    end
    class Child < Parent
    @@class_var = "child"
    end
    Parent.print_class_var
    # => "child"

    View Slide

  42. upcase_chars = []
    %w(a b c).each do |char|
    upcase_chars << char.upcase
    end
    Not so great

    View Slide

  43. %w(a b c).map do |char|
    char.upcase
    end
    Better

    View Slide

  44. %w(a b c).map { |char| char.upcase }
    Even better

    View Slide

  45. %w(a b c).map(&:upcase)
    Great

    View Slide

  46. Brand.first.stores.map(&:id)
    Brand.first.store_ids
    @active_brands.ids

    View Slide

  47. def make_it_bigga(string)
    string.upcase
    end
    %w(a b c).map(&method(:make_it_bigga))

    View Slide

  48. [1, 2, nil, 4].compact.reject(&:odd?).inject(&:+)
    # => 6

    View Slide

  49. {:foo => "bar", :baz => 42}.each do |key, value|
    puts "#{key}: #{value}"
    end
    # foo: bar
    # baz: 42
    # => {:foo=>"bar", :baz=>42}

    View Slide

  50. [[:foo, "bar"], [:baz, 42]].each do |(key, value)|
    puts "#{key}: #{value}"
    end
    # foo: bar
    # baz: 42
    # => {:foo=>"bar", :baz=>42}

    View Slide

  51. [[:foo, "bar"], [:baz, 42]].each do |(_, value)|
    puts value
    end
    # bar
    # 42
    # => [[:foo, "bar"], [:baz, 42]]

    View Slide

  52. name == ""
    name.length == 0
    name.empty?

    View Slide

  53. count == 0
    count.zero?

    View Slide

  54. dangerous rescue nil

    View Slide

  55. FOLLOW YOUR

    View Slide