2. Seven Languages in Seven Weeks
A Pragmatic
Guide to
Learning
Programming
Languages
By Bruce A. Tate
3. Why New Programming Language?
“Learning a new programming language will show you
new ways of thinking, and new approaches to problem solving
that will help you be a better programmer in any language.”
- Pragmatic Bookshelf
“Ultimately, programming is about understanding, and
understanding is about ideas. So, exposure to new ideas is essential
to a deeper understanding of what programming is all about.”
- Foreword By Joe Armstrong, creator of Erlang
4. Agenda
Ruby is…
History & Why?
With a Spoonful of Sugar
So, Ruby is…
Ruby: Interpreted Language
Ruby: Interpreted Language – Example
Compare: Compiled Language - Java
Ruby: Object-Oriented Language
Ruby: Pure Object-Oriented Language
Ruby: Dynamically Typed Language
What is Duck Typing?
Ruby: Duck Typing Code Example
Download & Installation
Ruby Code
Reference
5. Ruby is…
Programming Language!
Dynamic
Open Source
Focus on…
Simplicity
Productivity
Has an elegant syntax
Natural to read
Easy to write
Image Source: Ruby Programming Language
6. History & Why?
Ruby’s Creator
Yukihiro “Matz” Matsumoto
Created in about 1993
Motivation
The primary motivation was to amuse himself!
Just a hobby at the beginning
New object-oriented language that combines
characteristics from Lisp, Smalltalk and Perl
To enhance programmers’ productivity
“Ruby is simple in appearance, but is very complex inside, just like our human body.”
- Matz, speaking on the Ruby-Talk mailing list, May 12th, 2000.
Image Source: Ruby Everywhere
7. With a Spoonful of Sugar
Ruby with more syntactic sugar
Makes code easier to read and write
Focus on the efficiency of the
programmers
“A spoonful of sugar makes the medicine go down.”
Mary Poppins
Image Source: Disney Wiki – A Spoonful of Sugar
8. So, Ruby is…
Interpreted Language
Ruby code is executed by an interpreter
Object-Oriented Language
Encapsulation
Inheritance
Polymorphism
Dynamically Typed Language
Types are bound at execution time
Image Source: Skillcrush - Ruby
10. Interactive
Console
Ruby File
(Ha.rb)
Ruby: Interpreted Language - Example
D:Ruby22bin>type Ha.rb
3.Times do
print “Ha “
end
D:Ruby22bin>ruby Ha.rb
Ha Ha Ha
D:Ruby22bin>
D:Ruby22bin>ruby
3.Times do
print “Ha “
end
^D
Ha Ha Ha
D:Ruby22bin>
11. Compare: Compiled Language - Java
Java Source File
(*.java)
Java
Compiler
Java Class File
(*.class)
JRE
(Java Runtime Environment)
12. Ruby: Object-Oriented Language
Encapsulation
[State & Behavior] : Packaged together
Inheritance
[Class Tree] : Object types are organized
Polymorphism
[Many Forms]
: Objects can be shown
Image Source: What Is an Object?
Image Source: What Is Inheritance?Image Source: Object-Oriented Concepts
13. Ruby: Pure Object-Oriented Language
Ruby Programming Language
Everything is an object!
Compare: Java Programming Language
Primitive types (int, char, ……) are not objects!
D:Ruby22bin>irb
irb(main):001:0> 4
=> 4
irb(main):002:0> 4.class
=> Fixnum
irb(main):003:0> 4 + 4
=> 8
irb(main):004:0> 4.methods
=> [:to_s, :inspect, :-
@, :+, ∙∙∙∙∙∙, :__id__]
irb(main):005:0>
14. Ruby: Dynamically Typed Language
Types are bound
at execution time
Flexibility
Execution Safety
Types are bound
at compile time
Flexibility
Execution Safety
Dynamically Typed
Statically Typed
Java
15. What is Duck Typing?
Quacks
like a duck
Swims
like a duck
Walks
like a duck
Call it
a duck
“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.” - James Whitcomb Riley
Image Source: https://www.iconfinder.com and http://www.vectors4all.net/
16. Ruby: Duck Typing Code Example
D:Ruby22bin>irb
irb(main):001:0> i = 0
=> 0
irb(main):002:0> a = ['100', 100.0]
=> ["100", 100.0]
irb(main):003:0> while i < 2
irb(main):004:1> puts a[i].to_i
irb(main):005:1> i = i + 1
irb(main):006:1> end
100
100
=> nil
irb(main):007:0>
We consider this to_i method as quack!
Duck typing doesn’t care
what the underlying type might be
(whether string or float).
string
float
17. Download & Installation
Current Stable Version
Ruby 2.2.2 (As of 28 Jun 2015)
Windows
RubyInstaller - http://rubyinstaller.org/downloads/
OS X
Homebrew - http://brew.sh/
Debian GNU/Linux and Ubuntu
apt – command : $ sudo apt-get install ruby-full
CentOS, Fedora, and RHEL
yum – command :$ sudo yum install ruby
18. Ruby: Sample Code
D:Ruby22bin>ruby
properties = ['object oriented', 'duck typed', 'productive', 'fun']
properties.each {|property| puts "Ruby is #{property}."}
^D
Ruby is object oriented.
Ruby is duck typed.
Ruby is productive.
Ruby is fun.
D:Ruby22bin>
20. Ruby Code: Comparison Operators
D:Ruby22bin>irb
irb(main):001:0> x = 4
=> 4
irb(main):002:0> x < 5
=> true
irb(main):003:0> x > 4
=> false
irb(main):004:0> false.class
=> FalseClass
irb(main):005:0> true.class
=> TrueClass
irb(main):006:0> puts 'X value is equal to 4.' if x == 4
X value is equal to 4.
=> nil
irb(main):007:0>
Everything is an object
in Ruby!
21. Ruby Code: Loops – until & while
D:Ruby22bin>irb
irb(main):001:0> x = 5
=> 5
irb(main):002:0> x = x - 1 until x == 1
=> nil
irb(main):003:0> x
=> 1
irb(main):004:0> while x < 5
irb(main):005:1> x = x + 1
irb(main):006:1> puts x
irb(main):007:1> end
2
3
4
5
=> nil
22. Ruby Code: Expressions - true & false
D:Ruby22bin>irb
irb(main):001:0> puts '1 is true in Ruby' if 1
1 is true in Ruby
=> nil
irb(main):002:0> puts 'String is true in Ruby' if 'Kwangshin Oh'
(irb):2: warning: string literal in condition
String is true in Ruby
=> nil
irb(main):003:0> puts '0 is also true in Ruby' if 0
0 is also true in Ruby
=> nil
irb(main):004:0> puts 'The false is false in Ruby' if false
=> nil
irb(main):005:0> puts 'The nil is false in Ruby' if nil
=> nil
irb(main):006:0>
Everything
( but nil and false )
evaluate to true!
23. Reference
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Language
by Bruce A. Tate
https://pragprog.com/book/btlang/seven-languages-in-seven-weeks
Ruby Programming Language
https://www.ruby-lang.org/
Ruby-Talk mailing list, May 12th, 2000
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773
Disney Wiki – A Spoonful of Sugar
http://disney.wikia.com/wiki/A_Spoonful_of_Sugar
Matzにっき (Matz Diary)
http://www.rubyist.net/~matz/
The Java™ Tutorials - Object-Oriented Programming Concepts
https://docs.oracle.com/javase/tutorial/java/concepts/index.html
Duck typing
https://en.wikipedia.org/wiki/Duck_typing