Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA
Abbiamo partecipato ad Appian World 2024, evento dedicato a partner e clienti che si è svolto recentemente nei pressi di Washington DC, vicino alla sede storica dell’azienda. Nel festeggiare il 25mo anniversario, Appian ha annunciato diverse novità in ambito intelligenza artificiale
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini
Primo contatto con il monitor Lenovo ThinkVision 3D 27 che grazie a particolari accorgimenti tecnici riesce a ricreare l'illusione della spazialità tridimensionale senza che sia necessario utilizzare occhialini
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing
Abbiamo visto ancora una volta la Formula E da vicino, ospiti di Jaguar TCS Racing. In questa occasione però curve e rettilinei erano quelli di un circuito permanente, molto diverso dagli stretti passaggi delle strade di Roma
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-01-2011, 16: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 18:10. Motivo: Aggiunta la quarta parte
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2011, 18: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, 18: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, 16: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, 13: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, 14: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, 04: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, 14: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, 18: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, 19: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, 19: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, 01: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, 13: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, 15: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, 11: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, 12: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 13:36.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2011, 16: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, 12: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, 11: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, 19: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


Appian: non solo low code. La missione è l’ottimizzazione dei processi con l'IA Appian: non solo low code. La missione è ...
Lenovo ThinkVision 3D 27, la steroscopia senza occhialini Lenovo ThinkVision 3D 27, la steroscopia senza o...
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing La Formula E può correre su un tracciato ...
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming Lenovo LEGION e LOQ: due notebook diversi, stess...
Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione Nothing Ear e Ear (a): gli auricolari per tutti ...
L'iPad 10,9'' 64 GB è sceso a meno di 40...
Steam: basta ai furbetti dell'accesso an...
Motorola Edge 40 Neo con fotocamera da 5...
Arriva Kasperksy Next, la nuova gamma di...
Fallout, un successo senza fine: 1 milio...
Windows 11, arrivano le pubblicità...
Raccontaci la tecnologia che preferisci ...
AMD Ryzen 7 8700F e Ryzen 5 8400F: in ar...
Qual è l'impatto ambientale dei s...
WhatsApp, in arrivo una nuova feature pe...
Samsung Galaxy XCover 7: lo smartphone r...
TikTok, sempre più vicino il ban negli U...
Nuove TV Xiaomi A e A Pro, anche QLED e ...
Le bellissime cuffie Logitech G935, punt...
Ottimo prezzo per il portatile gaming AS...
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: 13:59.


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