Google
 
   
Login
Username:

Password:


Lost Password?

Register now!
Search
Main Menu
top books
Polls
What do you think about php-deluxe.net?
Excellent!
Cool
Hmm..not bad
What the hell is this?
encyclopedia
recommendation
compare webbrowser
Freenet DSL
Who's Online
5 user(s) are online (5 user(s) are browsing encyclopedia)

Members: 0
Guests: 5

more...
browser tip
Unix Befehle
manual of unix befehle
recommendation!
Sponsored
partner

Ruby programming language

Ruby is a Reflection (computer science), object-oriented programming language. It combines syntax inspired by Ada programming language and Perl with Smalltalk programming language-like object-oriented features, and also shares some features with Python programming language, Lisp programming language, Dylan programming language and CLU programming language. Ruby is a single-pass interpreted language.

= History =

The language was created by Yukihiro Matsumoto, who started working on Ruby on February 24, 1993 and released it to the public in 1995.

Ruby was named after a colleague s birthstone. Appropriately, the name reflects the language s Perl heritage. Pearl is the birthstone of June while the ruby is the birthstone of July (suggesting progression). Although Yukihiro Matsumoto was not aware of it at the time, in typography, pearl and ruby are descriptors in a deprecated hierarchy for type size.

as of 2005, the latest stable version is 1.8.3. Ruby 1.9 (with some major changes) is also in development.

= Philosophy =

Matz s primary design consideration is to make programmers happy by reducing the menial work they must do, following the principles of good user interface design.[http://www.informit.com/articles/article.aspp=18225] He stresses that systems design needs to emphasize human, rather than computer, needs[http://www.artima.com/intv/ruby4.html] :

: Often people, especially computer engineers, focus on the machines. They think, By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something. They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.

Ruby is said to follow the principle of least surprise (POLS), meaning that the language typically behaves intuitively or as the programmer assumes it should. The phrase did not originate with Matz and, generally speaking, Ruby more closely follows a paradigm best termed as Matz Least Surprise though, happily, many programmers have found it to be close to their own mental model as well.

= Semantics =

Ruby is object-oriented: every bit of data is an object, including types other languages designate primitive such as integers. Every function is a method. Named values (variables) designate references to objects, not the objects themselves. Ruby supports inheritance (object-oriented programming) with dynamic dispatch, mixins and singleton patterns (belonging to, and defined for, a single instance rather than being defined on the class). Though Ruby does not support multiple inheritance, classes can import module (programming)s as mixins. Procedural syntax is supported, but everything done in Ruby procedurally (that is, outside of the scope of a particular object) is actually done to an Object instance named main . Since this class is parent to every other class, the changes become visible to all classes and objects.

Ruby has been described as a .

According to the Ruby FAQ, If you like Perl, you will like Ruby and be right at home with its syntax. If you like Smalltalk, you will like Ruby and be right at home with its semantics. If you like Python programming language, you may or may not be put off by the huge difference in design philosophy between Python and Ruby/Perl.

= Implementations =

Ruby has two main implementations: the official Ruby interpreter (computer software), which is the most widely used, and JRuby, a Java programming language-based implementation. The Ruby interpreter has been ported to many platforms, including Unix, Microsoft Windows, DOS, Mac OS X, OS/2, Amiga and many more.

=== Interaction === The Ruby distribution also includes irb , an interactive command-line interpreter which can be used to test code quickly. A session with this interactive program might be: : $ irb irb(main):001:0> Hello, World => Hello, World irb(main):002:0> 1+2 => 3

== Licensing terms ==

Ruby is distributed disjointedly under the Free software and open source licenses GNU General Public License and Ruby License [http://www.ruby-lang.org/en/LICENSE.txt].

= Features =

  • object-oriented
  • exception handling
  • Iterators and closure_(computer_science) (based on passing blocks of code)
  • *native, Perl-like regular expressions at the language level
  • operator overloading
  • garbage collection (computer science)
  • *highly portable
  • multi-threading on all platforms
  • Dynamic-Link Library/Library (computer science) dynamic loading on most platforms.
  • introspection, reflection (computer science) and metaprogramming (programming)
  • large standard library
  • supports dependency injection
  • continuations and generators (examples in RubyGarden: [http://www.rubygarden.org/rubyContinuations continuations] and [http://www.rubygarden.org/rubyRubyFromPython generators])
  • Ruby currently lacks support for Unicode, though it has partial support for UTF-8.

    = Possible surprises =

    Although Ruby s design is guided by the principle of least surprise, naturally, some features differ from languages such as C programming language or Perl programming language:

  • Names that begin with a capital letter are treated as constants, so local variables should begin with a lowercase letter.
  • searches — return numbers, strings, lists etc. on success, but nil on failure (e.g., mismatch) or some other expression of the negative.
  • To denote floating point numbers, one must follow with a zero digit (99.0) or an explicit conversion (99.to_f). It is insufficient to append a dot (99.) because numbers are susceptible to method syntax.
  • Lack of a character ( char ) data type. This may cause surprises when slicing strings: abc [0] yields 97 (an integer, representing the ASCII code of the first character in the string); to obtain a use abc [0,1] (a substring of length 1) or abc [0].chr.
  • A good list of gotchas may be found in Hal Fulton s book The Ruby Way , pages 48–64. However, since the list in the book pertains to an older version of Ruby (version 1.6), some items have been fixed since the book s publication. For example, retry now works with while, until and for, as well as iterators.

    = Examples =

    Some basic Ruby code:

    # Everything, including literals, is an object, so this works: -199.abs # 199 ruby is cool .length # 12 Rick .index( c ) # 2 Nice Day Isn t It .split(//).uniq.sort.join # DINaceinsty

    == Collections ==

    Constructing and using an array: a = [1, hi , 3.14, 1, 2, [4, 5]] a[2] # 3.14 a.reverse # [[4, 5], 2, 1, 3.14, hi , 1] a.flatten.uniq # [1, hi , 3.14, 2, 4, 5]

    Constructing and using a hash table:

    hash = { water => wet , fire => hot } puts hash[ fire ] # Prints: hot hash.each_pair do |key, value| puts #{key} is #{value} end # Prints: water is wet # fire is hot hash.delete_if {|key, value| key == water } # Deletes water => wet

    == Blocks and iterators ==

    The two syntaxes for creating a code block: { puts Hello, World! }

    do puts Hello, World! end

    Passing a block as a parameter (to be a Closure (computer science)): def remember(&p) @block = p end # Invoke the method, giving it a block that takes a name. remember {|name| puts Hello, + name + ! } # When the time is right -- call the closure! @block.call( Johnny ) # Prints Hello, Johnny!

    Ruby code corresponding to the fragment in the article Python programming language#Closures demonstrating closures: def foo(initial_value=0) var = initial_value return Proc.new {|x| var = x}, Proc.new { var } end setter, getter = foo setter.call(21) getter.call # => 21

    Yielding program flow to a block provided at the location of the call def bfs(e) q = [] e.mark yield e q.push e while not q.empty u = q.shift u.edge_iterator do |v| if not v.marked v.mark yield v q.push v end end end bfs(e) {|v| puts v}

    Iterating over enumerations and arrays using blocks: a = [1, hi , 3.14] a.each {|item| puts item} # Prints each element (3..6).each {|num| puts num} # Prints the numbers 3 through 6

    Blocks work with many built-in methods: File.open( file.txt , w+b ) do |file| file.puts Wrote some text. end # File automatically closed here

    Or IO.readlines( file.txt ) do |line| # Process each line, here. end

    Using an enumeration and a block to square 1 to 10: (1..10).collect {|x| x*x} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    == Classes ==

    The following code defines a class named Person. In addition to initialize , the usual constructor to create new objects, it has two methods: one to override the comparison operator (so Array#sort can sort by age) and the other to override the to_s method (so Kernel#puts can format its output). Here, attr_reader is an example of Metaprogramming (programming) in Ruby: attr defines getter and setter methods of instance variables; attr_reader : only getter methods. Also, the last evaluated statement in a method is its return value, allowing the omission of an explicit return .

    class Person def initialize(name, age) @name, @age = name, age end def (person) @age person.age end def to_s #{@name} (#{@age}) end attr_reader :name, :age end group = [ Person.new( John , 20), Person.new( Markus , 63), Person.new( Ash , 16) ] puts group.sort.reverse

    The above prints three names in reverse age order: Markus (63) John (20) Ash (16)

    == More examples ==

    More sample Ruby code is available as algorithms in the following articles:

  • Exponentiating by squaring
  • Linear search
  • Quicksort
  • = Operating systems =

    Ruby is available for the following operating systems:

  • Most flavours of Unix
  • DOS
  • Microsoft Windows 95/98/XP/NT/2000/2003
  • Mac OS X
  • BeOS
  • Amiga
  • Acorn Computers Ltd RISC OS
  • OS/2
  • Syllable (operating system)
  • Other ports may also exist.

    = Applications =

    The Ruby Application Archive serves as a repository for a wide range of Ruby applications and libraries, containing more than a thousand items. Although the number of applications available does not match the volume of material available in the Perl or Python programming language community, there is a wide range of tools and utilities which serve to foster further development in the language.

    = See also =

  • Duck typing
  • RubyGems (a Ruby package manager)
  • Ruby on Rails (a Ruby web application framework)
  • = External links =

    *[http://www.ruby-lang.org/en/ Ruby language home page] *[http://www.rubygarden.org/ Ruby Garden] *[http://www.rubycentral.com/book/ Programming Ruby ]—Full text of first edition of the book by David Thomas & Andrew Hunt, ISBN 0-201-71089-7 *[http://poignantguide.net/ruby/ Why s Poignant Guide to Ruby] *[http://pine.fm/LearnToProgram/ Learning to Program] very basic tutorial for non-programmers *[http://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-talk/394 About the name Ruby ] *[http://www.rubygarden.org/faq/ Ruby FAQ] *[http://www.zenspider.com/Languages/Ruby/QuickRef.html Quick Reference] *[http://raa.ruby-lang.org/ Ruby Application Archive] (RAA) *[http://jruby.sourceforge.net/ JRuby] *[http://ruby-doc.org/ The Ruby Documentation project] *[http://www.ruby-forum.org/bb/ Ruby Forum] *[http://rubyforge.org/ RubyForge] *[http://redhanded.hobix.com/ RedHanded]—Daily Ruby news and more *[http://www.glue.umd.edu/~billtj/ruby.html Ruby Newcomers Advice] *[http://www.loudthinking.com/arc/000199.html Getting started with Ruby] *[http://rubygems.rubyforge.org/wiki/wiki.plaction=browse&id=RubyGems&oldid=HomePage RubyGems]—the Ruby standard for publishing and managing third party libraries