Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Riders Republic: divertimento assicurato nell'open world di Ubisoft - Recensione PS5
Riders Republic: divertimento assicurato nell'open world di Ubisoft - Recensione PS5
Dopo Steep, Ubisoft Annecy ci riprova con gli sport estremi e raddoppia con l'open world: Riders Republic è il folle prodotto partorito dalle menti del team francese, un esplosivo mix di gare e acrobazie dedicato agli amanti degli sport estremi, e non solo. Vi raccontiamo il nostro viaggio nella Repubblica.
Perché FRITZ!Repeater 6000 è la soluzione ideale per la connessione per giocare
Perché FRITZ!Repeater 6000 è la soluzione ideale per la connessione per giocare
Abbiamo provato il nuovo FRITZ!Repeater 6000 in abbinamento al router FRITZ!Box 7530AX. Una postazione per la gestione della connessione domestica con caratteristiche ottimali e dalle prestazioni super, grazie al collegamento Wi-Fi 6, alla versatilità del FRITZ!OS, alla rete mesh e a molte altre funzionalità, che scopriamo nell'articolo
ECS Liva Q3 Plus, quando il mini-PC è davvero mini
ECS Liva Q3 Plus, quando il mini-PC è davvero mini
ECS Liva Q3 Plus è un mini-PC che sta in una mano e può essere impiegato in ambito embedded o casalingo per navigazione e produttività leggera. Il sistema può essere anche nascosto dietro un monitor grazie al supporto VESA. All'interno una APU AMD con 4 core / 8 thread e una GPU integrata Vega 8.
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: 2674
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: 2674
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: 2674
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: 2674
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: 2674
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: 2674
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: 2674
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


Riders Republic: divertimento assicurato nell'open world di Ubisoft - Recensione PS5 Riders Republic: divertimento assicurato nell'op...
Perché FRITZ!Repeater 6000 è la soluzione ideale per la connessione per giocare Perché FRITZ!Repeater 6000 è la so...
ECS Liva Q3 Plus, quando il mini-PC è davvero mini ECS Liva Q3 Plus, quando il mini-PC è dav...
Dagli smartphone ai PC e alle periferiche di gioco: il futuro di Qualcomm Dagli smartphone ai PC e alle periferiche di gio...
Nikon Z9: pazzesca la raffica a 120 fps. Ecco il nostro primo contatto Nikon Z9: pazzesca la raffica a 120 fps. Ecco il...
Epic Games Store vi regala Dead by Dayli...
L'eccellenza della ricerca italiana all'...
Basta cobalto: le celle a lama Svolt pot...
Le password verso il tramonto? Le tecnol...
Attenzione ai file RTF: con questa sempl...
Toyota, ecco la bZ4X per l'Europa: batte...
OPPO lancia la sua applicazione per la C...
StoreDot svela le celle al litio che si ...
It Takes Two trascinato in tribunale da ...
MIUI 13 pronta al lancio! Arriverà...
Windows 11 sull'8,3% dei PC, in crescita...
Corsair Vengeance DDR5-5200 2 x 16 GB (3...
Nissan contribuirà alla rete di r...
FRITZ!DECT 500, nuova lampada LED intell...
Chi vende più schede video tra NV...
SmartFTP
LibreOffice 7.2.3
7-Zip
Chromium
OCCT
K-Lite Codec Pack Update
K-Lite Mega Codec Pack
K-Lite Codec Pack Full
K-Lite Codec Pack Standard
K-Lite Codec Pack Basic
Opera Portable
Opera 81
Firefox Portable
NTLite
SiSoftware Sandra Lite
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: 08:03.


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