240 likes | 365 Views
Ruby by Tim Hanson & Mamadou Seck. Philosophy. "I hope to see Ruby help every programmer in the world to be productive, and to enjoy programming, and to be happy. That is the primary purpose of Ruby language.” - Yukihiro « Matz »
E N D
Ruby by Tim Hanson & Mamadou Seck
Philosophy "I hope to see Ruby help every programmer in the world to be productive, and to enjoy programming, and to be happy. That is the primary purpose of Ruby language.” - Yukihiro « Matz » Matsumoto
History • Created in Japan in the mid-1990s • Christmas 1996: Version 1 released • 2000: First English book printed • 2005: Ruby on Rails popularized it • 2008: Ruby version 1.8.7 released • 2010: Ruby version 1.9.2 released • (not fully compatible with Rails 3.0)
Overview • Influenced by Perl, Smalltalk, Eiffel, and Lisp • Supports Multiple Programming Paradigms • Functional • Object-Oriented • Imperative • Reflective • Dynamic typing • Automatic Memory Management • Interactive Ruby Shell • Centralized Package Management via RubyGems
Multiple Implementations • Ruby 1.8.7 • MRI – Matz’ Ruby Interpreter • Written in C • Single pass interpreted language • Slow • Compatible with Rails 3 • Just-in-time Compilation implementations • YARV, JRuby, Rubinius, Iron Ruby, HotRuby • MacRuby (ahead-of -time compilation too) • Ruby 1.9.2 • Based on YARV • Unicode support • Changes broke many unmaintained gems • Rails 3 not fully supported
Command Line Utilities • ri – ruby index • works like man in linux • irb – interactive ruby shell • gem – RubyGem package manager • works like apt-get or yum in linux but installs ruby packages (gems) likes rails • ruby – runs ruby scripts • ruby script.rb • shebang line : #! /usr/bin env ruby
Identifiers and Scope • Identifiers • Can’t include white space • Can’t include nonprinting characters • Case sensitive • First character denotes scope • $ - global variables • @ - instance variables • @@ - class variables • Lower case letter or underscore - local variables • Upper case letter – constant • Capital letter – constant (convention – all caps) • Capital letter – class (convention – CamelCase) • Method ending with: • ? - return boolean value (convention) • ! – use with caution (convention for mutators) • = - can be invoxed using assignment syntax
Data Types • Numeric • Integer – automatically converts between subtypes • Fixnum • Bignum – arbitrary precision • Float • Digit has to appear on both sides of decimal point • i.e. can’t write just .1 • BigDecimal – arbitrary precision • Complex • Rational • No primitives – everything is an object
Data Types Continued • Symbols • prefixed by : • Lightweight strings • Strings • Many methods for String processing • Can be single quoted or double quoted • Can use any non-alphanumeric delimiter • %!Also a valid string! • Hashes • Key – Value pairs like Dictionaries in Python • Arrays • Untyped • Mutable • Elements don’t have to be from same class • 0 is the first element and -1 is the last element • Methods size and length both return size • Self expanding • Nil extended if assign element beyond the end
Assignment • Parallel assignment • No pre or post increment or decrement operators • Conditional Assignment • x || = “default” #assigned if x is nil or false • x && = “other” #assigned if x is NOT nil or false • Self Assignment Operators • x += 2 • x - = 2 • x *= 2 • x /= 2 • x **= 2
Flow Control • If statement • Keywords if, then, elseif, else, end • Parentheses optional • Multiple forms • Ternary Operator
Loops • Many Different Ways to Write Loops
Loops Continued • One line loops use braces
Loops Continued • More Ways to Do the Same Loop
Loops Continued • Even More Ways
Readability • Pros • Identifier naming conventions denote scope • Methods ending in ? are boolean • Methods ending in ! are dangerous • Braces used for one liners • Begin and End used for blocks • Doesn’t require semicolons • Cons • Many different ways to do the same thing • Precedence in arguments to function calls • can be confusing because () are optional • There are no keywords or reserved words • - You can override everything
Writability • Pros • Many ways to do the same thing • Dynamic Typing • Can write really compact code • Functional Programming is powerful • Debugging is easy with interpreter • Extensive Libraries Available • Cons • None
Reliability • Pros • Supports Exception Handling • Interpreter allows for rapid testing • Cons • Dynamically Typed • Allows Aliasing • Many third party libraries are not maintained • Multiple language implementations that do • not work exactly the same
Cost • Pros • Open Source • Free Compilers • Rapid Development Cycle • Netbeans adds IDE support • Feature multiplicity makes learning basics of • Ruby easy for new developers • Cons • Mastering all of Ruby takes a long time • Slow Execution • you might have to rewrite your code • in a new language at some point
Who uses Ruby? • Amazon • Basecamp • BBC • CISCO • EA • Funnyordie.com • IBM • JP Morgan • Lucent • NASA • Oakley • Penny-arcade.com • Pitchforkmedia.com • Oracle • Scribd.com • Siemens • Twitter • Yahoo!
References • en.wikipedia.org/wiki/Ruby_%28programming_language%29 • BLOG.OBIEFERNANDEZ.COM • www.skorks.com/2009/09/a-wealth-of-ruby-loops-and-iterators/ • www.ruby.org/ • ruby-lang.org