The Object-Oriented Programming Language RubyDe Nederlandse Ruby Homepage



1. Algemene vragen


1.1 Wat is Ruby?

Ruby is een eenvoudige en krachtige object-georienteerde programmeertaal, ontworpen door Yukihiro Matsumoto (wiens bijnaam "matz" is in dit document and in de mailing lists).

Zoals Perl is Ruby goed in het verwerken van tekst. Zoals Smalltalk is alles in Ruby een object en heeft Ruby code-blocks, iterators, meta-klassen en ander lekkers.

Je kan Ruby gebruiken voor het schrijven van servers, het experimenteren met prototypes en voor alledaags programmeerwerk. Als volledig geintegreerdde object-georienteerde taal, schaalt Ruby goed.

Kenmerken van Ruby:

  • Eenvoudige syntax,
  • Basis OO kenmerken (Klassen, methodes, objecten, etc.),
  • Speciale OO kenmerken (Mix-ins, singleton methodes, hernoeming, ...),
  • Operator overloading,
  • Exception handling,
  • Iterators en closures,
  • Garbage collection,
  • Dynamisch laden van libraries (afhankelijk van de achitectuur),
  • Makkelijk te porten (draait op verschillende Unices, Windows, DOS, OSX, OS/2, Amiga, etc.)

1.2 Laat eens wat Ruby code zien.

We defineren een klasse Person, met een naam en een leeftijd. We testen onze coce door wat mensen te creëren en die te onderzoeken.

   
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age.to_i
end
def inspect
"#@name (#@age)"
end
end

p1 = Person.new('elmo', 4)
p2 = Person.new('zoe', 7)

p1 # -> elmo (4)
p2 # -> zoe (7)

We gaan een array van mensen vullen door hun naam en leeftijd in te lezen uit een bestand met regels zoals:

   
bert:    8
cookie: 11
elmo: 4
ernie: 8
zoe: 7

De code gebruikt reguliere expressies om de opeenvolgende regels van het invoer bestand te parsen, maakt een nieuw Person object voor iedere match en plaats dat object aan het eind van het array.

   
people = Array.new

File.foreach("ages") { |l|
people << Person.new($1, $2) if l =~ /(.*):\s+(\d+)/
}

people # -> [bert (8), cookie (11), elmo (4), ernie (8), zoe (7)]

We sorteren het resultaat op volgorde van leeftijd. Dit kan op vele manieren. We definieeren een sorteer block wat Ruby verteld hoe je twee mensen vergelijkt:

   
sorted = people.sort do |a,b| a.age <=> b.age end
sorted # -> [elmo (4), zoe (7), bert (8), ernie (8), cookie (11)]

Een andere mogelijkheid is het veranderen van de vergelijkings methode van de klasse Person:

   
class Person
def <=>(other)
@age <=> other.age
end
end
people.sort # -> [elmo (4), zoe (7), bert (8), ernie (8), cookie (11)]

1.3 Waarom de naam 'Ruby'?

Beïnvloed door Perl, wilde Matz de naam van een edelsteen voor zijn nieuwe taal, daarom noemde hij haar Ruby naar de geboortesteen van een collega.

Later, realiseerde hij zich dat Ruby in verschillende gevallen Perl opvolgt. Bij geboortestenen is de maand juni en ruby de maand juli. Bij het meten van font grootes is pearl 5pt en ruby 5.5pt. Hij dacht dat Ruby een goede naam zou zijn voor een programmeertaal die nieuwer (en hopelijk beter) was dan Perl.

(Gebaseerd op een verklaring van matz in [ruby-talk:00394] op 11 juni 1999.)

1.4 Wat de geschiedenis van Ruby?

Het volgende is een samenvatting van een posting van Matz in [ruby-talk:00382] op 4 juni 1999. (De geboortedag van Ruby is gecorrigeerd in [ruby-list:15977]).

Wel, Ruby werd geboren op 24 februari 1993. Ik sprak met een collega over de mogelijkheid van een object-georienteerde script taal. Ik kende Perl (Perl 4, niet Perl 5), maar het beviel me niet echt omdat het leek op een speelgoed taal (dat doet het nog steeds). De object-georienteerde script taal leek veel belovend.
Ik kende Python. Maar het beviel me niet omdat ik niet vond dat het een echt object-georienteerde taal was. De OO kenmerken leken achteraf te zijn aangebracht. Al meer dan 15 jaar een taal maniak en OO fan, wilde ik een echte object-georienteerde, makkelijk te gebruiken script taal. Ik zocht ernaar maar kon er geen vinden.
Dus ik besloot er een te maken. Het duurde enkele maanden voor ik een interpreter draaiend had. ik voegde de dingen toe die ik graag in mijn taal wilde hebben zoals iterators, exception handling en garbage collection.
Daarna reorganiseerde ik de eigenschappen van Perl in een class library en implementeerde die. Ik poste Ruby 0.95 in de Japanse nieuwsgroepen in december 1995.
Sindsdien zijn er erg actieve mailing lists en web sites ontstaan.

1.5 Waar is de Ruby Home Page?

The officiele Ruby Home Page is http://www.ruby-lang.org (in het engels) en http://www.ruby-lang.org/ja/ (in het japans).

Je kan ook Ruby informatie vinden op http://www.rubycentral.com. Met name is er een complete online reference te vinden van alle standaard Ruby klassen en methodes.

1.6 Is er een Ruby newsgroup?

comp.lang.ruby is opgericht in mei 2000 (dankzij de inspanningen van Conrad Schneiker).

1.7 Is er een Ruby mailing list?

Er zijn momenteel vijf mailing lists over Ruby. De eerste in het engels, de laatste vier in het japans:

  • ruby-talk: Engelstalige berichten uitwisseling over Ruby.
  • ruby-list: Berichten uitwisseling over Ruby in het Japans.
  • ruby-dev: List voor Ruby ontwikkelaars.
  • ruby-ext: List voor mensen die die extensions schrijven voor of met Ruby.
  • ruby-math: Ruby in wiskunde.

Zie ook: joining the mailing list.

Je kan de mailing list archieven doorzoeken op http://blade.nagaokaut.ac.jp/ruby/ruby-talk/index.shtml. (Dit si de URL voor de ruby-talk list)

1.8 **Changed** Hoe moet ik de mailing list threaden in mutt?

De Ruby mailing list software voegt een prefix toe aan het onderwerp, bij voorbeeld [ruby-talk:1234]. Dit kan het threading in sommige mail programma's in de war brengen.

In mutt, kan threading werkend krijgen door het instellen van de volgende variabele:

   
# reply regexp, to support MLs like ruby-talk.
set reply_regexp="^(\[[a-z0-9:-]+\][[:space:]]*)?(re([\[0-9\]+])*|aw):[[:space:]]*"

1.9 Wat is correct, Ruby or ruby?

Officieel heet de taal ``Ruby''. Op de meeste systemen word het gestart met het commando ``ruby''. It's OK om ruby in plaats van Ruby te gebruiken.

Gebruik a.u.b. niet RUBY als de naam van de taal.

Oorspronkelijk of historisch was de naam ``ruby''.

1.10 Zijn er boeken over Ruby?

Programming Ruby: The Pragmatic Programmer's Guide, (het "Pickaxe" Boek) door David Thomas en Andrew Hunt: ISBN 0-20171-089-7, Addison-Wesley, oktober 2000.

Een japans Ruby bokk door Matz, en anderen, gepubliceerd in ASCII is verkrijgbaar in Japan (ISBN 4-7561-3254-5). Een engelse vertaling, `` The Ruby Programming Language,'' is in de maak van Addison-Wesley (ISBN 020171096X).

Een japanse ``Ruby Pocket Reference'' is gepubliceerd door O'Reilly Japan (ISBN 4-87311-023-8). Laat O'Reilly in the VS weten dat je een vertaling wilt.

Verder `` Mastering Regular Expressions,'' door Jeffrey Friedl, (the Hip Owl Book): ISBN 1-56592-257-3 van O'Reilly & Associates, is a naslagwerk dat het gebruik en de implementatie van reguliere expressies in verschillende programmeertalen behandeld. Het is zeer relevant voor Ruby reguliere expressies.

1.11 Welke editors bieden ondersteuning voor Ruby?

1.12 Hoe kan ik Ruby code annoteren met z'n uitkomsten?

Mensen annoteren Ruby code gewoonlijk door de resultaten  van een statement op te nemen als commentaar achter dat statement. Bij voorbeeld: in de volgende code laten we eerst zien dat de toekenning de string "Billy Bob" als resultaat heeft en daarna het tonen we het resultaat van het trekken van enkele substrings.

   
  str = "Billy" + " Bob"           # -> "Billy Bob"
str[0,1] + str[2,1] + str[-2,2] # -> "Blob"

Gotoken's xmp package, beschikbaar op http://www.ruby-lang.org/en/raa-list.rhtml?name=xmp is een utility die Ruby source code op deze manier annoteerd.

Emacs and vim users kunnen dit integreren in hun editing environments, wat handig is bij het sturen van e-mail met ge-annoteerde Ruby code. Als xmp geinstalleerd is kunnen Emacs gebruikers het volgende toevoegen aan hun .emacs bestand:

   
(defun ruby-xmp-region (reg-start reg-end)
"Pipe the region through Ruby's xmp utility and replace the region with
the result."
(interactive "r")
(shell-command-on-region reg-start reg-end
"ruby -r xmp -n -e 'xmp($_, \"%l\t\t# %r\n\")'"
t))

(global-set-key [(meta f10)] 'ruby-xmp-region)

Vim gebruikers kunnen de volgende mapping gebruiken (met dank aan hipster):

   
map <M-F10> :!ruby -r xmp -n -e 'xmp($_, "\%l\t\t\# \%r\n")'<CR>

In beide gevallen kan een deel van de code worden geselecteerd, waarna op Meta-F10 gedrukt kan worden om het te annoteren.

1.13 Ik begrijp Ruby niet, zelfs niet na het lezen van de handleiding!

De syntax van Ruby is bhoorlijk stabiel sinds Ruby 1.0, maar zo nu en dan worden er nieuwe dingen toegevoegd. Daarom kunnen boeken en online documentatie achterlopen.

Als je problemen hebt, stel dan gerust een vraag in de mailing list (zie ruby-talk mailing list). Over het algemeen krijg je vlot antwoord van matz zelf,  de schrijver van de taal, van andere goeroes of van mensen die problemen  die op die van jou lijken hebben opgelost.

Vermeld altijd de output van ruby -v bij alle probleem code.

Als je problemen hebt bij het gebruiken van irb, denk er dan aan dat dit enkele beperkingen heeft. Probeer het script met irb --single-irb, of rechtstreeks met het ruby commando.

Het kan zijn dat een soortgelijke vraag al eens gesteld is in de mailing list, en het getuigd van goede netiquette om eerst de recente mail door te lezen voor jij je vraag stelt (RFC1855:3.1.1, 3.1.2). Maar stel je vraag in de list en een antwoord komt eraan.




Vorige
Home NederlandsVolgende