KEMBAR78
Ruby Programming Language - Introduction | PPTX
Ruby
Programming Language
Introduction
28 Jun 2015
Kwangshin Oh
kwangshin@gmail.com
http://kwangshin.pe.kr
Seven Languages in Seven Weeks
A Pragmatic
Guide to
Learning
Programming
Languages
By Bruce A. Tate
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
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
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
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
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
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
Interactive
Console
Ruby File
(*.rb)
Ruby: Interpreted Language
Image Source: http://www.iconsdb.com, http://dryicons.com and http://findicons.com
Ruby
Interpreter
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>
Compare: Compiled Language - Java
Java Source File
(*.java)
Java
Compiler
Java Class File
(*.class)
JRE
(Java Runtime Environment)
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
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>
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
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/
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
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
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>
Ruby Code: Hello World!
D:Ruby22bin>irb
irb(main):001:0> puts 'Hello World!'
Hello World!
=> nil
irb(main):002:0> language = 'Ruby'
=> "Ruby"
irb(main):003:0> puts "Hello, #{language}"
Hello, Ruby
=> nil
irb(main):004:0> language = 'my Ruby'
=> "my Ruby"
irb(main):005:0> puts "Hello, #{language}"
Hello, my Ruby
=> nil
irb(main):006:0>
Ruby’s Interactive Console
<One Quote String>
Interpreted Literally
<Two Quotes String>
String Evaluation
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!
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
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!
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

Ruby Programming Language - Introduction

  • 1.
    Ruby Programming Language Introduction 28 Jun2015 Kwangshin Oh kwangshin@gmail.com http://kwangshin.pe.kr
  • 2.
    Seven Languages inSeven Weeks A Pragmatic Guide to Learning Programming Languages By Bruce A. Tate
  • 3.
    Why New ProgrammingLanguage? “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…  ProgrammingLanguage! 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 Spoonfulof 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
  • 9.
    Interactive Console Ruby File (*.rb) Ruby: InterpretedLanguage Image Source: http://www.iconsdb.com, http://dryicons.com and http://findicons.com Ruby Interpreter
  • 10.
    Interactive Console Ruby File (Ha.rb) Ruby: InterpretedLanguage - 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-OrientedLanguage  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 TypedLanguage 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 DuckTyping? 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 TypingCode 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>
  • 19.
    Ruby Code: HelloWorld! D:Ruby22bin>irb irb(main):001:0> puts 'Hello World!' Hello World! => nil irb(main):002:0> language = 'Ruby' => "Ruby" irb(main):003:0> puts "Hello, #{language}" Hello, Ruby => nil irb(main):004:0> language = 'my Ruby' => "my Ruby" irb(main):005:0> puts "Hello, #{language}" Hello, my Ruby => nil irb(main):006:0> Ruby’s Interactive Console <One Quote String> Interpreted Literally <Two Quotes String> String Evaluation
  • 20.
    Ruby Code: ComparisonOperators 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 Languagesin 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