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.

Slides:



Advertisements
Hasonló előadás
C++ programozási nyelv Gyakorlat hét
Advertisements

Piacképes programozói tudás a középiskolában
Jt Java Feltételek, logikai kifejezések. jt 2 Logikai operátorok Logikai kifejezésekre alkalmazhatók a következő műveletek: 1. nem! 2. és&ill.&& 3. kizáró.
Kifejezések 2+3 Egy egyszerű kifejezés… © Pasztuhov Dániel, www.programozas-oktatas.hu.
3. A programozás eszközei, programozás-technikai alapismeretek
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
JavaScript.
Turbo Pascal Változók.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Függvények, mutatók Csernoch Mária.
Mutatók, tömbök, függvények
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
Célkeresztben az érettségi! A legjobb és leghatékonyabb eszközt akarjuk Kevesebb hibalehetőség, barátságos hibaüzenetek Kiváló fejlesztőeszköz Gyorsan.
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Alphabet is a type specification = sorts: alphabet oprs: a:  alphabet,...,z:  alphabet end alphabet; nat is a type specification = sorts:nat oprs:zerus:
Programozás I Függvények általános jellemzői
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
Operációs rendszerek gyakorlat 8. Gyakorlat Vakulya Gergely.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt.
Típusok Kiegészítések és megjegyzések Nyékyné G. Judit: Programozási nyelvek c. könyvének hasonló címû fejezetéhez.
Funkcionális programozás 2. gyakorlat
Programozás. fordító (compiler): a program forrásszövegéből egy gépi kódú, futtatható programot (pl. EXE) állít elő, vagyis a programot lefordítja a gép.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Karakterláncok Páll Boglárka.
Programozási nyelvek Páll Boglárka.
Alprogramok a Pascal nyelvben
Ismétlés A pascal program szerkezete: program programnev; Programfej
Kifejezések a Pascalban Páll Boglárka. Ismétlés: Ahogy algoritmikából láttuk, a kifejezések a Pascal nyelvben is operátorokból és operandusokból állnak.
1.4. Fordítás, szerkesztés, az objektumkönyvtár használata.
Operátorok Értékadások
PHP nyelv. PHP Interpreteres nyelv → parancsértelmező szükséges hozzá Rasmus Lerdorf 1995 → személyes felhasználás (internetes önéletrajzának megtekintésének.
Objektum orientált programozás a gyakorlatban
Készítette: Csíki Gyula
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
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ű.
Készítette Enyedi Tamás
Objektumorientált programozás
Java programozási nyelv Metódusok
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
Webprogramozó tanfolyam
Ez az én művem Készítette: Barczi Renáta Felkészítő tanár: PeadDr
Algoritmizálás, adatmodellezés
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Pinczel Balázs, ELTE IK, április Emlékeztető: NoSQL Célok: Nagy teljesítmény Magas rendelkezésre állás Elosztott működés Következmények:
Alkalmazásfejlesztés F#-ban Dunaújvárosi Főiskola Kiss Gyula mérnökinformatikus hallgató Nemzeti Tehetség Program Tehetségútlevél Program „NTP-TÚP ”
Script nyelvek előadás
Script nyelvek előadás
a programegységek között
Kifejezések C#-ban.
Programozási nyelvek típusossága.
Script nyelvek előadás
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Konverziós operátorok
Előadás másolata:

Ruby nyelv

Története Yukihiro Matsumoto (szül á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 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.

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 (

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)

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

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.

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

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

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

Platform Független Ruby interpreter egyaránt telepíthető Windows,Linux, Mac OS X és egyéb operációs rendszerekre

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

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)

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ó

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

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

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

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.

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

Shell: !/bin/bash Ruby: !/usr/bin/ruby1.9 #-al tudunk megjegyzést írni

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

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 jellel kezdődik. Többtagú neveket aláhúzással bontsuk részekre, hogy könnyebben olvashatóak 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

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”

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)

Műveletek: hatványozás: ertek ** kitevo Pi lekérdezése: Math:PI Randomoltatás: valtozo=rand() (0- 1között).upcase.reverse

Feltételvizsgálat if a<b then # mi van ha a feltétel igaz else # mi van ha hamis end

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

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

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

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

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}

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

foreach(int i in tomb) { Console.WriteLine(i); } tomb.each { |elem| puts elem } …vagy… tomb.each do |elem| puts elem end

Az előző módszerrel listákat is lehet kezelni. Pl.: File.open('fajl.txt', 'r').each do |sor| puts sor end

Hashek Bármilyen objektummal indexelnek: h = {'kulcs' => 'cica', 'kulcs2' => 'kutya'} h.each do |kulcs, elem| puts kulcs,"=>",elem end

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

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.

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, " " }

Példák class Ugyfel def initialize(nev, = = szuletesi_ev end def nev end def szuletesi_ev end def eletkor return end end gj = Ugyfel.new('Gipsz Jakab', 1972) puts gj.nev puts gj.szuletesi_ev puts gj.eletkor

def jo_munkat(nev) result = "Jó munkát " + nev + " !" end puts jo_munkat("Rails mester") Miért nincs return a függvényben?

def jo_munkat(nev) result = "Jó munkát #{nev}!" end puts jo_munkat("Rails mester")

def jo_munkat(nev) "Jó munkát #{nev}!" end puts jo_munkat("Rails mester")

class Ugyfel def initialize(nev, = = szuletesi_ev end def nev end def end end gj = Ugyfel.new(‘’Gipsz Jakab‘’, 1972) puts gj.nev gj.nev=‘’Humor Herold’’ puts gj.szuletesi_ev

Mi most kézzel írtuk meg azokat az egyszerű metódusokat amikkel 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)

class Ugyfel attr_accessor :nev attr_reader :szuletesi_ev def initialize(nev, = = szuletesi_ev end end gj = Ugyfel.new(‘’Gipsz Jakab‘’, 1972) puts gj.nev gj.nev=‘’Humor Herold’’ puts gj.nev

É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"

É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

Struktúrák module NameSpace class Example CONST = 123 end obj = NameSpace::Example.new a = NameSpace::Example::CONST