Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Apple MacBook Air M3: chi deve davvero comprarlo? La recensione
Apple MacBook Air M3: chi deve davvero comprarlo? La recensione
A distanza di circa 8 mesi arriva l’importante aggiornamento dei MacBook Air: nessun cambiamento estetico, ma una revisione hardware interna con l’upgrade al processore M3. Le prestazioni migliorano rispetto alle generazioni precedenti, e questo fa sorgere una domanda spontanea: a chi è rivolto oggi questo laptop? Cerchiamo di capirlo nella nostra recensione 
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
Da ASUS un monitor particolare ma molto completo: principalmente indirizzato al videogiocatore, può essere sfruttato con efficacia anche per attività creative e di produzione multimediale
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Il nuovo robot aspirapolvere domestico di Dreame abbina funzionalità complete a un moccio flottante che raggiunge al meglio gli angoli delle pareti. Un prodotto tutto in uno semplice da utilizzare ma molto efficace, in grado di rispondere al meglio alle necessità di pulizia della casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-01-2011, 17:22   #1
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
[Tutorial Scala, Parte 1]

Il contenuto di questo post è rilasciato con licenza Creative Commons Attribution-Noncommercial-Share Alike 2.5

link alla licenza

Tutorial sul linguaggio di programmazione scala. Pratico nel senso che l'eccitazione per il calcolo del numero di fibonacci la lasciamo agli intenditori. Forse praticon-ico, nella bassezza dei suoi argomenti. Ma almeno si vede qualcosa.

scala tutorial 001 (pdf) (generale)
scala tutorial 002 (pdf) (generale)
scala tutorial 003 (pdf) (funzioni parzialmente applicate e metodi)
scala tutorial 004 (pdf) (campi pubblici e metodi di accesso)
scala tutorial 005 (pdf) (composizione di trait, concatenazione di invocazioni, un pelino di pattern matching)
scala tutorial 006 (pdf) (...un po' di roba già detta e ridetta...)

Ultima modifica di PGI-Bis : 19-02-2011 alle 19:10. Motivo: Aggiunta la quarta parte
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2011, 19:26   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
L'introduzione è mitica! Grazie PGI!
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2011, 19:35   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
PGI, nel mio caso la pubblicazione di questo tutorial è dotata di un tempismo stupefacente: i primi del mese prossimo vado a un piccolo talk su Scala tenuto nella mia città organizzato in seno a un gruppo di recentissima formazione di giovani appassionati di programmazione.

Grazie, al solito

P.S.: non era meglio aprire il thread nella sottosezione "Corsi, tutorials e faq"?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 25-01-2011, 17:59   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ho aggiunto la seconda parte

scala tutorial 002 (pdf)

Forse nel titolo sarebbe meglio dire "in parti" più che "parte 1", altrimenti devo aprire un milione di thread quando l'argomento è uno solo.

Circa la posizione, a mia memoria i tutorial si aprivano nella sezione generale per motivi di visibilità, per poi essere spostati nella sezione tutorial. Ma è sempre possibile che la prassi sia cambiata (o che mi sia venuta una botta d'alzheimer).
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2011, 14:30   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
Ho letto anche la seconda parte. La prima parte mi aveva lasciato un po' perplesso, nel senso che avevo la sensazione che mi rimanessero troppi dubbi, invece poi, leggendo anche la seconda, ho visto che spesso torni anche su costrutti già visti per spiegarli più nel dettaglio e nel complesso ho trovato la lettura molto scorrevole e piacevole. Spero che scriverai ancora perché ci sono ancora molte cose rimaste un po' in sospeso.

Ah, e un'altra cosa: nella seconda parte, correggimi se sbaglio, alla fine i trait Stock, Scarico, Carico e le corrispondenti classi *Base non le hai usate vero?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2011, 15:43   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
M'hai fatto venire il dubbio che, in una botta di demenza senile, avessi messo delle classi aliene.

Terminale usa StockBase, CaricoBase e ScaricoBase che, a loro volta, usano rispettivamente Stock, Carico e Scarico.

val quantità = magazzino.esegui(new StockBase(prodotto))
...
magazzino.esegui(new CaricoBase(prodotto, BigDecimal(quantità)))
...
magazzino.esegui(new ScaricoBase(prodotto, BigDecimal(quantità)))

Mi fa piacere che si lasci leggere. Per gli argomenti, è del tutto casuale, nel senso che sono le caratteristiche dei programmi a determinare gli argomenti del tutorial. E' una sorta di tutorial inverso. Appena mi salta in mente un terzo programma papabile proseguo.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2011, 05:03   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
Hai ragione, non me ne ero accorto, non ho letto bene il codice del terminale perché immaginavo che lo avresti implementato in modo diverso (usando direttamente magazzino.quantita(...), magazzino.aggiungi(...) e magazzino.rimuovi(...)). Ora però mi viene una curiosità: hai utilizzato questo metodo contorto per motivi diversi dal far vedere qualcosa di più del linguaggio? Mi sfugge il motivo di questa scelta altrimenti...

Comunque grazie per tutti i tutorial che scrivi perché sono tutti molto utili e interessanti.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2011, 15:34   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Concretamente l'approccio ha il solo scopo di mostrare trait, classi e interazioni tra queste due.

La forma usata ha tuttavia un suo senso.

Come hai notato, il fatto di avere il magazzino che esegue delle operazioni porta a includere nel magazzino i metodi che poi usano le operazioni. Che senso ha? Nessuno, a meno che le operazioni non inizino a diventare un po' più numerose e sostanziose. A quel punto entra in gioco la composizione nel senso che capita che quelle tante e grosse operazioni non siano altro che la combinazione di operazioni più piccole. Le operazioni più piccole sono definite come metodi dell'operando Magazzino, le combinazioni sono contenute negli operatori-funzione. Così ti ritrovi ad avere un magazzino con un contratto relativamente costante a fronte di un numero variabile di possibili interazioni (il principio open-closed).

Ad esempio, supponiamo di avere uno scarico ammissibile solo se lo stock non vada in negativo. Non è necessario cambiare la definizione di magazzino per ottenerlo, basta combinare i suoi metodi quantità e rimuovi:

Codice:
class ScaricoNonNegativo(val prodotto: Prodotto, val quantità: BigDecimal) {

        def apply(m: Magazzino) = {
                val stock = m.quantità(prodotto)
                if(stock.isEmpty) {
                        System.out.println("Prodotto non immagazzinato")
                } else {
                        val v = stock.get
                        if((v - quantità).signum < 0) {
                                System.out.println("Impossibile rimuovere la quantità richiesta (quantità disponibile " + v + ")")
                        } else {
                                m.rimuovi(prodotto, quantità)
                        }
                }
        }
}
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2011, 19:51   #9
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
Geniale, in pratica aumenta la modularità. Quando voglio aggiungere un'operazione posso scrivere una nuova classe invece di aggiungere codice a Magazzino. La stessa soluzione in Java non sarebbe così elegante.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2011, 20:07   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
In java è pressochè identico.

Codice:
public interface Operazione<A, B> {

    public B esegui(A m);
}

public interface Magazzino {

    public void aggiungi(Prodotto p, BigDecimal q)
    public void rimuovi(Prodotto p, BigDecimal q)
    public void quantità(Prodotto p, BigDecimal q)
    public void foreach(Operazione<Prodotto, Object> op)

    public <T> void esegui(Operazione<Magazzino, T> op)
}

public class Carico implements Operazione<Magazzino, Void> {
    private final Prodotto p;
    private final BigDecimal q;

    public Carico(Prodotto p, BigDecimal q) {
        this.p = p;
        this.q = q;
    }

    public Void esegui(Magazzino m) {
        m.aggiungi(p, q);
        return null;
    }
}
Il "vantaggio" è nei vari addolcimenti della sintassi, nell'esistenza di alcuni tipi predefiniti, come Function1, che evitano qualche interfaccia eccetera.

Insomma, confesso che la parte di Scala che a me piace è il fatto che sia un riassunto di Java con un paccone di nuove librerie. Altri probabilmente saranno più affascinati dai suoi aspetti funzionali.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2011, 20:46   #11
dierre
Senior Member
 
L'Avatar di dierre
 
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
mi iscrivo :sisi:
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale.
Go to a Wormhole
dierre è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2011, 02:16   #12
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
In java è pressochè identico.
Hai ragione, anche se mi sembra che come esempio si adatti meglio a Scala. Ha un nome questo pattern?
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Insomma, confesso che la parte di Scala che a me piace è il fatto che sia un riassunto di Java con un paccone di nuove librerie. Altri probabilmente saranno più affascinati dai suoi aspetti funzionali.
Cosa intendi per "riassunto di Java"? Il poter fare le stesse cose con meno codice? Però ho trovato l'impatto iniziale un po' traumatico come leggibilità, anche se adesso un po' ci sto facendo l'occhio... Comunque effettivamente ciò che mi sta piacendo al momento è l'aspetto funzionale, ma anche l'eredità multipla di cui ho spesso sentito la mancanza in Java.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 29-01-2011, 14:51   #13
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il trauma in lettura l'ho avuto anche io, ce l'ho tuttora e credo che l'avrò anche in futuro perchè non riuscirò mai ad abituarmi all'idea che:

list:::list

o

x<:<y

abbia un senso.

Per riassunto di java intendo sì, il fatto di poter scrivere le stesse cose con meno codice nel senso di evitare quelle ripetizioni che in Java sono evidenti. Ad esempio la necessità di ripetere il nome dei tipi nell'inizializzazione delle variabili:

String x = new String()
var x = new String()

Il fatto che le dichiarazioni di campi siano sempre trasformate in una coppia accessore/mutatore:

var x: Int = 10

Sembra un campo ma non lo è: sono due metodi, un setter e un getter.

E stesse cose nel senso che è una lingua staticamente tipata che gira sulla piattaforma java, con le librerie di java.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2011, 16:20   #14
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Oggi il forum è più lento del solito.

Ho aggiunto la terza parte

scala tutorial parte 3 (pdf)

Esaurite le idee riguardo ai piccoli programmi e non volendo ammorbarvi con un grosso programma, ripiego biecamente sulle singole funzionalità. Nel caso in questione si parla delle mitiche "funzioni parzialmente applicate", che è il classico argomento da fluidodinamica finchè non gli si calano le braghe.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2011, 12:54   #15
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
Grazie anche per la terza parte, l'ho letta ieri e l'ho trovata molto interessante.
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Il fatto che le dichiarazioni di campi siano sempre trasformate in una coppia accessore/mutatore:

var x: Int = 10

Sembra un campo ma non lo è: sono due metodi, un setter e un getter.
Potresti spiegare come vanno visti questi due metodi? Nel senso che all'atto pratico non si accede alla variabile come un normale campo di Java? E come si aggiungono restrizioni al metodo set?

Poi avrei anche altre domande su cose che non mi sono chiare o non ho proprio capito ma non vorrei prenderti troppo tempo... Stavo pensando di prendere un libro di quelli consigliati sul sito di Scala, tu hai studiato su uno di quelli?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2011, 13:59   #16
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
@wingman ed eventuali interessanti:
domani sera, alle 18:30 e sabato mattina, alle 9:30 a Padova ci sarà un talk su Scala tenuto da Mario Fusco (l'autore della libreria lambdaj), e coprirà principalmente gli aspetti legati al paradigma funzionale mettendolo a confronto con quello orientato agli oggetti (speriamo bene). Verra visto anche il supporto che Scala offre alla programmazione concorrente.
Per maggiori dettagli cercate il sito del gruppo "Programmers in padua" (gruppo di appassionati di recente formazione).

Io hoi deciso di affrontare prima il talk, a "mente scarica", visto che per me sarà duro l'impatto con la prospettiva funzionale; invece mi tengo i tutorial di PGI per dopo, come consolante antidolorofico

@EDIT:
PGI mi perdonerà se abuso del thread andando OT, però volevo segnalare a tutti questo tool: Kojo che può essere utile anche ai programmatori che approcciano Scala perchè fornisce un ambiebte REPL per questo linguaggio, dotato di syntax highlighting, code completition e rafinatezze vaie.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 03-02-2011 alle 14:36.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2011, 17:44   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La questione getter/setter si è dimostrata abbastanza "lunga" da offrire l'opportunità per una quarta parte, aggiunta al primo post.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2011, 13:44   #18
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
@wingman ed eventuali interessanti:
domani sera, alle 18:30 e sabato mattina, alle 9:30 a Padova ci sarà un talk su Scala tenuto da Mario Fusco (l'autore della libreria lambdaj), e coprirà principalmente gli aspetti legati al paradigma funzionale mettendolo a confronto con quello orientato agli oggetti (speriamo bene). Verra visto anche il supporto che Scala offre alla programmazione concorrente.
Per maggiori dettagli cercate il sito del gruppo "Programmers in padua" (gruppo di appassionati di recente formazione).

Io hoi deciso di affrontare prima il talk, a "mente scarica", visto che per me sarà duro l'impatto con la prospettiva funzionale; invece mi tengo i tutorial di PGI per dopo, come consolante antidolorofico
Grazie per le informazioni, purtroppo io non riuscirò a esserci causa impegni.
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
@EDIT:
PGI mi perdonerà se abuso del thread andando OT, però volevo segnalare a tutti questo tool: Kojo che può essere utile anche ai programmatori che approcciano Scala perchè fornisce un ambiebte REPL per questo linguaggio, dotato di syntax highlighting, code completition e rafinatezze vaie.
Kojo sembra molto carino, lo proverò sicuramente uno di questi giorni.
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
La questione getter/setter si è dimostrata abbastanza "lunga" da offrire l'opportunità per una quarta parte, aggiunta al primo post.
Grazie mille!
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-02-2011, 12:32   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53963
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
P.S.: non era meglio aprire il thread nella sottosezione "Corsi, tutorials e faq"?
Sì, era già previsto
Ora lo sposto.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2011, 20:01   #20
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Aggiunta la quinta parte.

scala tutorial 005 (pdf)

Ho avuto qualche problema nel trovare un programmino che avesse un senso, così ho iniziato un programmone, modulare, così da poter aggiungere pezzi.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Apple MacBook Air M3: chi deve davvero comprarlo? La recensione Apple MacBook Air M3: chi deve davvero comprarlo...
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ul...
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza Dreame L10s Pro Ultra Heat: la pulizia di casa t...
HONOR Magic6 Pro: come funziona Magic Portal, il modo ''intelligente'' di condividere HONOR Magic6 Pro: come funziona Magic Portal, il...
L'innovazione richiede fiducia: Workday si propone come guida nell'era dell'IA L'innovazione richiede fiducia: Workday si propo...
Italia strategica per Oracle. Arriva la ...
Sam-Bankman Fried: 25 anni di reclusione...
Mobility Analytics di WINDTRE Business p...
Il lander lunare JAXA SLIM si è r...
Warframe conquista l'iPhone: senza soluz...
Marvel Rivals!, l'inaspettato shooter Pv...
Twitch aggiorna le linee guida sui conte...
Galaxy M55 ufficiale: la nuova fascia me...
Google corregge sette vulnerabilit&agrav...
IA: le imprese italiane sono in prima li...
Garmin Dash Cam 57: un'alleata perfetta ...
Elgato Facecam MK2: come rendere ancora ...
2 iRobot Roomba al prezzo più sco...
La tua connessione in fibra ottica potre...
Il controller DualSense per PS5 con un p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:20.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www1v