Torna ai corsi
AI035 Professional

Programming Ruby: La guida dei Programmatori Pragmatici (Seconda edizione)

Un riferimento completo e un tutorial per il linguaggio di programmazione Ruby, che copre la sintassi di base, la progettazione orientata agli oggetti, funzionalità avanzate come la riflessione e il threading, e un'intera referenza della libreria per la versione 1.8.

4.9
45.0h
515 studenti
0 mi piace
Intelligenza Artificiale
Inizia ad imparare

Panoramica del corso

📚 Riepilogo del contenuto

Una guida completa e un tutorial per il linguaggio di programmazione Ruby, che copre la sintassi di base, il design orientato agli oggetti, funzionalità avanzate come la riflessione e il threading, e un'ampia referenza della libreria per la versione 1.8.

Padroneggia l'arte della programmazione elegante e potente con la guida definitiva al linguaggio Ruby.

Autore: Dave Thomas, Chad Fowler, Andy Hunt

Ringraziamenti: Recensori della mailing list Ruby, Yukihiro Matsumoto (Matz), Chad Fowler, Kim Wimpsett e la comunità dei Pragmatic Programmers.

🎯 Obiettivi di apprendimento

  1. Installare e configurare l’ambiente Ruby tramite diversi metodi (binario, sorgente o CVS) e utilizzare strumenti interattivi come irb e ri.
  2. Applicare le convenzioni di denominazione di Ruby e i principi dell’orientamento agli oggetti per definire metodi e gestire variabili.
  3. Manipolare dati usando array semplici, hash e espressioni regolari.
  4. Definire e implementare gerarchie di classi usando l'ereditarietà singola, super e mixins.
  5. Controllare la visibilità degli oggetti e l'integrità dei dati usando il Controllo di Accesso (Pubblico, Privato, Protetto) e gli attributi.
  6. Costruire classi contenitore robuste (es. SongList) integrate con il testing unitario.
  7. Implementare logica numerica usando diverse basi (esadecimale, ottale, binario) e utilizzare iteratori numerici per il flusso di controllo.
  8. Costruire stringhe complesse usando interpolazione, heredocs e diversi formati di delimitatori.
  9. Utilizzare gli intervalli come "interruttori" nella logica condizionale e come testatori di intervallo.
  10. Definire e richiamare metodi usando liste di argomenti flessibili (operatore splat), argomenti basati su hash ("chiave-valore") e conversioni da blocco a proc.

🔹 Lezione 1: Cap. 1-2: Fondamenta e avvio con Ruby.new

Panoramica: Questa lezione offre un'introduzione completa all'ecosistema Ruby, coprendo i metodi di installazione dalle distribuzioni binarie fino alla compilazione dal codice sorgente e l'utilizzo del controllo del codice sorgente. Gli studenti esploreranno la sintassi fondamentale di Ruby, enfatizzando la sua natura puramente orientata agli oggetti, le convenzioni di denominazione e i costrutti di programmazione di base come contenitori, strutture di controllo e blocchi.

Risultati dell'apprendimento:

  • Installare e configurare l'ambiente Ruby tramite diversi metodi (binario, sorgente o CVS) e utilizzare strumenti interattivi come irb e ri.
  • Applicare le convenzioni di denominazione di Ruby e i principi dell’orientamento agli oggetti per definire metodi e gestire variabili.
  • Manipolare dati usando array semplici, hash ed espressioni regolari.

🔹 Lezione 2: Cap. 3-4: Classi, Oggetti, Variabili e Contenitori

Panoramica: Questa lezione esplora i meccanismi fondamentali del sistema orientato agli oggetti di Ruby, concentrandosi sul modo in cui gli oggetti mantengono lo stato attraverso l'ereditarietà e sul funzionamento della catena di ricerca dei metodi. Si passa poi all'implementazione pratica di contenitori utilizzando Array e logica simile a Hash, chiudendosi con un approfondimento sulla struttura unica di Ruby basata sui blocchi — coprendo iteratori, chiusure e gestione delle risorse.

Risultati dell'apprendimento:

  • Definire e implementare gerarchie di classi usando ereditarietà singola, super e mixins.
  • Controllare la visibilità degli oggetti e l'integrità dei dati usando il Controllo di Accesso (Pubblico, Privato, Protetto) e gli attributi.
  • Costruire classi contenitore robuste (es. SongList) integrate con il testing unitario.

🔹 Lezione 3: Cap. 5: Maestria sui tipi standard e regex

Panoramica: Questa lezione offre un'analisi approfondita dei tipi scalari di base di Ruby — Numeri, Stringhe e Intervalli — e si sposta nel potente mondo delle Espressioni Regolari. Gli studenti impareranno come Ruby gestisce automaticamente gli overflow numerici, come manipolare le stringhe tramite interpolazione e delimitatori, e come utilizzare le espressioni regolari sia come modelli funzionali che come entità orientate agli oggetti per elaborazioni testuali complesse.

Risultati dell'apprendimento:

  • Implementare logica numerica usando diverse basi (esadecimale, ottale, binario) e utilizzare gli iteratori numerici per il flusso di controllo.
  • Costruire stringhe complesse usando interpolazione, heredocs e diversi formati di delimitatori.
  • Utilizzare gli intervalli come "interruttori" nella logica condizionale e come testatori di intervallo.

🔹 Lezione 4: Cap. 6-7: Logica dei metodi e controllo delle espressioni

Panoramica: Questa lezione esplora la natura flessibile dei metodi di Ruby e il potere della programmazione basata su espressioni. Gli studenti impareranno a definire metodi con argomenti variabili, integrare blocchi dinamicamente e utilizzare strutture di controllo avanzate come l'assegnazione parallela e le espressioni case con pattern matching. Il contenuto sottolinea che in Ruby quasi tutto è un'espressione che restituisce un valore, consentendo una logica concisa e leggibile.

Risultati dell'apprendimento:

  • Definire e richiamare metodi usando liste di argomenti flessibili (operatore splat), argomenti basati su hash ("chiave-valore") e conversioni da blocco a proc.
  • Eseguire logiche complesse tramite assegnazioni parallele/nidificate e espressioni booleane sofisticate.
  • Implementare il controllo del flusso usando condizioni basate su espressioni (if, unless, case) e modificatori avanzati dei cicli (break, redo, next).

🔹 Lezione 5: Cap. 8-9: Gestione degli errori e architettura modulare

Panoramica: Questa lezione copre la gestione robusta degli errori e la progettazione strutturale in Ruby. Esplora l'hierarchia delle eccezioni e i meccanismi per gestire errori (rescue, retry) o controllare il flusso tra scope (catch, throw). Inoltre, descrive come i Moduli favoriscano il riutilizzo del codice tramite namespace e mixins, l'integrazione del modulo Enumerable e i meccanismi per includere file esterni.

Risultati dell'apprendimento:

  • Implementare una gestione resiliente degli errori usando l'hierarchia della classe Exception e le strutture di controllo non locali.
  • Costruire basi di codice modulari usando Moduli per lo spazio dei nomi e Mixins per funzionalità tra classi.
  • Applicare il modulo Enumerable a classi personalizzate e risolvere ambiguità nei nomi dei metodi in ambienti con più moduli.

🔹 Lezione 6: Cap. 10-11: Operazioni I/O e concorrenza

Panoramica: Questa lezione copre i fondamenti del sistema Input/Output (I/O) di Ruby e il suo modello di concorrenza. Gli studenti impareranno a gestire risorse esterne tramite oggetti IO — inclusi file, stringhe e socket di rete — esplorando la programmazione multithread. Il programma passa dalla manipolazione di file di base alle tecniche avanzate di sincronizzazione (Monitor, Code) e alla gestione di processi esterni per gestire attività parallele in modo efficiente.

Risultati dell'apprendimento:

  • Eseguire operazioni su file usando gestione manuale e basata su blocchi delle risorse per garantire l'integrità dei dati.
  • Elaborare flussi di dati usando iteratori e la libreria StringIO per un'elaborazione flessibile dell'I/O.
  • Stabilire comunicazioni di rete tramite socket TCP e protocolli di livello superiore come HTTP.

🔹 Lezione 7: Cap. 12-13: Test, Debugging e Ottimizzazione

Panoramica: Questa lezione fornisce una guida completa per garantire qualità e prestazioni del codice in Ruby. Copre i principi del testing unitario usando il framework Test::Unit, tecniche di debugging sistematico tramite il debugger Ruby e metodi per identificare i colli di bottiglia di prestazione tramite benchmarking e profiling. Gli studenti impareranno a strutturare test, diagnosticare problemi comuni di logica e ottimizzare il codice sulla base di dati empirici.

Risultati dell'apprendimento:

  • Implementare test automatizzati unitari usando il framework Test::Unit e diversi tipi di affermazioni.
  • Diagnosare e risolvere difetti di codice usando il debugger in linea di comando di Ruby e strategie comuni di troubleshooting.
  • Analizzare le prestazioni del codice usando il modulo Benchmark e il Profiler per identificare e correggere colli di bottiglia nell'esecuzione.

🔹 Lezione 8: Cap. 14-16: L'ecosistema Ruby e il flusso di lavoro

Panoramica: Questa lezione esplora l'ambiente operativo di Ruby, concentrandosi sul modo in cui i programmi interagiscono con la riga di comando, gestiscono il proprio ambiente di esecuzione e utilizzano strumenti interattivi. Gli studenti impareranno anche a documentare il proprio codice usando RDoc e il sistema ri per creare documentazione professionale, ricercabile e sistemi di aiuto integrati.

Risultati dell'apprendimento:

  • Controllare il comportamento dei programmi Ruby tramite argomenti della riga di comando, variabili d'ambiente e metodi di terminazione.
  • Ottimizzare il flusso di lavoro di Interactive Ruby (irb) tramite prompt personalizzati, completamento automatico e gestione delle sessioni secondarie.
  • Generare documentazione strutturata usando la markup RDoc, logica di collegamento ipertestuale e modificatori per produrre HTML e dati ri.

🔹 Lezione 9: Cap. 17-18: Distribuzione e servizi web

Panoramica: Questa lezione copre i meccanismi essenziali per distribuire codice Ruby e costruire applicazioni basate su web. Esplora il sistema RubyGems per la gestione dei pacchetti e il controllo delle versioni, l'implementazione di interfacce web tramite CGI e sistemi di templating, e l'integrazione di sistemi distribuiti usando SOAP e servizi web.

Risultati dell'apprendimento:

  • Definire e pacchettizzare librerie Ruby usando la specifica Gem e Rake.
  • Sviluppare applicazioni web dinamiche usando cgi.rb per gestire parametri di query, cookie e sessioni.
  • Implementare sistemi di templating (ERB, Amrita) per separare la logica dell'applicazione dalla presentazione.

🔹 Lezione 10: Cap. 19-20: GUI e integrazione con la piattaforma

Panoramica: Questa lezione copre la costruzione di interfacce utente grafiche (GUI) in Ruby usando la libreria Tk, che va dal setup di widget di base fino alla gestione avanzata del canvas e dello scorrimento. Inoltre, esplora l'integrazione specifica della piattaforma su Windows, concentrandosi sulla valutazione delle prestazioni per l'automazione e l'uso della libreria DL per interfacciarsi direttamente con DLL di Windows.

Risultati dell'apprendimento:

  • Costruire un'applicazione Ruby Tk funzionale usando widget e diversi gestori di geometria (pack, place, grid).
  • Implementare elementi interattivi tramite binding di eventi e comunicazione bidirezionale per lo scorrimento.
  • Tradurre documentazione Perl/Tk esistente in codice Ruby valido e utilizzare la libreria DL per chiamate API di basso livello su Windows.

🔹 Lezione 11: Cap. 21: Estensione di Ruby (l'API C)

Panoramica: Questa lezione esplora l'interfaccia tra il linguaggio di programmazione Ruby e C, concentrando l'attenzione su come estendere la funzionalità di Ruby tramite estensioni C e come incorporare l'interprete Ruby in applicazioni C. Gli studenti impareranno la rappresentazione interna degli oggetti Ruby, il protocollo per incapsulare strutture dati C e gli strumenti necessari per costruire e configurare queste estensioni.

Risultati dell'apprendimento:

  • Comprendere e manipolare il tipo VALUE di Ruby e gli oggetti immediati all'interno di un ambiente C.
  • Implementare il protocollo di allocazione e inizializzazione a più passi per classi Ruby personalizzate supportate da C.
  • Automatizzare il processo di build per estensioni Ruby usando mkmf e extconf.rb.

🔹 Lezione 12: Cap. 22: Specifica completa del linguaggio

Panoramica: Questa lezione offre un'analisi tecnica approfondita della specifica del linguaggio Ruby, coprendo i blocchi fondamentali necessari per lo sviluppo professionale. Gli studenti esploreranno le sfumature dei tipi di dati di base di Ruby, le regole rigorose che governano lo scope di variabili e costanti e i meccanismi delle espressioni e degli argomenti dei metodi.

Risultati dell'apprendimento:

  • Distinguere tra diversi tipi di base (Interi, Stringhe, Simboli) e applicare notazioni abbreviate come %w e %q.
  • Gestire lo scope delle variabili e la visibilità delle costanti a livelli globali, di classe, di istanza e locali.
  • Implementare flussi di controllo complessi usando espressioni booleane, istruzioni case e modificatori dei cicli.

🔹 Lezione 13: Cap. 23-24: Typing indiretto e invocazione degli oggetti

Panoramica: Questa lezione esplora i meccanismi con cui Ruby esegue il codice tramite invocazione dei metodi, definizione degli oggetti e gestione degli errori, culminando nella filosofia del "Typing indiretto" (Duck Typing). Gli studenti impareranno a definire interfacce flessibili usando blocchi e Procs e a implementare sistemi robusti usando i protocolli di eccezione e coercizione di Ruby.

Risultati dell'apprendimento:

  • Eseguire ricerche di metodi complesse e manipolare il comportamento dei metodi usando super e alias.
  • Costruire basi di codice strutturate usando definizioni di classe/modulo e dichiarazioni di attributi.
  • Implementare pattern di programmazione funzionale usando blocchi, chiusure e oggetti Proc.

🔹 Lezione 14: Cap. 24-25: Oggetti avanzati e sicurezza

Panoramica: Questa lezione esplora l'architettura interna degli oggetti Ruby, concentrandosi sul rapporto sofisticato tra istanze, classi e metaclasse. Gli studenti padroneggeranno il comportamento dinamico tramite classi specifiche per oggetto e tecniche di metaprogrammazione, mentre impareranno a proteggere le applicazioni usando i livelli di sicurezza integrati di Ruby e i meccanismi di marcatura dei dati.

Risultati dell'apprendimento:

  • Mappare la struttura interna dei puntatori (klass e super) che governano l'interazione tra classi e oggetti.
  • Implementare comportamenti specifici per oggetto usando classi singleton e gestire lo stato tramite variabili di istanza di classe.
  • Applicare metaprogrammazione e congelamento degli oggetti per creare codice robusto, immutabile o generato dinamicamente.

🔹 Lezione 15: Cap. 26-28: Riflessione e Libreria Standard

Panoramica: Questo modulo esplora le potenti capacità introspective di Ruby, permettendo agli sviluppatori di esaminare oggetti e classi, chiamare metodi dinamicamente e gestire la serializzazione degli oggetti tramite Marshaling e YAML. Fornisce inoltre una referenza completa e una guida applicativa per la Libreria Standard di Ruby, coprendo classi fondamentali, protocolli di rete, archiviazione dei dati e utility di sistema.

Risultati dell'apprendimento:

  • Implementare la Riflessione: usare ObjectSpace, respond_to? e send per ispezionare e manipolare oggetti in tempo di esecuzione.
  • Padronizzare la Serializzazione: applicare strategie di Marshaling e YAML per salvare lo stato degli oggetti e facilitare la comunicazione distribuita (DRb).
  • Utilizzare la Libreria Standard: navigare e impiegare moduli specializzati per la Rete (Net::HTTP), XML/Web (REXML, CGI) e Archiviazione dei dati (PStore, CSV, SDBM).