Programozási Nyelv Ruby: Programozási nyelv

A Ruby nyílt forráskódú, teljesen objektumorientált, interpretált, általános célú programozási nyelv.

Macumoto Jukihiro kezdte el megalkotni a nyelvet az 1990-es évek közepén. A fejlesztésbe később többen bekapcsolódtak.

Ruby
Programozási Nyelv Ruby: Filozófia, Telepítése, IRB - az Interaktív Ruby Shell

Paradigmatöbbelvű
Jellemző kiterjesztés
  • rb
  • rbw
Megjelent1995
TervezőMacumoto Jukihiro
FejlesztőMacumoto Jukihiro (és mások)
Utolsó kiadás3.3.0 (2023. december 25.)
TípusosságErősen típusos programozási nyelv, dinamikus típusok, (Duck typing)
FordítóprogramRuby MRI, JRuby
Hatással volt ráSmalltalk, Perl, Lisp, Scheme, Python, CLU, Eiffel, Ada, Dylan
Befolyásolt nyelvekGroovy, Nu
Operációs rendszerplatformfüggetlen
LicencRuby License
GNU General Public License
Weboldal

A Ruby nyelv egyszerre több programozási paradigmát valósít meg, így a funkcionális, objektumorientált, imperatív és reflektív paradigmáknak is megfelel. Legfontosabb jellemzői a dinamikus típusosság és az automatikus memóriakezelés. A dinamikus szkriptnyelvek családjába tartozik, a Python, Perl, Lisp, Dylan, Pike vagy CLU nyelvekhez hasonlóan.

Sok platformon működik interpreterének telepítése után. Egyebek mellett a Ruby on Rails keretrendszer révén webes alkalmazások fejlesztésére is alkalmas.

Filozófia

A Ruby objektumorientált, a Ruby nyelvben minden objektum. Még egy szám is. Egy szám, például 5, szintén egy objektum, s mint ilyennek, vannak saját metódusai. A to_s metódusával átalakítható szöveggé. Ez esetenként igen fontos, hiszen a nyelv alapvetően típusos:

 5.to_s 

Ellentétben a procedurális megközelítéssel, ahol az 5 bemeneti paraméter lenne egy IntToStr(5) jellegű hívásban.

A nyelv típusossága ellenére azonban függvénydefiníciókor nem kell meghatározni a bemeneti (és kimeneti) változók típusát. Egy függvény definíciója lehet például ilyen:

 def osszeadas a, b    return a + b  end 

Mivel minden függvény automatikusan visszaadja a legutoljára kiértékelt kifejezést, ezért a return kulcsszó használata sokszor nem kötelező:

 def osszeadas a, b    a + b  end 

Ennek meghívása így történhet:

 osszeadas 1, 41  42 

Talán feltűnik az is, hogy a függvény definíciójánál és meghívásánál a paramétereket nem kell zárójelbe tenni. A zárójel opcionális lehetőség, értelme ott van, amikor egyébként nem lehetne eldönteni, hogy a paraméterek mely függvényhez tartoznak. Például:

 osszeadas 1, 2 * 3  7 

de

 osszeadas(1, 2) * 3  9 

Ilyenkor azonban erősen javallják, hogy a függvény neve és a paramétereit tartalmazó zárójel között ne maradjon szóköz.

Mivel a nyelv dinamikusan kezeli a típusokat, a példában szereplő osszeadas metódus nem csak számokat, hanem bármilyen más objektumot is kaphat bemeneti paraméterként, amiket az össze is próbál adni a '+' jel segítségével. Amennyiben a kapott objektummal lehet összeadás műveletet végezni (tehát van neki '+' jel nevű metódusa definiálva), akkor ez az egyszerű metódus gond nélkül el tudja végzi a feladatát, mivel össze tudja adni a kapott objektumokat. A sztringek is ilyen összeadható objektumok:

 osszeadas "Helló ", "világ!"  "Helló világ!" 

A nyelv további sajátossága (típusosságából adódóan) az, hogy nem végez automatikus típuskonverziót. Még számok között sem. Például:

 1 / 2  0 

mert ha az osztandó és az osztó is egész, akkor a hányados is az egész, tehát kerekít. De:

 1.0 / 2  0.5  1 / 2.0  0.5 

A számláló egészből lebegőpontossá konvertálható a to_f metódussal, hogy az osztás eredménye is lebegőpontos legyen:

 a = 1  a.to_f / 2  0.5 

A változókat nem kell deklarálni, bárhol be lehet őket vezetni, és a láthatósági tartományokon belül elérhetőek. A változók elé nem kell semmilyen speciális karaktert tenni (mint PHP-ben a $), viszont a nagybetűvel kezdődő kifejezések szigorúan konstansok vagy osztályok:

 A = 3  ez rendben van, rögzített egy A konstanst  A = 4  warning: already initialized constant A 

A sorokat nem kell pontosvesszővel lezárni, de lehet. Ennek akkor van értelme, ha több utasítás van ugyanabban a sorban. Ekkor a pontosvessző utasításelválasztóként funkcionál.

Telepítése

Linux

A Ruby (interpreter) a legtöbb Linux disztribúcióban megtalálható, így a rendszerrel települ fel automatikusan. Az automatikusan települt rendszer nem biztos, hogy a legfrissebb verzió, de telepíthető (.deb és .rpm) telepítőcsomagok segítségével vagy forráskódból is.

Debian alapú disztribúciókban telepíthető az APT segítségével:

sudo apt-get install ruby 

Telepítés után rendelkezésre áll a Ruby héj (shell), ami indítható a ruby paranccsal. Ha alapból nem tenné fel, érdemes továbbá telepíteni az irb-t is, ami egy interaktív parancssori értelmező (interpreter) – ezzel azonnal kipróbálható a nyelv, pl. az alábbi beírásával:

print "Szia, itt a Ruby" 

Windows

Le kell tölteni a telepítőállományt és futtatni kell.

Mac OSX

Feltelepítve tartalmazza az operációs rendszer.

IRB - az Interaktív Ruby Shell

Gyors és egyszerű módját nyújtja kisebb Ruby kódok kipróbálásának. Minden soremelés (Enter) vagy ciklus vége (end) után elvégzi a beírt kód kiértékelését és eredményét kiírja a szabványos kimenetre.

Meghívása

Unix alapú rendszerekben parancssorból az irb paranccsal:

>irb irb(main):001:0> p (1/2).class Fixnum → nil 

Nyelvi elemek

Osztályok

Az osztályok nevét mindig nagybetűvel kell kezdeni, mivel konstansoknak számítanak

Példa osztály létrehozására:

 class HelloClass   def koszontes    puts "Helló világ!"   end  end  HelloClass::koszontes() 

Minden létrehozott osztály egy ősosztályból, az Object-ből származik, így örökli ezen metódusait. Érdekesség, hogy minden osztály objektum is önmagában így lehetnek singleton metódusai, amelyeket az osztály objektum-példányai nem érhetnek el.

 class HelloClass   def self.koszontes    puts "Üdvözöl a ruby nyelv!"   end  end   HelloClass.koszontes()  "Üdvözöl a ruby nyelv!" HelloClass.new().koszontes()  NoMethodError 

Példányosítás, objektumok létrehozása

Az osztályok konstruktorának mindig az initialize metódus számít:

 class CreateObject   def initialize    puts "Objektum létrehozása"   end  end 

Objektum létrehozása a new() metódussal. A fenti példánál maradva:

A = CreateObject.new()  "Objektum létrehozása" 

Osztálymetódusok létrehozása, meghívása

A létrehozott osztályunk metódusai alapesetben példányosítás nélkül nem hívhatóak meg, ezt írhatjuk felül a metódus elé tett 'self.' jelölővel:

 class InkrementaloOsztaly   def self.inkrementald szam    szam += 1   end  end  puts InkrementaloOsztaly.inkrementald(5)  6 

Osztályok kibővítése, metódusok felülbírálása

A Ruby dinamizmusának alapját jelenti, hogy az osztályok nyitottak.

 class A   def self.b    puts "valami"   end  end  A.b  "valami"    class A   def self.b     puts "inkabb mas"   end  end  A.b  "inkabb mas". 

Feltételes szerkezetek, ciklusok

If (ha)

A más nyelvekben megszokotthoz hasonlóan is lehet használni, pl:

 if a < b then    c = -1  elsif a == b    c = 0  else    c = 1  end 

Szintaktikai jellemzők:

  • a feltételvizsgálatot nem kötelező zárójelbe tenni, persze ha összetett, az egyértelműség kedvéért érdemes csoportosítani
  • a then szót nem kötelező kiírni, csak akkor, ha a végrehajtandó utasítás azonos sorban van (az end ekkor is kötelező)

Megjegyzés: a fenti példa kizárólag didaktikai célra használandó. Ugyanis ugyanezt a tevékenységet elvégzi a <=> összehasonlító operátor is, amely három értéket adhat vissza (-1, ha a bal oldal kisebb, 0, ha egyenlő, 1, ha nagyobb).

 1 <=> 0  1  1 <=> 1  0  1 <=> 2  -1 

Alternatív használat: a feltételt a végrehajtandó utasítás után is írhatjuk!

 puts 'de jó' if 1 > 0 

Eredmény:

de jó 

Ha arra van szükségünk, a feltételvizsgálat értéket is tud visszaadni, például:

 kimenet = if a < b then                -1            elsif a == b                0            else                1            end 

Ha viszont csak ha-különben esettel van dolgunk, van ennek egy rövidített formája is hasonlóan a C, C++, Java és Perl nyelvekhez:

 kimenet = a < b ? a : b 

A feltételt a kérdőjel (?) zárja, a két lehetséges értéket pedig egy kettőspont (:) választja el, ezen belül persze bármilyen kifejezés szerepelhet, ami kimenetet produkál, akár függvényhívás is.

Unless (ha nem)

Létezik az if fordítottja is, az unless is. Ez értelemszerűen akkor fut le, ha a vizsgált kifejezés hamis. Példák:

 unless 1 < 2      er = 1  else      er = 2  end 

A unless után is használhatjuk a then-t, ha ugyanabban a sorban akarjuk folytatni (egyébként nem kötelező).

 kim = unless 1 < 0 then 1 else 2 end 

Nyilván az unless is használható az utasítás után.

 a = 1 unless a == 1 

Ez persze ekvivalens ezzel:

 a = 1 if a != 1 

While (amíg)

Amíg a feltétel igaz, végrehajtja a ciklusmagot. Szerkezete igen egyszerű:

 a = 0  while a < 10   a += 1   puts a  end 
→ 1 2 3 4 5 6 7 8 9 10 

Alkalmazások

Twitter – a Twitter Web interfész Ruby on Rails keretrendszert (framework) használ, ami egy Ruby Enterprise Edition nevű Ruby-verzió felett működik.

2007-től 2008-ig az üzeneteket egy Starling nevű Ruby-ban írt perzisztens queue server kezelte, ám 2009-től ezt a feladatot fokozatosan átveszi egy Scala programozási nyelven írt alkalmazás.

YellowPages.com, scribd.com, hulu.com – ezek a nagy forgalmú közösségi portálok is Ruby nyelven alapuló motort használnak. A Hulu eredetileg a Merb [1] nevű motort használta, ami paramétereiben jobb volt, mint a Ruby on Rails 2-es változata. A Merb-et később beolvasztották a Rails3 rendszerbe.

Kritika

A nyelvvel szemben felmerült főbb érvek:

  • A nyelvnek nincs formális definíciója.
  • A Ruby nyelv 1.8 és 1.9 verziójában inkompatibilis módon megváltozott a nyelv szintaxisa. Ez azt jelzi, hogy a Ruby nyelv tervezés híján, ad hoc módon fejlődik.
  • A nyelv és az interpreter nem kiforrott, túl fiatal, sok hibát hordozhat (mindkettő).
  • A Ruby interpreter a leglassúbbak közé tartozik.
  • A Ruby egyszerűen egy divatjelenség (hype).
  • Kicsi a felhasználói tábor, kevés a konzultációs lehetőség és a dokumentáció, a támogatás hiánya.
  • 'Még egy OO szkriptnyelv' érv: a létező nyelvek elég kiforrottak, rendelkeznek minden lehetőséggel, amit a Ruby és a Ruby on Rails framework tartalmaz, ill. a Ruby környezet nem rendelkezik olyan előnnyel, ami miatt abban kéne alkalmazásokat fejleszteni.

További írások:

Jegyzetek

Külső hivatkozások

Tags:

Programozási Nyelv Ruby FilozófiaProgramozási Nyelv Ruby TelepítéseProgramozási Nyelv Ruby IRB - az Interaktív Ruby ShellProgramozási Nyelv Ruby Nyelvi elemekProgramozási Nyelv Ruby AlkalmazásokProgramozási Nyelv Ruby KritikaProgramozási Nyelv Ruby JegyzetekProgramozási Nyelv Ruby Külső hivatkozásokProgramozási Nyelv RubyNyílt forráskódú szoftverObjektumorientált programozásÁltalános célú programozási nyelv

🔥 Trending searches on Wiki Magyar:

MilánóBalogh LeventeA zongorista (film)Dél-afrikai KöztársaságIII. Béla magyar királyLyme-kórKiegyezésHódmezővásárhelyAbigél (film)VeszprémJürgen KloppCarles PuigdemontPáneurópai folyosókNemzetközi gépkocsijelek listájaOrosz–ukrán háborúÁltalános forgalmi adóNormandiai partraszállásBorisz Godunov (opera)MallorcaII. József magyar királyFormula–1MáltaHernádi JuditOppenheimer (film)NyestLuxemburgHorváth VirgilGyurcsány FerencBenidormMegyei jogú város (önkormányzati rendszer)Neumann JánosLengyelországHorn GyulaKoltai RóbertKaposvárFülöp-szigetekRenée ZellwegerMohácsi csataJehova tanúi4-es villamos (Budapest)Nagy Imre (miniszterelnök)Vörösmarty Mihály2024-es Formula–1 világbajnokságLeggyakoribb magyar családnevek listájaAlbániaA tanú (film)NovellaCsíkszeredaCitromfűSzenes AndreaTacskóTenerifeVitézy LászlóKoszovóDengue-lázImpresszionizmusLukácsi KatalinA három nővér (televíziós sorozat)III. Alexandrosz makedón királyEgyesült Arab EmírségekEurópaNyíregyházaMézga családKárolyi Mihály (miniszterelnök)Vérehulló fecskefűJanus PannoniusII. Erzsébet brit királynőDeák Ferenc (igazságügy-miniszter)Környezetvédelem2024-es amerikai elnökválasztásHunyadi JánosMagyarországi választásokJanikovszky ÉvaKeanu ReevesAz Amerikai Egyesült Államok államaiGáspár GyőzőSzent István-bazilika (Budapest)Magyarország a második világháborúbanEdgar Szevikjan🡆 More