A Ruby programozási nyelv

A Ruby és más nyelvek összehasonlítása

C

Bár nem a létező legrégebbi nyelv, sok programozó számára mégis a C a programozási nyelvek atyja. A C procedurális, se nem objektumközpontú, se nem funkcionális, bár a vele közeli kapcsolatban lévő C++ és Objective C objektumközpontúak.
C előnyei a Rubyval szemben a nagyobb futási sebesség, a szélesebb elterjedtség, az , hogy sokaknak jobban kézre áll illetve az, hogy lefordított, nem pedig értelmezett nyelv. Egy C-program a sikeres fordítással már átmegy egy megbízhatósági vizsgán.
A Ruby előnyei a C-vel szemben a gyorsabb fejlesztés, a rugalmasság, a fogalmi tisztaság és testreszabhatóság. Ha ötvözni szeretnénk a Ruby és a C erősségeit, érdemes szemügyre vennünk a RubyInline projektet, ami a rubyinline gemként elérhető a http://www.zenspider.com/ZSS/Products/RubyInline webhelyen.
A C úgynevezett erősen, statikusan típusos nyelv, ami azt jelenti, hogy a változói mindig egy konkrét adattípusként vannak meghatározva és mindig változatlan típusúak maradnak. Ha a 42 egész értéket lebegőpontos számként szeretnénk kifejezni, azaz 42,0-ként, típusátalakítást kell rajta végrehajtanunk. A Ruby is erősen típusos, tehát a programozónak kell az egész értékeket lebegőpontossá alakítania, ha arra van szüksége, viszont dinamikus, azaz a változók típusa változhat. A C-nek a Ruby irb-jéhez hasonló eszköze sincs.

Java

A Java nyelv a C-hez némiképp hasonló, ám viszonylag összetett objektumközpontú nyelv. Egyaránt megtalálható benne az erős és statikus típusosság is. A Java a Rubynál egyfelől objektumközpontúbb - a fejlesztőknek saját programjaikhoz is objektumközpontú megközelítést kell használniuk-, másfelől viszont kevésbé, főleg, ha azt nézzük, ahogy a Rubyban a beépített függvényeket megvalósították. A Javában például a 100 egész érték abszolút értékét a következő módon kaphatjuk meg:

Math.abs (100)

A programozónak tehát ahhoz, hogy végrehajtsa az abs függvényt a 100 egész értéken, a Math osztályra van szüksége. Ugyanez a művelet a Rubyban a következőképp néz ki:

100.abs

Eszerint magától a 100-as számtól kell kérnünk, hogy visszaadja saját abszolút értékét. A Ruby következetesen ezt a megközelítést használja, vagyis elvárja, hogy az adatok maguk intézzék a rajtuk végrehajtandó műveleteket. Ez lehetővé teszi, hogy ugyanaz a műveleti jel különböző, bár fogalmilag hasonló műveleteket jelölhessen. Számok esetén a + jel például egyszerű összeadást jelent, karakterláncoknál viszont összefűzést. A Java fordított és nem értelmezett nyelv, de a fordításnak egy különleges típusát, a bytekód fordítást alkalmazza, hasonlóan a Ruby 2.0-hoz.

Smalltalk

A Smalltalk teljesen objektumközpontú programozási nyelv. Míg a Simulához az objektumközpontúság megjelenése köthető, a Smalltalk-hoz annak népszerűvé tétele.
A Ruby két területen merített a Smalltalk-ból: az egyik, hogy minden objektum, a másik pedig, hogy a tagfüggvények az objektumoknak küldött üzenetek.
Sok nyelvben csak a nagyobb és összetettebb dolgok lehetnek igazi „objektumok”, a nyelv alapelemei nem azok. A Javában ezért kell a Math névtér abs tagfüggvényét meghívni, hogy megkapjuk, mondjuk, a 100 egész érték abszolút értékét. A „minden objektum” elv, amit a Ruby a Smalltalk-ból kölcsönzött, következetesebb viselkedést tesz lehetővé: a 100 értékű egésztől kéri annak saját abszolút értékét.

A Ruby és más nyelvek- összefoglalás

A Ruby értelmezett és nem lefordított nyelv, tehát gyorsabb fejlesztést tesz lehetővé lassabb futás mellett. Objektumközpontú és funkcionális, és nem eljárásközpontú (procedurális). Erősen, dinamikusan típusos, nem pedig gyengén vagy statikusan, és csak a logikai vizsgálatok esetében végez automatikus típusátalakítást. Beépített támogatással rendelkezik a szabályos kifejezésekhez, és tiszta, olvasható nyelvtana van. Általános célú programozási nyelv mind elméletben, mind gyakorlatban. Számtalan beépített függvénnyel rendelkezik, amelyeket módosíthatunk, továbbfejleszthetünk vagy újakkal egészíthetünk ki. A Rubynak, őséhez, a Lisphez hasonlóan valódi, használható nil értéke van, és a nil és false kivételével minden értéket true-ként kezel.