General Purpose Language Ruby Kit Chan COMP3351 Programming

24 Slides125.00 KB

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 Shares features with Lisp Python Dylan CLU OO features

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 Instance Local Constant Exception var @var [a-z] or ; var [A-Z] 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

Ruby v.s. Java- Syntax 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 { public static void 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 Performance Ruby: 24 – 26 seconds Java: 1 – 2 seconds Language Paradigm Type Checking Java Imperative Static Object-oriented Generic Ruby Imperative Object-oriented Functional Aspect-oriented Dynamic (duck)

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 If puts ('A string'.respond to? :to str) true nil puts (Exception.new.respond to? :to str) true nil an object quacks like a duck, just treat it as a duck . We should treat objects to the methods they defin

Duck Typing class Duck class Goose . def quack . def honk . 'Quack!' . 'Honk!' . end . end . def swim . def swim . 'Paddle paddle paddle.' . 'Splash splash splash.' . end . end . end . end nil nil

Duck Typing 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

Add Method to Class Instances 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

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 it is dynamically typed 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 x : 1 x : “hi” #declares the name x #associates int val 1 to name x #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 var y : “hi” var z : x y #binds val 1 to x #binds val “hi” to 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 Web time is not the main concern Developments Projects like Ruby on Rails Functional Programming Paradigm treats computation as the evaluation of mathematical functions Emphasize Largely on application of functions being used in academia Lambda calculus Forms the foundation for most models of functional programming

Thank you !!

Back to top button