Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Ruby nyelv. 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.

Hasonló előadás


Az előadások a következő témára: "Ruby nyelv. 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."— Előadás másolata:

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


Letölteni ppt "Ruby nyelv. 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."

Hasonló előadás


Google Hirdetések