SlideShare a Scribd company logo
1 of 23
Ho creato e usato queste slide per uno degli incontri del seminario su  Ruby On Rails  chiamato  Rubynetto  :D Rubynetto e' stato organizzato dal Catania Ruby User Group al centro di aggregazione popolare GAPA (Catania) a Dicembre 2009. In queste slide troverete concetti base su Ruby, in particolare Classi, Oggetti e Metodi  che vi permetteranno di iniziare ad usare facilmente Ruby. Spero che siano utili a coloro che hanno partecipato all'incontro ed a chi sta imparando Ruby. Alessandro De Simone
Ruby e' Pure Object Oriented ,[object Object]
Object
Methods Ruby e' detto linguaggio ad oggetti  puro,  questo vuo dire :  ,[object Object]
non esistono funzioni e procedure, tipiche di altri linguaggi, ma solo metodi
Iniziamo dai Methods ,[object Object],[object Object]
I fantastici 4 ,[object Object],[object Object]
ha un  nome
ha un  argomento/i
ha un  valore di ritorno ,[object Object]
Come ti chiami ? ,[object Object]
I punto interrogativo ed esclamativo non ha un significato speciale per l'interprete, ma puoi usarli per creare nomi piu' espressivi: ,[object Object]
sort!, uniq!, slice!, … sono chiamati Bang methods e di solito modificano l'object.  Nota: esistono bang method che non modificano l'oggetto e method 'non bang' che lo modificano (ed: exit!)
[object Object],irb(main):051:0> [].nil? => false irb(main):053:0> [].empty? => true irb(main):054:0> nil.nil? => true irb(main):057:0> 3.instance_of? String => false irb(main):047:0> a = [4,7,2,1] => [4, 7, 2, 1] irb(main):048:0> a.sort => [1, 2, 4, 7] irb(main):049:0> a => [4, 7, 2, 1] irb(main):050:0> a.sort! #sort e sort! sono 2 differenti methods => [1, 2, 4, 7]
Piu' precisamente ... ,[object Object],irb(main):047:0> a = [4,7,2,1] => [4, 7, 2, 1] irb(main):048:0> a.sort # esiste la Bang variant di sort => [1, 2, 4, 7] irb(main):049:0> a => [4, 7, 2, 1] irb(main):050:0> a.sort! #sort e sort! sono 2 differenti methods => [1, 2, 4, 7]
Valore di ritorno Quale e' il valore (o i valori) ritornati dal metodo ? E' il valore dell'ultima espressione nel method.  In e' come se fosse: ,[object Object],[object Object]
Gli argomenti ,[object Object]
Le parentesi sono opzionali, nella definizione e nell'invocazione
Gli argomenti possono avere valori di default
Il tipo di ogni argomento e' quello del valore passato nell'invocazione Es: def conta(frase, carattere = 'o') # valore di default 'o' n = 0 for c in frase.split('') n = n + 1 if c == carattere  end n end puts conta('la mucca fa muuuuuuuuuuuuuuuu', 'u') puts conta('in gatto fa miaooooomiaooooomiaooooomiaooooo') puts conta('la zanzara fa szszszszszzzzszszszszsssssssssszzzz', 'z')
Named arguments Quando un method ha troppi argomenti diventa difficile ricordarne l'ordine per poter invocare il method Soluzione: mediante gli Hash “nominiamo” gli argomenti ! L'uso dei named arguments mediante Hash e' di uso comune. Moltissimi medodi di Rails li usano. def conta(args) frase = args[:frase] carattere = args[:carattere] || 'o' # valore di default 'o' n = 0 for c in frase.split('') n = n + 1 if c == carattere  end n end puts conta({:frase => 'la mucca fa muuuuuuuuuuuu', :carattere => 'u'}) puts conta({:frase => 'in gatto fa miaooooomiaoomiaooooomiaooooo'}) puts conta(:frase => 'la zanzara fa szszszszszzszs',:carattere => 'z')
Class ,[object Object]
Il nome deve iniziare con un carattere maiuscolo (come le costanti)

More Related Content

Viewers also liked

Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsAlessandro DS
 
RoR (Ruby on Rails)
RoR (Ruby on Rails)RoR (Ruby on Rails)
RoR (Ruby on Rails)scandiweb
 
Devops commando - Paris Devops 2016-04
Devops commando - Paris Devops 2016-04Devops commando - Paris Devops 2016-04
Devops commando - Paris Devops 2016-04Fred de Villamil
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails PresentationJoost Hietbrink
 

Viewers also liked (7)

Presentation Rails
Presentation RailsPresentation Rails
Presentation Rails
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
RoR (Ruby on Rails)
RoR (Ruby on Rails)RoR (Ruby on Rails)
RoR (Ruby on Rails)
 
Devops commando - Paris Devops 2016-04
Devops commando - Paris Devops 2016-04Devops commando - Paris Devops 2016-04
Devops commando - Paris Devops 2016-04
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
Ruby on Rails for beginners
Ruby on Rails for beginnersRuby on Rails for beginners
Ruby on Rails for beginners
 

Similar to Rubynetto

Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97Roberto Barbiera
 
Presentazione primi principi oop
Presentazione primi principi oopPresentazione primi principi oop
Presentazione primi principi oopyrcorr
 
Django: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalitàDjango: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalitàskam
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniextrategy
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourserik0
 
Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.Davide Corio
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parteOnofrio Panzarino
 
A brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventA brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventPietro Di Bello
 
Presentazione principi oop
Presentazione principi oopPresentazione principi oop
Presentazione principi oopgcorreddu
 
Custom taxonomies / Custom post type - wordcamp milano 2010
Custom taxonomies / Custom post type - wordcamp milano 2010Custom taxonomies / Custom post type - wordcamp milano 2010
Custom taxonomies / Custom post type - wordcamp milano 2010Maurizio Pelizzone
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Cristian Randieri PhD
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 

Similar to Rubynetto (20)

Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97
 
Presentazione primi principi oop
Presentazione primi principi oopPresentazione primi principi oop
Presentazione primi principi oop
 
Django: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalitàDjango: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalità
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioni
 
Lezione JSP database Crud
Lezione JSP database CrudLezione JSP database Crud
Lezione JSP database Crud
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 
Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Dal C a Java (1/3)
Dal C a Java (1/3)Dal C a Java (1/3)
Dal C a Java (1/3)
 
Ruby On Rails Insert
Ruby On Rails InsertRuby On Rails Insert
Ruby On Rails Insert
 
Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parte
 
A brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventA brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA event
 
Presentazione principi oop
Presentazione principi oopPresentazione principi oop
Presentazione principi oop
 
Custom taxonomies / Custom post type - wordcamp milano 2010
Custom taxonomies / Custom post type - wordcamp milano 2010Custom taxonomies / Custom post type - wordcamp milano 2010
Custom taxonomies / Custom post type - wordcamp milano 2010
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 

Rubynetto

  • 1. Ho creato e usato queste slide per uno degli incontri del seminario su Ruby On Rails chiamato Rubynetto :D Rubynetto e' stato organizzato dal Catania Ruby User Group al centro di aggregazione popolare GAPA (Catania) a Dicembre 2009. In queste slide troverete concetti base su Ruby, in particolare Classi, Oggetti e Metodi che vi permetteranno di iniziare ad usare facilmente Ruby. Spero che siano utili a coloro che hanno partecipato all'incontro ed a chi sta imparando Ruby. Alessandro De Simone
  • 2.
  • 4.
  • 5. non esistono funzioni e procedure, tipiche di altri linguaggi, ma solo metodi
  • 6.
  • 7.
  • 8. ha un nome
  • 9. ha un argomento/i
  • 10.
  • 11.
  • 12.
  • 13. sort!, uniq!, slice!, … sono chiamati Bang methods e di solito modificano l'object. Nota: esistono bang method che non modificano l'oggetto e method 'non bang' che lo modificano (ed: exit!)
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. Le parentesi sono opzionali, nella definizione e nell'invocazione
  • 19. Gli argomenti possono avere valori di default
  • 20. Il tipo di ogni argomento e' quello del valore passato nell'invocazione Es: def conta(frase, carattere = 'o') # valore di default 'o' n = 0 for c in frase.split('') n = n + 1 if c == carattere end n end puts conta('la mucca fa muuuuuuuuuuuuuuuu', 'u') puts conta('in gatto fa miaooooomiaooooomiaooooomiaooooo') puts conta('la zanzara fa szszszszszzzzszszszszsssssssssszzzz', 'z')
  • 21. Named arguments Quando un method ha troppi argomenti diventa difficile ricordarne l'ordine per poter invocare il method Soluzione: mediante gli Hash “nominiamo” gli argomenti ! L'uso dei named arguments mediante Hash e' di uso comune. Moltissimi medodi di Rails li usano. def conta(args) frase = args[:frase] carattere = args[:carattere] || 'o' # valore di default 'o' n = 0 for c in frase.split('') n = n + 1 if c == carattere end n end puts conta({:frase => 'la mucca fa muuuuuuuuuuuu', :carattere => 'u'}) puts conta({:frase => 'in gatto fa miaooooomiaoomiaooooomiaooooo'}) puts conta(:frase => 'la zanzara fa szszszszszzszs',:carattere => 'z')
  • 22.
  • 23. Il nome deve iniziare con un carattere maiuscolo (come le costanti)
  • 24. Una istanza della classe si crea con Nome_classe.new
  • 25. Viene inizializzata nel method initialize
  • 26. Es: class Bike def initialize ... end def pedala ... end end graziella = Bike.new
  • 27. Class (esempio) class Bike def initialize(marca, diametro) @marca = marca @distanza = 0 #cm @circ_ruota = diametro * 2.54 * 3.14 #cm @dim_ruota = diametro #pollici end def pedala @distanza += @dim_ruota end ... end mountain_bike = Bike.new('Bianchi', 26) 10.times{ mountain_bike.pedala } puts mountain_bike.distanza
  • 28.
  • 29.
  • 30. Si puo' accedere ad una variabile di istanza solo dai metodi di istanza dell'oggetto
  • 31. Se si vuole accedere alle variabili di istanza da fuori l'oggetto bisogna definire dei metodi (spesso chiamati setter e i getter) mountain_bike = Bike.new('Bianchi', 26) # in mountain_bike @marca vale 'Bianchi' e @circ_ruota vale 26 graziella = Bike.new('Atala',20) #in graziella @marca vale 'atala' e @circ_ruota vale 20
  • 32. Getter e Setter Nel seguente esempio @distanza viene letta mediante il method distanza e viene scritta mediante il method @distanza= : Per facilita' variabile e metodo hanno lo stesso nome (non e' necessario). class Bike ... def distanza # getter method @distanza end def distanza=(distanza) #setter method @distanza = distanza End ... end mountain_bike = Bike.new('Bianchi', 26) 10.times{ mountain_bike.pedala } puts mountain_bike.distanza
  • 33.
  • 34. Sono accessibili e condivise da tutti i metodi di istanza e di classe
  • 35. Vengono inizializzate nella classe, non nel metodo initialize
  • 36. Variabili di classe (esempio) class Bike @@count_bike = 0 # variabile di classe ... def initialize(marca, diametro) ... @@count_bike += 1 # aggiorno il numero di bike ... End ... def self.numero_bike # metodo di classe @@count_bike end ... end mountain_bike = Bike.new('Bianchi', 26) graziella= Bike.new('Atala', 20) puts "Numero biciclette: #{Bike.numero_bike}"
  • 37. Occhio alle 'Variabili di istanza di classe' ! class Bike @no_ist = 0 # Non e' una variabile di istanza, ma una # ' variabile di istanza di classe ' (poco usate) @@var_class = 0 # e' una variabile di classe def initialize @var_ist = 0 # e' una variabile di istanza end … end
  • 38. Metodi di Classe Sono quei metodi che hanno a che fare con la classe e non con le singole istanze della classe (gli oggetti). Esistono vari modi per crearle, ecco i due piu' famosi: 1) self .nome_metodo 2) Nome_classe .nome_metodo class Bike @@count_bike = 0 # variabile di classe def self.numero_bike # 1) metodo di classe @@count_bike end # def Bike.numero_bike # 2)e' equivalente ad 1) # @@count_bike # end end
  • 39.
  • 40.
  • 41. Se l'object non e' specificato nel method allora verra' implicitamente usato self
  • 42. Nel caso di Palindroma? self e' di tipo Object
  • 43. Object e' la classe dalla quale tutti gli altri object ereditano irb(main):148:0> self => main irb(main):149:0> self.class => Object irb(main):150:0>
  • 44.
  • 45. Method in main Se definiamo il method palindroma? nell'object main, sara' visibile a tutti gli oggetti, di qualunque class, anche Fixnum: Attenzione: Fixnum non ha il method reverse, quindi, per evitare l'errore, dentro il metodo palindroma? bisogna prima convertire parola in String: parola = parola.to_s irb(main):157:0> 'lalalal'.palindroma? => true irb(main):159:0> 1234.palindroma? NoMethodError: undefined method `reverse' for 1234:Fixnum from (irb):154:in `palindroma?' from (irb):159 from :0 irb(main):160:0>
  • 46. Bibliografia The ruby Programming Language (O'REALLY) by David Flanagan e Yukihiro Matsumoto Ringraziamenti Michelangelo Altamore ed Enzo Rivello insieme ai quali e' stato organizzato Rubynetto. Il centro GAPA, Domenico e tutti i ragazzi del Catania Linux User Group per l'aiuto organizzativo