240 likes | 259 Views
Learn about the Ruby programming language, its features, comparisons with Java, duck typing, dynamic typing, and more. Explore reference links and beginner resources.
E N D
General Purpose Language Ruby Kit Chan COMP3351 Programming Languages November 9, 2007
Outline • Reference • Introduction • Ruby is • Features • Array • Loop • Ruby v.s. Java • Duck Typing • Dynamic Typing • Type Tag Checking • Functional Programming
Reference • Wikipedia http://en.wikipedia.org/wiki/Ruby_(programming_language) http://en.wikipedia.org/wiki/Comparison_of_programming_languages • Ruby Official Website http://www.ruby-lang.org/en/ • Learning Ruby http://www.math.umd.edu/~dcarrera/ruby/0.3/index.html • Duck Typing http://rubylearning.com/satishtalim/duck_typing.html
Introduction • Developed by Yukihiro “Matz” Matsumoto, in Feb, 1993 • First released in 1995 • 1.8.6 Ruby 1.9 developed March, 2007 • Named • As a gemstone because of a joke with in Matsumoto’s friends alluding to Perl’s name
Ruby is • Cross-platform Operating System • Combines syntax by • Perl • Smalltalk-like OO features • Shares features with • Lisp • Python • Dylan • CLU
Ruby is • The interpreted scripting language for • Quick • Easy OO programming • designed for programmer productivity • Straight-forward • principle of least surprise (POLS) • Ruby behaves in a way that minimizing confusion for experienced users • After you learn Ruby very well
Ruby is • Obedient >> 'Hello World' => "Hello World” • >> 'blink ' * 4 • => "blink blink blink blink " • Your Calculator >> 1+1 => 2 Or >> 2**2**2 => 16
Features • Object-oriented • Four levels of variables: • Global $var • Instance @var • Local [a-z] or _; var • Constant [A-Z] • Exception handling • Iterators & closures • Automatic garbage collecting • Highly portable http://tryruby.hobix.com/
Array • >> numbers = ["zero", "one", "two", "three", "four"] • => ["zero", "one", "two", "three", "four"] • => Array • >> numbers[0] • => "zero" What arrays do? • >> numbers[0].class • => String • >> numbers[0].upcase • => "ZERO" • >> numbers[0].reverse • => "orez"
Loop • If I knew Ruby when I was in grade school……. • >> 100.times do • .. puts "I won't do that again" • .. end • I won't do that again • => 100 • My life was going to be much easier
begin_time = Time.now.to_i i = 0 100.times do i += 1 j = 0 10.times do j += 1 k = 0 100.times do k += 1 puts i.to_s + " + " + j.to_s + " + " + k.to_s end end end end_time = Time.now.to_i difference = end_time - begin_time puts "It took " + difference.to_s + " seconds" ho = gets class test { publicstaticvoid main(String[] args) { long startTime = System.currentTimeMillis(); for (int i=0; i<=100 ; i++ ) { for (int j=0; j<=10 ; j++) { for (int k=0; k<=100 ; k++ ) { System.out.println( i + " + " + j + " + " + k);}}} long endTime = System.currentTimeMillis(); long difference = (endTime - startTime)/1000; System.out.println("It took " + difference + " seconds"); } } Ruby v.s. Java- Syntax
Ruby v.s. Java • Performance • Ruby: 24 – 26 seconds • Java: 1 – 2 seconds
Duck Typing • Ruby interpreter is happy to treat it as it were a duck • If an object walks and talks like a duck • Duck typing means • An object type is defined by what it can do • Not by what it is • Duck typing refers to • less concerned with the class of an object • more concerned with what methods can be called on it • what operations can be performed
Duck Typing • we use respond_to? • Example • >> puts ('A string'.respond_to? :to_str) • true • => nil • >> puts (Exception.new.respond_to? :to_str) • true • => nil • If an object quacks like a duck, just treat it as a duck…. • We should treat objects to the methods they define
>> class Duck >> class Duck .. def quack .. 'Quack!' .. end .. def swim .. 'Paddle paddle paddle...' .. end .. end => nil >> class Goose .. def honk .. 'Honk!' .. end .. def swim .. 'Splash splash splash...' .. end .. end => nil >> Duck Typing
>> class DuckRecording >> class DuckRecording .. def quack .. play .. end .. def play .. 'Quack' .. end .. end => nil >> def make_it_quack(duck) .. duck.quack .. end => nil >> puts make_it_quack(Duck.new) Quack! >> puts make_it_quack(DuckRecording.new) Quack => nil >> def make_it_swim(duck) .. duck.swim .. end => nil >> puts make_it_swim(Duck.new) Paddle paddle paddle... => nil >> puts make_it_swim(Goose.new) Splash splash splash... => nil Duck Typing
Add methods to individual class instances class Duck def quack puts 'Quack!' end def swim puts 'Paddle paddle paddle...' end end d = Duck.new #create new instance of the class d.quack #call method d.swim #call method def d.walk #override existing method with #new functionality puts 'I am walking ... walking' end d.walk => nil => #<Duck:0x6cc7ddc> Quack! => nil Paddle paddle paddle... => nil => nil I am walking ... walking => nil irb(main):022:0> Add Method to Class Instances
Dynamic Typing • Ruby, the data types are not wholly declared on variable • Data associated with variables are not known until the time of execution • Advantage: • flexibility • Less work for the programmer
Type Tag Checking • Ruby is dynamically typed • it supports run-time dispatch on tagged data • Takes place at run-time • values bound in variables can acquire different tags depending on the execution path
Example • var x #declares the name x • x :=1 #associates int val 1 to name x • x :=“hi” #associates the string val “hi” to name x • ……………illegal • binding x to values of inconsistent type • Pure Dynamically typed system allows the execution • Type tags are attached to values • Dynamic typing catches errors during program execution
Example......cont • Dynamic typing keeps all program values “tagged” • Checks the tag before using any value in an operation • var x :=1 #binds val 1 to x • var y := “hi” #binds val “hi” to y • var z := x + y #add x to y
Example......cont • The value bound to x be a pair (integer, 1) • The value bound to y be a pair (string, “hi”) • Attempts to execute the 3rd line, • Checks the type tags integer and string • If the operation + (addition) is not defined • An error is signaled
Why Ruby? • High productivity for programmers • Execution time is not the main concern • Web Developments • Projects like Ruby on Rails • Functional Programming • Paradigm treats computation as the evaluation of mathematical functions • Emphasize on application of functions • Largely being used in academia • Lambda calculus • Forms the foundation for most models of functional programming