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

Ruby is Magic: Magic Kindergarten

Ruby is Magic: Magic Kindergarten

Today's Cologne.rb episode is about Ruby Idioms and Best Practices. Like usual it is in German but the code snippets maybe useful to you anyways.

Copyright Notice: My Little Pony - Friendship is Magic is Property of Hasbro and The Hub.

Dirk Breuer

January 16, 2013
Tweet

More Decks by Dirk Breuer

Other Decks in Programming

Transcript

  1. Besseren Ruby Code schreiben Ruby Code den andere geschrieben haben,

    besser verstehen Warum? Bessere Kommunikation >>
  2. Don’t forget 1 + "2" # => TypeError: String can't

    be coerced into Fixnum Ruby is ‘Strong Binding’
  3. Kommentare Beschreiben wie es geht Einzeiler weisen oft darauf hin,

    dass der Code nicht optimal ist (gilt nicht nur für Ruby)
  4. Klammern sind optional NIE bei leeren Argumentlisten Bei Methodendefinition Nicht

    bei if, unless, etc In der Regel Klammern bei Methodenaufrufen Bei DSL-Like Methoden (Tests, Konfiguration, etc.) keine Klammern Keine Klammern bei Hash als Argument
  5. pony { name: "rainbow dash", color: "blue" } pony({ name:

    "rainbow dash", color: "blue" }) Parser erwartet hier einen Block!
  6. ?! Methoden, die eine Ja/Nein Frage beantworten enden auf ?

    Kein ‘is_’ prefix! Methoden mit ! tuen etwas “gefährliches” (z.B.: Caller verändern, Exception werfen) Es sollte eine Methode ohne das ! geben, die sich “freundlicher” verhält
  7. Kontrollstrukturen unless statt if not In Ruby wird nur false

    und nil als nicht-wahr interpretiert Alles andere wird als wahr gewertet (0, “”, []) case-Statement verwendet die #=== Methode
  8. Argumente def do_something(a, b); end do_something 42, 101 def do_something(*args);

    end do_something :foo, 23 def do_something(a, b = :default); end do_something 42 def do_something(options = {}); end do_something verbose: true, file: "/dev/ignore"
  9. Mixins class BaseModel end module Taggable end class Post <

    BaseModel include Taggable end p Post.ancestors # => [Post, Taggable, BaseModel, Object]
  10. Fun facts Objekt-IDs von Fixnum-Instanzen sind immer ungerade! false.object_id #

    => 0 0.object_id # => 1 true.object_id # => 2 1.object_id # => 3 nil.object_id # => 4 2.object_id # => 5
  11. class Database def initialize(opts = {}) @username = opts[:username] @password

    = opts[:password] @connection = Database::MySQL::Connection.new @username, @password end end
  12. class Database attr_reader :username, :password def initialize(opts = {}) @username

    = opts[:username] @password = opts[:password] end def connection @connection ||= Database::MySQL::Connection.new username, password end end
  13. # In your app require 'ponyville/library' # In file ponyville/library.rb

    require 'ponyville/library/twilight_sparkle' require 'ponyville/library/spike' module Ponyville module Library end end # In file ponyville/library/twilight_sparkle.rb class Ponyville::Library::TwilightSparkle def initialize(args) # ... end end
  14. "Do this to include a #{variable} in a String" "Don't

    do this to include a " + variable + " in a String"
  15. Pony.find(:all) if status == :ready # ... else # ...

    end authenticate username: "Rarity", password: "******"
  16. Weniger Magic als man denkt Ruby ist konsistenter als man

    denkt Ruby ist optimiert für den Menschen / das Pony
  17. Thanks! Q & A? Dirk Breuer / @railsbros_dirk Sebastian Cohnen

    / @tisba ? “My Little Pony” © Hasbro Studios and DHX Media Vancouver rubyismagic.de