5. 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
6. Facts
▶ First “Hello World” in 1995 (.NET 2002, C#
2001)
▶ Ruby is opensource
▶ Inspired by: Perl, Smalltalk, Lisp, Python …
▶ Philosophy: Designed for programmer
productivity and fun.
8. 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
10. 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
11. Ruby is Dynamic
▶ No need to declare variables
var = "Ruby is Dynamic"
var.class #String
var = 1
var.class #Fixnum
12. 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
13. Everything is an Object
▶ All classes are drived from base class
named Class
▶ Unlike .NET there is no structs
14. 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)....
15. Everything is an Object
▶ Operators are simply object methods.
class Fixnum < Integer
def + numeric
# sum code
end
end
16. Ruby is Flexible
▶ Core Ruby code could be easy altered.
class Numeric
def toSquare
self * self
end
end
2.toSquare # 4
17. 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
18. 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
19. 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)
28. 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)
29. So, is it a duck?
Swim? Yes
Can Quack? Yes
Is it a duck?
Definitely!
30. And this?
Swim? Yes
Can Quack? Yes. Kind of
strange, but still it
make quack like sound
Is it a duck?
Looks like!
31. 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 still
yes!
32. Or, probably this?
Swim? Yep
Can quack? Can
make weird quack
sounds.
Is it duck?
Trying very hard
33. 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?
34. What is told you there is no
abstract classes and interfaces?
35. 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
36. 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’
37. 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/
38. Lets see how it works by
implementing Enumerable
39. In .NET we usually do this
▶ We need to implement two interfaces
▶ IEnumerable
▶ IEnumerator
40. 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
{
}
41. 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.
42. How it’s done in Ruby
class MyCollection
include Enumerable
def each
#yields result
end
end
45. In Ruby world developers used to
write unit tests for this
46. 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
47. Closures in Ruby
▶ Closures in Ruby called Blocks
names = ["Max", "Alex", "Dima"].map do |name|
name.downcase
end
puts names
# max
# alex
# dima
48. 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.
54. So Why Ruby?
▶ All hot stuff is here
▶ 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.