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. 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ófiaA 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 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 "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éseLinuxA 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 print "Szia, itt a Ruby"
WindowsLe kell tölteni a telepítőállományt és futtatni kell. Mac OSXFeltelepítve tartalmazza az operációs rendszer. IRB - az Interaktív Ruby ShellGyors é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ásaUnix alapú rendszerekben parancssorból az irb paranccsal: >irb irb(main):001:0> p (1/2).class Fixnum → nil Nyelvi elemekOsztályokAz 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ásaAz osztályok konstruktorának mindig az class CreateObject
def initialize
puts "Objektum létrehozása"
end
end
Objektum létrehozása a A = CreateObject.new() → "Objektum létrehozása"
Osztálymetódusok létrehozása, meghívásaA 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ásaA 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, ciklusokIf (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:
Megjegyzés: a fenti példa kizárólag didaktikai célra használandó. Ugyanis ugyanezt a tevékenységet elvégzi a 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 unless 1 < 2
er = 1
else
er = 2
end
A 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ásokTwitter – a Twitter Web interfész Ruby on Rails keretrendszert (framework) használ,[1] ami egy Ruby Enterprise Edition nevű Ruby-verzió felett működik.[2] 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.[3] 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. KritikaA nyelvvel szemben felmerült főbb érvek:
További írások:
Jegyzetek
Külső hivatkozások
|