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

Készítette Enyedi Tamás A Ruby programozási nyelv.

Hasonló előadás


Az előadások a következő témára: "Készítette Enyedi Tamás A Ruby programozási nyelv."— Előadás másolata:

1 Készítette Enyedi Tamás A Ruby programozási nyelv

2 Nyílt forráskódú, interpretált, objektumorientált, általános célú programozási nyelv Dinamikus scriptnyelv (mint pl.: Python, Perl, Lisp) Multiparadigmák: funkcionális, objektumorientált, imperatív, reflektív Dinamikus típusosság Automatikus memóriakezelés Sok platformon működik Webes alkalmazások: Ruby on Rails Bevezetés

3 Oda kell figyelni a tagolásra! Jelkészlet: ASCII karakterek, de lehetőség van Ucinode karakterek használatára is Azonosítók: (A-Za-z0-9_) Kommentek – # egysoros komment (a sor végéig) – Beágyazott dokumentáció : =begin Ezek között több sorba is írhatunk kommenteket. Azonban az első oszlopban kell kezdődnie. Beljebb kezdve már nem működik =end Literálok: numerikus, string(„”) és karakter(‘ ’) Minden változó, literál, vezérlési szerkezet, stb.. kifejezésnek minősül Nyelvi elemek

4 Lokális változók – Kisbetűvel (a-z), vagy (_) jellel kezdődnek – Csak azon a blokkon belül érhetők el, ahol inicializálták Példányváltozók jellel kezdődnek – Magához az objektumhoz (self) tartoznak – A nem inicializált példányváltozóknak az értéke nil Osztályváltozók – jellel kezdődnek pl.: – Az osztály összes leszármazottja eléri – Problémát okozhat, ha 2 leszármazottba ugyanazt a nevű osztályváltozót deklaráljuk (származási fa *first*) Változók és konstansok

5 Globális változók – $ karakterrel kezdődnek: $foo – A program futási ideje alatt bárhol elérhetők Konstansok – Csupa nagybetűvel írjuk, pl.: FOOBAR – Többszörös értékadás lehetséges => warning – Minden osztály konstans – Ha nem inicializáljuk => NameError Pszeudó változók: self, nil, true, false, $1..$9 Vannak még előre definiált változók és konstansok is… Változók és konstansok /folytatás/

6 A Numeric osztályból származnak Minden Numeric típusú objektum megváltoztathatatlan Szokásos műveletek ( +, -, *, /, ** (hatványozás) ) Egész számok (Integer) – Fixnum – Bignum: nincs határa – A _ jel elválasztásra szolgál, az interpreter nem veszi figyelembe pl: 1_234_567_890… – Automatikus konvertálás Fixnum - Bignum között (oda-vissza) => nem fordulhat elő túlcsordulási hiba – Megadhatjuk még: oktális formában (0-val kezdődik, pl: 05674) Bináris formában (0b… vagy 0B…, pl: 0b010110) Hexadecimális formában (0x… vagy 0X…, pl: 0xAF16B) Típusok - Számok

7 Valós számok (Float ) – A Ruby először Integer-ként akarja értelmezni a szám literálokat, ezért a felismerés érdekében legalább egy pontot, vagy egy exponenst kell írnunk a számba pl: 0.5, 1e0, stb. – A. elé mindenképp kell írni számot (pl: a.5 nem értelmezett) Komplex számok BigDecimal – tetszőleges pontosságú decimális szám Racionális számok – Két Integer objektumból áll össze Típusok - Számok

8 A Numerikus típusokkal ellentétben megváltoztathatók 2 azonos string literál – 2 különböző objektum 1.9-es verziótól Unicode kezelés Stringek aposztrófok között – ‘valami’ – escape karakter kell az ‘ (és opcionálisan) a \ jel elé Pl: ‘this is a string between two \’’ – több soros is lehet, nem kell minden sor végén ‘ jel (automatikusan tartalmazni fogja a sortöréseket), csak a string legvégén Típusok - Stringek

9 Stringek idézőjelek között – „valami” – \n, \t, \u (Unicode karakterek), stb. – Behelyettesítés (Interpolation): #{Ruby kifejezés} segítségével tetszőleges Ruby kifejezést behelyettesíthetünk a string-be Típusok - Stringek 1.példa: „1 + 2 = #{1+2}” => ”1 + 2 = 3” 2. példa: foobar = "blah” "the value of foobar is #{foobar}„ => "the value of foobar is blah"

10 Stringek tetszőleges határoló karakterek között – %q, vagy %Q karakter utáni első karakterrel kell lezárni a stringet – Pl: %q_ezt a stringet \_ határolja_ – A páros határoló karakterek ( (), [], {}, <> ) csak a megfelelő irányban működnek (nem lehet )(, ][, }{, >< a sorrend) – További annotációk: Típusok - Stringek ModifierMeaning %r[ ] Interpolated Regexp (flags can appear after the closing delimiter) %i[ ] Non-interpolated Array of symbols, separated by whitespace (after Ruby 2.0) %I[ ] Interpolated Array of symbols, separated by whitespace (after Ruby 2.0) %w[ ] Non-interpolated Array of words, separated by whitespace %W[ ]Interpolated Array of words, separated by whitespace %x[ ]Interpolated shell command

11 ‘Here Documents’ – << jellel kezdődik és rögtön a kívánt határoló követi – <<- jellel is kezdődhet, ilyenkor a lezáró határoló esetén figyelmen kívül hagyja a whitespace-eket Karakter literálok (1.9-től) – x_karakter = ?x – Vagyis a ?x == „x” Típusok - Stringek string = <

12 Operátorok – A konkatenáció a + jellel történik. Nincs automatikus konvertálás (to_s- t meg kell hívni) Pl: „Ez egy ” + „ konkatenáció.” – A << jel összefűzést jelent, ilyenkor a balkifejezést megváltoztatja. Itt sincs automatikus konvertálás (to_s szükséges) Pl: – N-szeres összefűzés: * operátorral Típusok - Stringek concat = „konkatenáció” string = „Ez egy ” string << concat => „Ez egy konkactenáció” Str = „Foo” * 2 => „FooFoo”

13 Karakterek és rész stringek manipulálása – A [] operátor segítségével lehet elérni a string egyes részeit – Negatív számot is megadhatunk, ilyenkor a végétől számítva adja vissza a nekünk kellő karaktert. Utolsó karakter: s[-1] – Karakter megváltoztatása (string-et is kaphat értékül): s = „valami”, s[4]=„k” => s = „valaki”; ha s[4]=„mim”, akkor s=„valamimi” – Rész string str[x,y]: x a pozíció (negatív is lehet), y pedig a kívánt hossz str[x..y]: x és y által meghatározott intervallumon lévő rész string – Indexelés Stringgel is történhet Eredmény: az indexnek használt string első előfurdulása (ha nem fordul elő: nil) str=„ez egy valami”, str[„valami”] Típusok - Stringek

14 A backquote karakterekkel határolt szöveget az interpreter mint egy shell scriptet végrehajtja és behelyettesíti az adott változóba var = `ls` esetén a var változóba bekerül az ls parancs eredménye A string és a Shell script kapcsolata

15 Stringek egy bizonyos halmazának a meghatározását segítik A Ruby-ba beépítve találjuk a ~ kezelését, nagyon megkönnyíti a mintaillesztést és a string-ek kezelését Létrehozásuk – Konstruktor meghívásával: a = Regexp.new(‘minta’) – b = /minta/ – c = %r{minta} Mintaillesztés: – Regexp.match metódusával – Vagy az =~ (pozitív illeszkedés), vagy a !~ (negatív illeszkedés) operátor segítségével (pozíció, vagy nil visszatérési érték) Reguláris kifejezések

16 Névvel ellátott azonosító Értékük nem változtatható meg Jelölés: – :szimbólumnév – :”több szóból álló szimbólum” Azonos nevű szimbólumok mindig azonos objektumot jelölnek Alkalmazhatóak minden olyan esetben, amikor valami álland dolgot akarunk átadni (pl: hashek kulcsai, enumok értékei) Típusok - Szimbólum

17 Array osztály Az indexelés 0-tól kezdődik Létrehozás – tomb = Array.new ( vagy röviden: tomb = [] ) Műveletek Típusok – Tömbök tomb = [„a”, „b”, „c”] tomb[0] # => „a” tomb[-2] # => „b” tomb[1,2] # => [„b”, „c”] tomb[0..1] # => [„a”, „b”] tomb[0…1] # => [„a”] #nem foglalja magába az intervallum végét array_one = [„apple”, „orange”, „pear”]# => ["apple", "orange", "pear"] array_two = 'apple orange pear'.split# => ["apple", "orange", "pear"] array_one == array_two# => true

18 Hash, azaz asszociatív tömb Indexelésükre tetszőleges objektum használható, azaz kulcs- érték párokat tartalmaz Létrehozás – hash = Hash.new ( vagy röviden: hash = {} ) Műveletek Típusok - Hash hash_one = {"a" => 1, "b" => 2, "c" => 3} #=> {"a"=>1, "b"=>2, "c"=>3} a = { :a => 1, :b => 2, :c => 3} #=> {:b=>2, :c=>3, :a=>1} a = { a: 1, b: 2, c: 3} #=> {:b=>2, :c=>3, :a=>1} a.Keys # végig iterál a-n és megmutatja a kulcsokat => [:a, :b, :c] a.delete(:b) a[:b] = 435 # akkor :b a végére kerül => [:a, :c, :b]

19 Az összes lehetséges értéket megadja egy kezdő és egy végpont között. Pl: – Minden Integer 0 és 5 között: r1 = 0..5 – Minden szám 0 és 1 között (1 már nem): r2 = 0.0…1.0 – Minden karakter s és u között: r3 = ‘s’..’u’ Benne van-e az intervallumban az x érték? Az === operátor megmondja. Típusok - Range r = 0..5 puts r === 4 # => true puts r === 7 # => false

20 Az if kifejezés Az if negálása helyett: az unless kifejezés Vezérlési szerkezetek - Elágazás if [then] # igaz ág end if unless [then] end unless a = 5 a = 7 unless a == 4 print a # 7-et ír ki a = 5 a = 7 if a == 4 print a # 5-öt ír ki

21 If-elsif-else if kifejezés rövid formában Vezérlési szerkezetek - Elágazás 2 if elsif elsif else end result = (feltétel) ? (kifejezés, ha igaz) : (kifejezés, ha hamis)

22 Case szerkezet – Szelektora egy Ruby kifejezés lehet – A kifejezéseket az === operátorral értékeli ki (típus- és értékegyenlőséget vizsgál) Vezérlési szerkezetek - Elágazás 3 case when then [when then when then else #default] end

23 x.times (nem igazi ciklus) Elöltesztelős ciklus (while) until (addig fut, ameddig a kifejezés értéke hamis) – Ciklusfeltétel csak logikai típusú lehet Vezérlési szerkezetek - Ciklusok x.times do end while end until end

24 A nyelvben van for ciklus, de ez kicsit más, mint a megszokott A ciklusmag a collection minden elemére lefut egyszer A collection lehet Range, tömb, stb. Végtelen ciklust while(true)… módon tudunk létrehozni Vezérlési szerkezetek – Ciklusok 2 for i in collection... end

25 Szintaxisa a Javaéhoz hasonlít A kivételek paramétere egy string lehet to_s, to_str, vagy message metódussal kinyerhető a string paraméter Saját kivételt az Exception osztályból való származtatással/örökléssel tudunk létrehozni Kivételkezelés

26 Nem kell megvárni, míg a Ruby kiváltja a kivételeket Mi magunk is válthatunk ki kivételeket a raise kulcsszóval Paraméterei – Paraméter nélkül az utolsó kivétel ismételt kiváltását eredményezi – String paraméterrel Runtime Errort kapunk – Kivételosztály, majd egy string Kivétel kiváltásakor a $! Változóba kerül az adott Exception példányra mutató hivatkozás Kivételek kiváltása def i_must_have_truth(value) raise TypeError, 'You must give me truth' if value == false end i_must_have_truth false => `i_must_have_truth': You must give me truth (TypeError)

27 A kivételek kezelése blokkszinten működik (begin-end között) A blokk végére írhatunk egy rescue részt, ezzel az előtte kiváltódott kivételeket tudjuk kezelni – Az itt megadott raise újra kiváltja a kivételt ($!) A rescue után írt ensure tartalmazza a mindenképp végrehajtandó kódot (ha nincs kivétel, else ág) Kivételek kezelése Begin 1/0 p 'I should never get executed’ rescue p 'I am rescuing an exception and can do what I want!’ End => "I am rescuing an exception and can do what I want!"

28 A metódus Ruby-ban kifejezések halmaza, ami visszaad egy értéket. – Explicit módon return-nel visszatérhetünk (megj.: return blokkban) – Vagy az utoljára kiértékelt kifejezés értékével tér vissza (nil is lehet) Paraméterátadás: csak érték szerinti van Hívás idejű a paraméterek (és a függvényeinek) vizsgálata – Azaz 2 azonos interfészű objektum egymással helyettesíthető (pl: print) még akkor is, ha nem a közös interfész alapján hivatkozunk rájuk Nincs túlterhelés Metódusok

29 Metódus definiálása Metódushívás A paramétereknek adhatunk default értéket is Metódusok 2 def some_method(value='default', arr=[]) puts value puts arr.length end some_method('something') =>something 0 def method_name(params) end method_name(parameter1, parameter2,…) method_name Például: def add(x,y) x + y End add(5,6) => 11

30 A * operátor – A metódus utolsó paraméterét elláthatjuk *-gal, ekkor a megadott paramétereken felül megadhatunk plusz paramétereket meghíváskor – A plusz paraméterek egy tömbbe kerülnek Metódusok 2 def calculate_value(x, y, *otherValues) puts otherValues end calculate_value(1,2,'a','b','c')  ['a', 'b', 'c'] Ugyanezt kapjuk ezen a módon is: arr = ['a','b','c'] calculate_value(*arr)

31 Az & operátor – A metódus paraméterét elláthatjuk & jellel, ekkor egy blokkot vár – A blokkot átalakítja Proc-cá (Procedure). Metódusok 3 def describe(&block) "The block that was passed has parameters: #{block.parameters}” end describe{ |a,b| } => "The block that was passed has parameters: [[:opt, :a], [:opt, :b]]"

32 Többször is fel szeretnénk használni ugyanazt a blokkot? Akkor használjunk Proc-okat! A procedúra tulajdonképpen egy blokk azzal a különbséggel, hogy a procedúrákat változókba tudjuk menteni, ezáltal többször is fel tudjuk használni Metódusok 5 – Proc(edúra) def method_call yield end method_call(&someBlock)

33 Vége Köszönöm a figyelmet!


Letölteni ppt "Készítette Enyedi Tamás A Ruby programozási nyelv."

Hasonló előadás


Google Hirdetések