Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaEdit Lakatosné Megváltozta több, mint 10 éve
1
Ruby nyelv
2
Története Yukihiro Matsumoto (szül. 1956 ápr. 4.) alkotta meg, az ideális script nyelv hosszú eredménytelen keresése után. A lehetséges jelöltek az ideális nyelvekre, a Perl és a Python nem egészen azt nyújtották, amire várt, a Perl nem volt elég erőteljes, a Python pedig nem volt elég objektum-orientált. A nyelv a kezdetekben Japánban vált népszerűvé, ma ott már népszerűbb, mint a Python (2007. májusban 3,78% a világranglistán – C#-ot és a JavaScriptet leelőzve). A világ többi pontjára azonban nem jutott el egészen 2006-ig. 2004-ben jelent meg ugyanis David Heinemeier Hansson munkája a Ruby on Rails, ami egy erőteljes webalkalmazás fejlesztői környezet, Ruby nyelven írva. A programozóknak ez volt a motiváció, hogy elkezdjenek foglalkozni a Ruby-val. És ez hozta meg Ruby számára a népszerűséget 2006-ban szinte robbanásszerűen. A Ruby jövője véleményünk szerint attól függ, mennyire terjednek el a webalkalmazások, ugyanis azokra talán az egyik legjobb megoldás a Ruby on Rails.
3
A nyelvről Script nyelv (értelmezett) Minden operációs rendszeren futtatható (ahová megírták az értelmezőt) Teljesen objektum orientált Dinamikusan típusos, bár a típus itt más: minden osztálypéldány Nincs változó deklaráció, csak definíció Sokat örökölt ezektől a nyelvektől: Perl, Python, Smalltalk Japánban készült, 1995-ben 2007 májusi állás szerint a 10. legnépszerűbb nyelv, 2,8%-al, olyanok előtt, mint: Delphi, Pascal, PL/SQL, Lisp, Ada, Logo, Smalltalk (www.tiobe.com)
4
Különlegességek Reguláris kifejezés beépített osztály true, false, nil, self mind osztályok Mindennek van visszatérési értéke Nem kötelező a return Nem kötelezők a zárójelek függvényhíváskor (de néha egyértelműbb, ha van zárójel) Van párhuzamos értékadás Függvények bemenetei nincsenek típushoz kötve („Duck Typing”, azaz használjunk olyan operátorokat, amik több osztályra is az ott logikus műveletet végzik, és akkor nyugodtan válthatunk osztályt a bemeneten… pl. a string-re a << hozzáfűzés, a tömbre a tömb végéhez csatolás, egy ilyen operátort használó függvénynek string és tömb paramétert is adhatunk)
5
Felhasználói kör amatőrtől professzionálisig Több helyen is használják kezdő programozási nyelvként az oktatásban (japán, Chris Pine stb.), de készítenek ezen a nyelven nagyméretű projekteket is (főleg a Rails körében) Alkalmas kezdő nyelvnek, ráadásul a későbbiek során sem feltétlenül szükséges átnyergelni más, „profibb” nyelvre, ha komolyabb programokat akar írni
6
Beépített nyelvi elemek Sok Ha az alapértelmezettel elérhető nyelvi elemek gazdagságát tekintjük inkább amatőr nyelvnek vélhetjük (rendezések, kiválogatások, verem-, sor-, listaműveletek, stb.), azonban az „elemi utasítások” nagy része is elérhető benne. A fejlett adatszerkezet rendelkezésre állásával sok fejlesztési időt takaríthat meg.
7
Hordozhatóság Módjával A nyelv még elevenen éli serdülőkorát, és a fejlesztés különböző verzióiban alapvető különbségek is előfordulnak
8
Feladatorientáltság Univerzális programnyelv Speciális feladatokra (adatbáziskezelés, xml feldolgozás, ablakkezelés, hálózati programozás, matematika stb.) folyamatosan születnek és fejlődnek osztálykönyvtárak
9
Végrehajtás Interpretált nyelv Ennek következtében teljesítményre lassabb is, mint a fordított nyelvek, de készül már egy olyan fordító (jruby), amely Java bytekódra fordít. A végeredmény hordozhatóságát csökkenti ez a jellemző, ugyanis csak olyan gépen futtatható a program, amelyen van ruby interpreter
10
Platform Független Ruby interpreter egyaránt telepíthető Windows,Linux, Mac OS X és egyéb operációs rendszerekre
11
Licensz Nyílt forráskódú, kereskedelmi célra is ingyenes Pedagógiai szempontból is előnyös Párhuzamosság Lehetőség nyílik a többszálú feladat feldolgozásra
12
Objektum elvű …de nagyon Nehéz lenne ennél objektum-elvűbb nyelvet alkotni. Ennek ellenére írható benne utasításorientált program is Annak ellenére, hogy a végletekig objektumelvű, nem teszi ezt tenyérbe mászóan. Lehet „hagyományos módon” is programot írni, ahol csak a „változókra”, „függvényekre” és szerkezetekre építünk (figyelmen kívül hagyva, hogy ezek objektumok, vagy objektumokhoz kötődnek)
13
Szintaxis Laza Annak ellenére, hogy sokban hasonlít a Pythonra, nem olyan erőszakos formai szempontból (behúzások stb.). Tömör és könnyen olvasható
14
Strukturáltság Nincs szintaxissal kitüntetett főprogram („main”). Részprogramokat, akár kódokat, akár osztálydefiníciókat külön állományokban is elhelyezhetünk, és egymásba fűzhetünk. Egy állomány nem csak egy osztályt tartalmazhat. Névterek, osztályok, függvények, öröklődés
15
Típusosság Típusok nincsenek, minden változó osztálypéldány. A változókat nem kell deklarálni, kezdő értékadáskor dől el, hogy mely osztály példányát képviselik. Ha azonban egy olyan változót akarunk használni, amely még nem volt létrehozva, nem fogja automatikusan létrehozni valamilyen kezdőértékkel, hanem hibát ad. Ha a későbbiekben a változónak egy más osztályt adunk értékül, teljes mértékben átveszi az újérték osztályát Nincs automatikus típus átalakítás
16
Típusosság Függvény definiálásakor nem kell meghatározni a ki és bemeneti változók típusát és számát sem. Be- és kimenet is lehet tetszőleges objektum, tömb vagy függvény. Minden dolog referencia szerint van tárolva és átadva, illetve a metódusok minden esetben visszatérnek valamivel. Nincs olyan, hogy nem tér vissza semmivel. Ha nincs eredmény, akkor is legalább egy „nil” az eredmény. Ez tisztább, olvashatóbb kódot eredményez
17
Típuskompatibilitás A szám-szöveg osztályoknál meg van a lehetőség az összehasonlító operátorok használatára, ám lehetőségünk van arra, hogy az osztályokhoz magunk definiáljunk operátorokat.
18
Egyéb Beépíthetünk C-be írt programokat, valamint Ruby programot is beépíthetünk C programokba Dokumentumok a Ruby-ról főképp angolul íródtak, csak kevés magyar
19
Shell: !/bin/bash Ruby: !/usr/bin/ruby1.9 #-al tudunk megjegyzést írni
20
Operátorok Ua. mint a C++-ban… Összehasonlító: ; =; != Logikai: !; or; and …de kibővült néhánnyal: **<=hatványozás =~<=hasonlító operátor(pl. reguláris kifejezéshez) !~<=előző tagadása <<<=hozzáadás strinhez, tömhöz, stb. <=hasonlító operátor(-1,0,+1 kimenetekkel) Ruby-ban nincsenek egyel csökkentő és növelő operátorok: ++ és --, (helyette: a += 1, a -= 1) Engedélyezett a párhuzamos értékadás is
21
Nevezéktan Lokális változókat, függvényeket, metódusokat és paramétereik nevét mindig kis betűvel, vagy aláhúzással kezdjük. Pl.: ugyfel; munka; _munka Példányváltozók neve @ jellel kezdődik. Többtagú neveket aláhúzással bontsuk részekre, hogy könnyebben olvashatóak maradjanak. Pl.: @ugyfel_neve; @ugyfel_szuletesi_eve Osztályok, konstansok nevei nagy kezdőbetűvel kezdődnek. Ekkor a többtagú szavakat egybe szokás írni, úgy hogy minden szó elejét nagy kezdőbetűvel írjuk Pl.: Ugyfel; NyariMunka A tananyag során fogunk találkozni szimbólumokkal. A szimbólum neve kettősponttal kezdődik, de hogy mik is ezek, arról majd később lesz szó. Pl.: :id; :ugyfel_neve
22
Kiiratás Két parancs: - puts(‘ ’+v+’ ’ \n nem kell); - print(” ”,v,” ” \n kell) puts 1, 2, 3 puts ‘szöveg’ ”másik szöveg” puts 5 #5 puts 5.to_f #5.0 (float) puts 7.99.to_i #7 (int) puts ‘elso’ + 7.to_s + ‘masodik’ #(string) print 7.99.to_i,”\n” print „valami ”,ez_egy_int,” másik valami”
23
Objektumok, beolvasás Értékadás: valtozo=”ertek” vagy valtozo=‘ertek’ vagy valtozo=20 vagy a=b=1 Beolvasás: - sor = gets (stringet kapunk+enter) - sor = gets.to_f (float) (18.5//18,5)!!! - sor = gets.chomp (string végjel nélkül) - puts file.gets (fájlkezelésnél előfordulhat, hogy nincs több sora a fájlnak, és így a „.gets” „nil”-t ad vissza, azaz üres-nem létező objektumot, melynek értéke hamis, az összes többi létezőnek igaz)
24
Műveletek: hatványozás: ertek ** kitevo Pi lekérdezése: Math:PI Randomoltatás: valtozo=rand() (0- 1között).upcase.reverse
25
Feltételvizsgálat if a<b then # mi van ha a feltétel igaz else # mi van ha hamis end
26
Ciklusok while feltetel do # ezt ismételd míg a feltétel nem teljesül end until feltetel do # ezt ismételd míg a feltétel teljesül end
27
Case print ‘Átlag(1) vagy éltanulók(2)’ ohaj = gets.chomp case ohaj when ‘1’: print ‘Átlagot válaszotta’ when ‘2’: print ‘Éltanulókat választotta’ else: print ‘Ellenkező esetben’ end
28
Fájlkezelés olvasando_fajl = File.open('konyvtar/fajl.txt', 'r') sor = olvasando_fajl.gets #… olvasando_fajl.close irando_fajl = File.open('konyvtar/fajl.txt', 'w') # továbbírás esetén 'a' irando_fajl.puts 'fájlba irandó tartalom' #… irando_fajl.close
29
Fájlkezelés File.exist?(utvonal) true/false aszerint, hogy a fájl létezik-e Pl.: while !File.exist?(utvonal) do puts ‘A fájl nem létezik vagy rossz az útvonal’ utvonal=gets end
30
Tömbök tombnev=[1,2,3,4] masodik_tomb=[‘elso’,’masodik’,3,…] # 0-tól sorszámozódik tombnev.length / tombnev.size masodik_tomb[1] #...’masodik’ tombnev <<‘’15.9’’#elem hozzáfűzése tomb = %w {Most akkor minden szó egy eleme lesz a tömbnek}
31
Tömb bejárása: while index < tomb.size do #...műveletek index = index + 1 #...vagy index += 1 end …de ez valójában nem Ruby-s bejárás. Tömb elemein való műveletvégzés során a tömb elemei NEM változnak! tomb.each do |elem| puts elem end
32
foreach(int i in tomb) { Console.WriteLine(i); } tomb.each { |elem| puts elem } …vagy… tomb.each do |elem| puts elem end
33
Az előző módszerrel listákat is lehet kezelni. Pl.: File.open('fajl.txt', 'r').each do |sor| puts sor end
34
Hashek Bármilyen objektummal indexelnek: h = {'kulcs' => 'cica', 'kulcs2' => 'kutya'} h.each do |kulcs, elem| puts kulcs,"=>",elem end
35
Hashek honapok = { :elso => "Január", :masodik => "Február" } # itt szimbólumokkal hivatkozunk, mert így gyorsabb a futás és átláthatóbb a kód honapok[:elso]#Január
36
Blokkok és Yield A blokkok olyan kódrészletek, amiket paraméterként tudunk átadni függvényeknek, ezeknek a kódrészleteknek lehetnek paraméterei, amiket a kódrészlet híváskor a függvény paraméterez. A függvényen belül a blokkot a yield paranccsal tudjuk meghívni. A blokkokat vagy {} jelek közé, vagy do end párok közé zárjuk.
37
Blokkok és Yield def fib_up_to(max) i1, i2 = 1, 1 while i1 <= max yield i1 i1, i2 = i2, i1+i2 end fib_up_to(100) {|f| print f, " " }
38
Példák class Ugyfel def initialize(nev, szuletesi_ev) @nev = nev @szuletesi_ev = szuletesi_ev end def nev return @nev end def szuletesi_ev return @szuletesi_ev end def eletkor return Time.new.year()- @szuletesi_ev end end gj = Ugyfel.new('Gipsz Jakab', 1972) puts gj.nev puts gj.szuletesi_ev puts gj.eletkor
39
def jo_munkat(nev) result = "Jó munkát " + nev + " !" end puts jo_munkat("Rails mester") Miért nincs return a függvényben?
40
def jo_munkat(nev) result = "Jó munkát #{nev}!" end puts jo_munkat("Rails mester")
41
def jo_munkat(nev) "Jó munkát #{nev}!" end puts jo_munkat("Rails mester")
42
class Ugyfel def initialize(nev, szuletesi_ev) @nev = nev @szuletesi_ev = szuletesi_ev end def nev return @nev end def nev=(uj_nev) @nev=uj_nev end end gj = Ugyfel.new(‘’Gipsz Jakab‘’, 1972) puts gj.nev gj.nev=‘’Humor Herold’’ puts gj.szuletesi_ev
43
Mi most kézzel írtuk meg azokat az egyszerű metódusokat amikkel a @nev példányváltozónk értékét lehetett lekérdezni vagy módosítani. Van erre egyszerűbb megoldás is: class Ugyfel attr_accessor :nev (getter és setter) attr_reader :beosztas (getter) attr_writer :fizetes (setter)
44
class Ugyfel attr_accessor :nev attr_reader :szuletesi_ev def initialize(nev, szuletesi_ev) @nev = nev @szuletesi_ev = szuletesi_ev end end gj = Ugyfel.new(‘’Gipsz Jakab‘’, 1972) puts gj.nev gj.nev=‘’Humor Herold’’ puts gj.nev
45
Érdekességek #Ha még nincs értéke a szam változónak, akkor az egyenlőség mögött álló kifejezés kerül bele. Itt éppen 0. Ha már van, akkor nem csinál semmit. szam ||= 0 #Kiírja, hogy "hello", ha a név Jakab. puts "hello" if name == "Jakab"
46
Érdekességek #A feltétel hamis volta érdekel minket: if !true puts "hamis" end #Ugyanez másképp: unless true puts "hamis" end #vagy… puts ‘’hamis” unless false
47
Struktúrák module NameSpace class Example CONST = 123 end obj = NameSpace::Example.new a = NameSpace::Example::CONST
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.