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

Ruby for .NET developers

Max Titov
November 22, 2012

Ruby for .NET developers

Introduction to Ruby for .NET developers.

Max Titov

November 22, 2012
Tweet

More Decks by Max Titov

Other Decks in Programming

Transcript

  1. Objective: learn and compare ▶  What is Ruby? ▶  Ruby

    basics ▶  Ruby specialties ▶  Ruby ecosystem ▶  So why Ruby? ▶  How to get started?
  2. Creator "I wanted a scripting language that was more powerful

    than Perl, and more object- oriented than Python. That's why I decided to design my own language.”      Yukihiro  (Matz)  Matsumoto
  3. Facts ▶  First  “Hello  World”  in  1995  (.NET  2002,  C#

      2001)   ▶  Ruby  is  opensource   ▶  Inspired  by:  Perl,  Smalltalk,  Lisp,  Python  …   ▶  Philosophy:  Designed  for  programmer     producTvity  and  fun.  
  4. First taste of Ruby code class Apple! NAME = "Apple"!

    attr_accessor :size, :color! ! def initialize size! @size = size! end! ! def taste! puts "Sweet #{@color} #{NAME} of size #{size}"! end! end! ! apple = Apple.new 'big'! apple.color = 'red' ! apple.taste # Sweet red Apple of size big!
  5. Similarities ▶  Large standard library (Not so big as .NET

    Framework but feels enough) ▶  The are classes, methods, variables, properties. ▶  Access control modifiers ▶  Closures (Lambdas) ▶  Exceptions ▶  Garbage collector
  6. Ruby is Dynamic ▶  No need to declare variables var

    = "Ruby is Dynamic"! var.class #String! var = 1! var.class #Fixnum!
  7. Ruby is Strong Typed ▶  Like in .NET there is

    no type juggling.
 You need to convert between types. a = "1"! b = 2! a + b #TypeError: can`t convert Fixnum into String! a.to_i + b # 3! ! !
  8. Everything is an Object ▶  All classes are drived from

    base class named Class! ▶  Unlike .NET there is no structs
  9. Everything is an Object ▶  So even primitive Types are

    an objects 
 10.times {puts "I am sexy and I know it!"}! # I am sexy and I know it!! # I am sexy and I know it!! # I am sexy and I know it!! # I am sexy and I know it!! # I am sexy and I know it!! # ....(10 times)....!
  10. Everything is an Object ▶  Operators are simply object methods.

    class Fixnum < Integer! def + numeric! # sum code! end! end!
  11. Ruby is Flexible ▶  Core Ruby code could be easy

    altered. class Numeric ! def toSquare! self * self! end! end! ! 2.toSquare # 4!
  12. Ruby is Concise ▶  Properties could be defined in old

    school way class Person! #getter! def name! @name! end! ! #setter! def name= name! @name = name! end! end
  13. Ruby is Concise ▶  Or in more convenient style class

    Person! #getter and setter, for several properties! attr_accessor :name , :nickname! ! #getter! attr_reader :gender! ! #setter! attr_writer :age! end
  14. Some questions to you ▶  Constants, start from capital or

    not? ▶  Field names, prefixed with underscore or not? ▶  How many coding guide lines is there actually? ▶  Microsoft Framework Design Guidelines ▶  IDesign C# coding standards ▶  Your company coding standard ▶  Your own coding standard. (Professional choice)
  15. Ruby is Strict Ruby syntaxes mostly dictates naming conventions: ▶ 

    localVariable ▶  @instanceVariable ▶  @@classVariable ▶  $globalVariable ▶  Constant ▶  ClassName ▶  method_name
  16. Ruby is Strict ▶  95% of ruby developers use same

    code style. ▶  Other 5% are a new comers, that will adept code conventions soon.
  17. And Ruby Is Forgiving ▶  Parenthesis are optional ▶  No

    need in semicolon at the end of each line
  18. Duck typing What really makes object an object? How can

    I recognize that object is a Duck?
  19. Duck typing ▶  Definition: When I see a bird that

    walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck. (Wikipedia)
  20. So, is it a duck? Swim?  Yes   Can  Quack?

     Yes     Is  it  a  duck?   Definitely!  
  21. And this? Swim?  Yes   Can  Quack?  Yes.  Kind  of

      strange,  but  sTll  it     make  quack  like  sound     Is  it  a  duck?   Looks  like!  
  22. How, about this? Swim?  Badly,  but  yes.     Can

     Quack?  Yeah,  make     Plenty  of  sounds  but,  can     quack  also.     Is  it  a  duck?   Sort  of  weird  duck,  but  sTll   yes!  
  23. Or, probably this? Swim?  Yep   Can  quack?  Can  

      make  weird  quack   sounds.     Is  it  duck?   Trying  very  hard  
  24. Duck Typing ▶  So, everything that could respond to several

    criteria's that makes us believe
 that object is a duck, can be recognized as a duck. ▶  But what that means from programmer perspective and how to implement it?
  25. But there is Modules and Mixins! ▶  Modules define pieces

    of reusable code that couldn’t be instantiated. ▶  Modules provides a namespace functionality and prevent name clashes
  26. Namespaces in Ruby module System! module Windows! module Forms! module

    MessageBox! ! ! !def MessageBox.Show message! !puts message! ! ! !end! end! end! end! end! ! include System::Windows::Forms! MessageBox.Show 'Namespacing in ruby’
  27. Modules and Mixins ▶  Modules could be “mixed in” to

    any class that satisfy conventions described in documentation (Should quack and swim like a duck). ▶  In .net Mixins using ReMix http://remix.codeplex.com/
  28. In .NET we usually do this ▶  We need to

    implement two interfaces ▶  IEnumerable! ▶  IEnumerator
  29. In .NET we usually do this class People : IEnumerable!

    {! !IEnumerator GetEnumerator()! !{! ! !return (IEnumerator) new PeopleEnumerator();! !}! }! ! public class PeopleEnumerator : IEnumerator! {! !public Person Current;! !public void Reset();! !public bool MoveNext();! }! ! public class Person! {! }
  30. How it’s done in Ruby ▶  From Enumerable module documentation:


    The Enumerable mixin provides collection classes with several traversal and searching methods, and with the ability to sort. The client class must provide a method “each”, which yields successive members of the collection.
  31. Document and organize their code better # The <code>Enumerable</code> mixin

    provides collection classes with! # several traversal and searching methods, and with the ability to! # sort. The class must provide a method <code>each</code>, which! # yields successive members of the collection. If! # <code>Enumerable#max</code>, <code>#min</code>, or! # <code>#sort</code> is used, the objects in the collection must also! # implement a meaningful <code><=></code> operator, as these methods! # rely on an ordering between members of the collection.! module Enumerable! # enum.to_a -> array! # enum.entries -> array! !# Returns an array containing the items in <i>enum</i>.! # ! # (1..7).to_a #=> [1, 2, 3, 4, 5, 6, 7]! # { 'a'=>1, 'b'=>2, 'c'=>3 }.to_a #=> [["a", 1], ["b", 2], !# ! ! ! ! ! ! ! ! ! ! !["c", 3]]! def to_a()! #This is a stub, used for indexing! end !
  32. Closures in Ruby ▶  Closures in Ruby called Blocks 


    names = ["Max", "Alex", "Dima"].map do |name|! name.downcase! end! puts names! # max! # alex! # dima! !
  33. Ruby metaprogramming ▶  Metaprogramming is the writing of computer programs

    that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime. (Wikipedia) ▶  Keep programs DRY – Don’t repeat yourself.
  34. Where is example? In all cinemas of your town 


    Next time “Ruby metaprogramming”
  35. Frameworks Ruby ▶  Ruby on Rails, Merb ▶  Sinatra ▶ 

    Radiant, Mephisto .NET ▶  ASP.NET MVC, FunuMVC ▶  Nancy ▶  Umbraco, DotNetNuke
  36. Tools Ruby ▶  Any TextEditor (RubyMine IDE) ▶  Rake ▶ 

    Gems ▶  Gems and Bundler ▶  TestUnit, minitest ▶  Cucumber, RSpec, Shoulda .NET ▶  Visual Studio, MonoDevelop ▶  MSBuild, NAnt ▶  Dll’s ▶  NuGet ▶  MSUnit, NUnit … ▶  NSpec, SpecFlow
  37. So Why Ruby? ▶  All hot stuff is here J

    ▶  Benefits of interpreted language ▶  Quick prototyping with Rails ▶  It’s fun and it’s going to make your better! ▶  And definitely it will sabotage what you believe in.
  38. Books ▶  Programming Ruby (Pick Axe book)
 By Thomas D.,

    Fowler C., Hunt A. ▶  Design Patterns In Ruby
 By Russ Olsen ▶  Search Google for: Learn Ruby