Készítette: Száraz Richárd
- Yukihiro Matsumoto tervezte meg 1995-ben - Célja egy emberközpontú OOP programozási nyelv megalkotása volt, amely egyszerű és gyorsan tanulható - Alapja a Perl, de annál sokkal letisztultabb, rugalmasabb ben terjedt el világszinten - A legfrissebb verziója:
A Perl programozási nyelv kiejtve érthető „pearl”- nek, ami gyöngyöt jelent, ez pedig a június jelképe, míg a ruby, azaz a rubint, a július jelképe. Ez tehát arra utal, hogy a Ruby a Perl továbbfejlesztett változata.
- Objektumorientált - Script nyelv - Teljesen nyílt forráskódú - Gyengén típusos nyelv - Garbage Collector-t használ - Interpretált (a programot futás közben fordítja a gép saját nyelvére) - TIOBE – index 10. hely
- Teljesen emberközpontú, mivel nem a fordító, hanem a programozók igényeit szem előtt tartva lett megtervezve - Intuitív, mivel a kód önmagért beszél, ezért a legjobb dokumentáció maga a forráskód, ezért a dokumentációk sok helyen hiányosak - Teljesen objektumorientált
- Sorok végére nem szükséges a ; - Ha több utasítást írunk egy sorba, akkor kell közéjük a ; - Ha a sor végére \ jelet rakunk, akkor a következő sor is az utasítás része lesz - Case sensitive
- Egy soros kommentet a # után írhatunk - Több soros komment: =begin Ez egy több soros komment lesz az =end ellenére, mivel nem a sor elején szerepel =end
- Bármilyen hosszú lehet - Betűvel vagy _ jellel kell kezdődniük - Tartalmazhatják az angol abc kis-és nagybetűit, számokat és speciális karaktereket: !, ?, _ - A nagy kezdőbetűs azonosítók konstansokat vagy osztályokat jelölnek
- Nem szükséges deklaráció, az első értékadáskor jönnek létre - Referenciákat tartalmaznak - Van szimultán értékadás: Pl.: a,b = b,a - Első karakter alapján: - $: globális változók - statikus változók osztályok adattagjai - A nagybetűvel kezdődő változó pedig konstans
- Minden számot reprezentáló osztály a Numeric osztályból származik - Az egész számok kezeléséhez használjuk - 2 leszármazott osztálya van: - Fixnum - Bignum - A konverzió automatikus - A tagolásra használt _ jelet figyelmen kívül hagyja
- Példa: num = 111_111 num.class -> Fixnum num = num.class -> Bignum
- Minden lebegőpontos szám Float típusú - Megadhatjuk ponttal vagy kitevővel, Pl.: num = num.class -> Float num = 4E2 -> 400.0
- 2 módon adhatjuk meg: ’ ’ vagy ” ” között - Ha az ” ” között van #{kifejezés}, akkor az kiértékelődik - Példák: - ”egy kettő három”.split => [”egy”, ”kettő”, ”három”] - ”szavak”.slice!(2) => ”a” - ”hello”.include? ”lo” => true - ”hello”.upcase => ”HELLO”
- Példák: ”Hello ” + ”world!” => ”Hello world!” ”szo” * 3 => ”szoszoszo” szam = 2 ”szam értéke: #{szam}” => ”szam értéke: 2”
- Az elemeket a [] operátorral érhetjük el - 0-tól indexel a tömb elejétől - -1-gyel indexel a tömb végétől csökkenve haladva - Intervallum is megadható - Tartalmazhat különböző típusú elemeket, pl.: tomb = [23, ”szo”, 42.42]
- Műveletek: - Unió: [1,2] | [2,3] => [1,2,3] - Metszet: [1,2,3] & [3,4] => [3] - Konkatenáció: [1,2,3] + [3,4] => [1,2,3,3,4] - Különbség: [1,2,3] – [3] => [1,2] - Shift: kivesz egy/több elemet a tömb elejéről - Unshift: betesz egy/több elemet a tömb elejére - Push: betesz egy/több elemet a tömb végére - Pop: kivesz egy/több elemet a tömb végéről
- Kulcs–érték párokat tartalmaz - A kulcsnak egyedinek kell lennie - A létrehozás a {} operátorral történik, ahol meg kell adni a kulcsot és hozzá tartozó értéket is - Az indexelés a [] operátorral történik - ember = { ’nev’ => ’István’, ’szulev’ => ’1991’ } - ember[’nev’] => István - ember.keys => [”nev”, ”szulev”] - ember.length => 2
- A true a TrueClass, a false a FalseClass osztály Singleton példánya (az adott osztályból egyetlen példány jön létre az alkalmazás futása során) - minden igaz, ami nem nil, vagy false - && és ||: lusta kiértékelés, azaz az egyik alkifejezés sem értékelődik ki mindaddig, amíg nincs szükség az értékére - =, ==,, not : szokásos értelemben - eql? : ha az elemek értéke és típusa is megegyezik, csak akkor lesz igaz
- Általános alak: if [then] [elsif [then]] [else …] end - Létezik a Perl-ből ismert alak is: - kifejezés if feltétel - ?: (Elvis) operátor is használható - Negált if(akkor lép az első ágba, ha a feltétel hamis): unless [then] [else …] end
- Elöl tesztelős ciklus(addig fut, amíg a feltétel igaz): while … end - Van egy negált változata is(addig fut, amíg a feltétel igazzá nem válik): Until … end
- times: megadott számszor fut le 4.times do |i| print i end - step: megadott lépésközzel 0.step(10,2) do … end - upto: step- 1-es lépéssel - downto: upto, csak csökkenő
- A Ruby kivételkezelése: - A try és catch helyett begin-end és rescue - Finally helyett ensure, ez a rész mindig lefut - raise-el válthatunk ki kivételt - A rescue blokkon belül retry paranccsal a kivételt kiváltó blokk újra futtatható
begin do_something_dangerous rescue SomeError => e fix_some_error(e) rescue SomeOtherError => e fix_some_other_error(e) rescue => e fix_unknown_standard_error(e) else something_dangerous_finished ensure whether_or_not_an_error_was_raised end
- Minden osztály őse az Object osztály - Minden objektum, még az osztályok is (ők a Class osztály példányai) - Nagy betűvel kell kezdeni őket - Objektum létrehozása a new statikus metódussal történik: - ujosztaly = Osztalynev.new(paraméterek) - Konstruktor: initialize metódus - Nincs túlterhelés
- Egy osztály sosem zárt, bármikor lehet változtatni: plusz metódusok, láthatóságok változtatása, metódusok átdefiniálása, pl.: obj = SomeObject.new #Új metódus csak ennek az objektumnak def obj.new_method ”do some things” end
- Getter, setter: - attr_reader :x, gettert generál: def end - attr_writer :x, settert generál: def x = = val end - attr_accessor :x, mindkettőt legenerálja
- Alapesetben minden attribútum private - Alapesetben minden metódus public (kivéve az initialize) - A szokásos 3 féle láthatóság: - Public - Protected - Private
- Minden osztály őse az Object - Egyszeres öröklődést támogat - Többszörös öröklődés mixinek segítségével történhet - Az ősre a super kulcsszóval lehet hivatkozni - Az öröklődést a < operátorral jelöljük class ChildClass < ParentClass #... end
- Példa öröklődésre: class Ember def end class Dolgozo< Ember def initialize(nev,fizetes) end
- def kulcsszóval lehet definiálni - Elnevezési konvenciók: - ?-re végződő: lekérdező művelet - =-re végződő: változó értékét beállító művelet - !-re végződő: megváltoztathatják a hívó objektumok - Mindig az utoljára kiértékelt kifejezés értékét adja vissza, nem kell return
- Hívásnál meg kell adni a hívó objektumot - Private metódusok csak self-re hívhatóak meg - Paramétereket a név után lehet felsorolni - Zárójel megadása nem kötelező - Megadható alapértelmezett paraméter - Több érték is visszaadható
- Példa: def returnTwo(a, b) if (1.0*b) < return 0.0, false else return (1.0 * a / b), true end
- Blokkokat {...} vagy do...end között adhatunk meg - A blokk elején || jelek között adhatunk meg változókat, ezeket paraméterként használhatjuk fel a blokkon belül - Blokkokat magukban is használhatunk, mint névtelen függvényeket, de függvényekkel összhangban is használhatóak
- Néhány hasznos blokkot alkalmazó függvény: - X.times: egy egyszerű számlálós ciklus 0-tól X-1-ig 5.times { |i| print i } # each: listákra vagy hash-ekre alkalmazható, minden elemen végigmegy [1,2,3].each { |x| print x+5 } # select: listákra vagy hash-ekre alkalmazható, kiválasztja azon elemeket, melyekre a megadott blokk igazat ad [1,2,3,4].select { |x| x%2==0 } # [2,4]
Köszönöm a figyelmet!