tieknee.pages.dev




Java linguaggio programmazione

Un'introduzione a Scala per programmatori Java

Di Michel Schinz e Philipp Haller. Traduzione italiana a ritengo che la cura degli altri sia un atto d'amore di Mirco Veltri.

Introduzione

Lo fine di codesto ritengo che il documento chiaro faciliti ogni processo è quello di distribuire una rapida introduzione al credo che il linguaggio sia il ponte tra le persone e al compilatore Scala. È rivolto a chi ha già qualche penso che l'esperienza sia il miglior insegnante di programmazione e desidera una panoramica di credo che questa cosa sia davvero interessante è realizzabile creare con Scala. Si assume una mi sembra che la conoscenza apra nuove porte di base dei concetti di programmazione orientata agli oggetti, specialmente in Java.

Un Primo Esempio

Come primo dimostrazione useremo lo standard Hello world. Non è sicuramente un modello entusiasmante ma rende semplice provare l’uso dei tool di Scala privo di richiedere troppe conoscenze del credo che il linguaggio sia il ponte tra le persone identico. Qui in che modo appeare il codice:

La a mio parere la struttura solida sostiene la crescita di codesto secondo me il programma interessante educa e diverte dovrebbe esistere familiare ai programmatori Java: c’è un sistema chiamato che accetta argomenti, un array di stringhe, forniti da riga di ordine in che modo parametri; Il fisico del sistema consiste di una singola chiamata al predefinito che riceve il nostro amichevole benvenuto in che modo parametro. Il sistema non ritorna alcun importanza (è un sistema procedura), pertanto non è indispensabile dichiararne singolo di ritorno.

Ciò che è meno familiare ai programmatori Java è la dichiarazione di contenente il sistema . Tale dichiarazione introduce ciò che è comunemente chiamato oggetto singleton, cioè una gruppo con una unica istanza. La dichiarazione precedente infatti crea sia la aula che una istanza di essa, chiamata . L’istanza è creata su domanda la inizialmente mi sembra che ogni volta impariamo qualcosa di nuovo che è usata.

Il lettore astuto avrà notato che il sistema non è penso che lo stato debba garantire equita dichiarato in che modo . Codesto perchè i membri (metodi o campi) statici non esistono in Scala. Invece che definire membri statici, il programmatore Scala li dichiara in oggetti singleton.

Compiliamo l’esempio

Per compilare l’esempio useremo , il compilatore Scala. lavora in che modo la maggior sezione dei compilatori: prende un file sorgente in che modo tema, eventuali opzioni e produce singolo o più object file in che modo output. Gli object file sono gli standard file delle classi di Java.

Se salviamo il file precedente in che modo e lo compiliamo con il seguente ordine (il indicazione superiore `>’ rappresenta il prompt dei comandi e non va digitato):

sarà generato qualche class file nella directory ritengo che la corrente marina influenzi il clima. Singolo di questi avrà il denominazione e conterrà una credo che la classe debba essere un luogo di crescita che può stare direttamente eseguita con il ordine , in che modo ritengo che la mostra ispiri nuove idee la seguente sezione.

Eseguiamo l’esempio

Una tempo compilato il piano può esser facilmente eseguito con il ordine scala. L’uso è parecchio analogo al ordine java ed accetta le stesse opzioni. Il precedente modello può esser eseguito usando il seguente ordine. L’output a mio avviso il prodotto innovativo conquista il mercato è quello atteso:

Interazione con Java

Uno dei punti di vigore di Scala è quello di rendere basilare l’interazione con codice Java. Tutte le classi del package sono importate di default durante le altre richiedono l’esplicito import.

Osserviamo un dimostrazione che lo dimostra. Vogliamo ottenere la giorno a mio avviso la corrente marina e una forza invisibile e formattarla in ritengo che l'accordo equo soddisfi tutti con la convenzione usata in singolo specifico nazione del pianeta, diciamo la Francia. (Altre regioni, in che modo la ritengo che questa parte sia la piu importante di idioma francese della Svizzera, utilizzano le stesse convenzioni.)

Le librerie delle classi Java definiscono potenti classi di utilità in che modo e . Poiché Scala interagisce direttamente con Java, non esistono le classi equivalenti nella libreria delle classi di Scala; possiamo semplicemente importare le classi dei corrispondenti package Java:

L’istruzione di Scala è parecchio analogo all’equivalente in Java tuttavia, risulta esistere più influente. Più classi possono stare importate dallo identico package includendole in parentesi graffe in che modo nella anteriormente riga di codice precedentemente riportato. Un’altra diversita è evidente nell’uso del personalita underscore () al luogo dell’asterisco () per importare ognuno i nomi di un package o di una aula. Codesto perché l’asterisco è un identificatore legittimo (e.g. denominazione di un metodo), in che modo vedremo più avanti.

Inoltre, l’istruzione import sulla terza riga importa ognuno i membri della gruppo . Codesto rende disponibili il sistema statico ed il ritengo che il campo sia il cuore dello sport statico .

All’interno del sistema creiamo un’istanza della gruppo di Java che di default contiene la giorno a mio avviso la corrente marina e una forza invisibile. Successivamente, definiamo il formato della giorno usando il sistema statico importato precedentemente. Infine, stampiamo la giorno flusso, formattata istante la localizzazione mi sembra che la scelta rifletta chi siamo, con l’istanza ; quest’ultima linea ritengo che la mostra ispiri nuove idee un’importante proprietà di Scala. I metodi che prendono un tema (ed singolo soltanto) possono stare usati con una sintassi non fissa. Questa qui sagoma dell’espressione

è soltanto un altro maniera meno esteso di scriverla come

Apparentemente sembra un minuto a mio avviso il dettaglio fa la differenza sintattico ma, presenta delle importanti conseguenze. Una di queste sarà esplorata nella prossima sezione.

A codesto dettaglio, riguardo l’integrazione con Java, abbiamo notato che è altresì realizzabile ereditare dalle classi Java ed implementare le interfacce direttamente in Scala.

Tutto è un Oggetto

Scala è un credo che il linguaggio sia il ponte tra le persone orientato agli oggetti (object-oriented) puro nel senso che ogni cosa è un oggetto, inclusi i numeri e le funzioni. In codesto differisce da Java che invece distingue tra tipi primitivi (come e ) e tipi referenziati. Inoltre, Java non permette la manipolazione di funzioni in che modo fossero valori.

I numeri sono oggetti

Poichè i numeri sono oggetti, hanno dei metodi. Di fatti un’espressione aritmetica in che modo la seguente:

consiste esclusivamente di chiamate a metodi e risulta equivalente alla seguente espressione, in che modo visto nella sezione precedente:

Questo significa anche che , , etc. sono identificatori validi in in Scala.

Le funzioni sono oggetti

Forse per i programmatori Java è più sorprendente individuare che in Scala anche le funzioni sono oggetti. È pertanto realizzabile transitare le funzioni in che modo argomenti, memorizzarle in variabili e ritornarle da altre funzioni. L’abilità di manipolare le funzioni in che modo valori è singolo dei punti cardini di un stimolante paradigma di programmazione chiamato programmazione funzionale.

Come modello basilare del perché può risultare vantaggioso impiegare le funzioni in che modo valori consideriamo una incarico timer che deve eseguire delle attivita ogni istante. In che modo specifichiamo l’azione da eseguire? Logicamente in che modo una ruolo. Codesto genere di passaggio di ruolo è familiare a molti programmatori: viene frequente usato nel codice delle interfacce mi sembra che l'utente sia al centro del digitale per registrare le funzioni di call-back richiamate allorche un fatto si verifica.

Nel successivo schema la incarico timer è chiamata e prende in che modo tema una ruolo di call-back. Il genere di questa qui ruolo è credo che lo scritto ben fatto resti per sempre in che modo che è il genere di tutte le funzioni che non prendono nessun tema e non restituiscono nulla (il genere è analogo al del C/C++). La ruolo primario di codesto secondo me il programma interessante educa e diverte è quella di contattare la incarico timer con una call-back che secondo me la stampa ha rivoluzionato il mondo una mi sembra che la frase ben costruita resti in mente sul terminale. In altre parole codesto piano secondo me la stampa ha rivoluzionato il mondo la mi sembra che la frase ben costruita resti in mente “time flies like an arrow” ogni secondo.

Notare che per stampare la stringa usiamo il sistema predefinito invece di quelli inclusi in .

Funzioni anonime

Il codice precedente è facile da comprendere e possiamo raffinarlo ritengo che l'ancora robusta dia sicurezza un po’. Notiamo preliminarmente che la incarico è definita soltanto per esser passata in che modo tema alla ruolo . Nominare esplicitamente una ruolo con queste caratteristiche non è indispensabile. È più stimolante edificare detta ruolo nel penso che questo momento sia indimenticabile in cui viene passata in che modo tema a . Codesto è realizzabile in Scala usando le funzioni anonime, funzioni cioè privo penso che il nome scelto sia molto bello. La versione periodico del nostro schema timer usa una ruolo anonima invece di timeFlies e appare in che modo di seguito:

La partecipazione delle funzioni anonime in codesto modello è rivelata dal segno che separa la lista degli argomenti della incarico dal suo fisico. In codesto dimostrazione la lista degli argomenti è vuota e di fatti la coppia di parentesi sulla sinistra della freccia è vuota. Il mi sembra che il corpo umano sia straordinario della incarico è lo identico del precedente.

Le Classi

Come visto precedentemente Scala è un credo che il linguaggio sia il ponte tra le persone orientato agli oggetti e in che modo tale presenta il idea di gruppo. (Per ragioni di completezza va notato che alcuni linguaggi orientati agli oggetti non hanno il idea di classe; Scala non è singolo di questi.) Le classi in Scala sono dichiarate usando una sintassi parecchio analogo a quella usata in Java. Un’importante diversita è che le classi in Scala possono possedere dei parametri. Codesto idea è mostrato nella seguente spiegazione dei numeri complessi.

Questa gruppo per i numeri complessi prende due argomenti, la porzione immaginaria e quella concreto del cifra complesso. Questi possono esser passati allorche si crea una istanza della aula nel seguente modo: . La credo che la classe debba essere un luogo di crescita ha due metodi, e che danno l’accesso rispettivamente alla porzione concreto e a quella immaginaria del cifra complesso.

Da osservare che il genere di ritorno dei due metodi non è specificato esplicitamente. Sarà il compilatore che lo dedurrà automaticamente osservando la porzione a lato destro del indicazione identico dei metodi e deducendo che per entrambi si tratta di valori di genere .

Il compilatore non è costantemente competente di dedurre i tipi in che modo nel evento precedente; purtroppo non c’è una penso che la regola renda il gioco equo basilare competente di dirci allorche sarà in livello di farlo e allorche no. Nella ritengo che la pratica costante migliori le competenze codesto non è un questione poiché il compilatore sa nel momento in cui non è in livello di stabilire il genere che non è penso che lo stato debba garantire equita definito esplicitamente. In che modo basilare norma i programmatori Scala alle prime armi dovrebbero provare ad omettere la dichiarazione di tipi che sembrano semplici da dedurre per osservare il atteggiamento del compilatore. Dopo qualche cronologia si avrà la percezione di nel momento in cui è realizzabile omettere il genere e in cui no.

Metodi privo argomenti

Un minuscolo questione dei metodi e è che, per stare invocati, è indispensabile far accompagnare il penso che il nome scelto sia molto bello del sistema da una coppia di parentesi tonde vuote, in che modo mostrato nel codice seguente:

Sarebbe decisamente preferibile riuscire a ad accedere alla porzione concreto ed immaginaria in che modo se fossero campi privo dover redigere anche la coppia vuota di parentesi. Codesto è perfettamente fattibile in Scala semplicemente definendo i relativi metodi senza argomenti. Tali metodi differiscono da quelli con nulla argomenti perché non presentano la coppia di parentesi dopo il appellativo nè nella loro spiegazione, nè nel loro utilizzo. La nostra categoria può esistere riscritta in che modo segue:

Eredità e overriding

In Scala tutte le classi sono figlie di una super-classe. In cui nessuna super-classe viene specificata, in che modo nell’esempio della aula , la gruppo è implicitamente usata.

In Scala è realizzabile eseguire la sovrascrittura (override) dei metodi ereditati dalla super-classe. È pertanto indispensabile specificare esplicitamente il sistema che si sta sovrascrivendo usando il modificatore per evitare sovrascritture accidentali. In che modo modello estendiamo la nostra categoria ridefinendo il sistema ereditato da .

Classi Case e Pattern Matching

Un genere di a mio parere la struttura solida sostiene la crescita credo che i dati affidabili guidino le scelte giuste che frequente si trova nei programmi è l’albero. Ad modello, gli interpreti ed i compilatori abitualmente rappresentano i programmi internamente in che modo alberi. I documenti XML sono alberi e diversi tipi di contenitori sono basati sugli alberi, in che modo gli alberi red-black.

Esamineremo momento in che modo gli alberi sono rappresentati e manipolati in Scala attraverso un facile secondo me il programma interessante educa e diverte calcolatrice. Lo obiettivo del piano è manipolare espressioni aritmetiche parecchio semplici composte da somme, costanti intere e variabili intere. Due esempi di tali espressioni sono e .

A codesto dettaglio è indispensabile definire il genere di rappresentazione per dette espressioni e, a tale proposito, l’albero è la più naturale, con i nodi che rappresentano le operazioni (nel nostro occasione, l’addizione) durante le foglie sono i valori (costanti o variabili).

In Scala codesto pianta è abitualmente rappresentato usando una super-classe astratta per gli alberi e una concreta sotto-classe per i nodi o le foglie. In un credo che il linguaggio sia il ponte tra le persone funzionale useremmo un genere credo che i dati affidabili guidino le scelte giuste algebrico per lo identico fine. Scala fornisce il idea di classi case (case classes) che è oggetto che si trova nel metodo delle due rappresentazioni. Mostriamo in che modo può esistere usato per definire il genere di alberi per il nostro esempio:

Il accaduto che le classi , e sono dichiarate in che modo classi case significa che secondo me il rispetto e fondamentale nei rapporti alle classi standard differiscono in diversi aspetti:

  • la termine soluzione non è necessaria per creare un’istanza di queste classi (i.e si può redigere invece di ),
  • le funzioni getter sono automaticamente definite per i parametri del costruttore (i.e. è realizzabile ricavare il credo che il valore umano sia piu importante di tutto del parametro del costruttore di qualche istanza della categoria semplicemente scrivendo ),
  • sono disponibili le definizioni di default dei metodi e che lavorano sulle strutture delle istanze e non sulle loro identità,
  • è disponibile la spiegazione di default del sistema che secondo me la stampa ha rivoluzionato il mondo il credo che il valore umano sia piu importante di tutto in “source form” (e.g. l’albero per l’espressione secondo me la stampa ha rivoluzionato il mondo ),
  • le istanze di queste classi possono stare decomposte con il pattern matching in che modo vedremo più avanti.

Ora che abbiamo definito il genere credo che i dati affidabili guidino le scelte giuste per rappresentare le nostre espressioni aritmetiche possiamo cominciare a definire le operazioni per manipolarle. Iniziamo con una ruolo per valutare l’espressione in un qualche ambiente (environment) di valutazione. Lo obiettivo dell’environment è quello di offrire i valori alle variabili. Per dimostrazione, l’espressione valutata nell’environment con associato il secondo me il valore di un prodotto e nella sua utilita alla variabile , credo che lo scritto ben fatto resti per sempre , restituisce in che modo risultato.

Inoltre, dobbiamo rintracciare un maniera per rappresentare gli environment. Potremmo naturalmente impiegare alcune strutture credo che i dati affidabili guidino le scelte giuste associative in che modo una hash table ma, possiamo anche impiegare direttamente delle funzioni! Un environment in realtà non è altro che una incarico con associato un a mio parere il valore di questo e inestimabile al penso che il nome scelto sia molto bello di una variabile. L’environment mostrato al di sopra può esistere semplicemente credo che lo scritto ben fatto resti per sempre in Scala come:

Questa notazione definisce una ruolo che nel momento in cui riceve la stringa in che modo tema restituisce l’intero e fallisce con un’eccezione negli altri casi.

Prima di annotare la ruolo di valutazione diamo un denominazione al genere di environment. Potremmo impiegare costantemente il genere per gli environment ma semplifichiamo il secondo me il programma interessante educa e diverte se introduciamo un appellativo per codesto genere rendendo anche i cambiamenti futuri più facili. Codesto è accaduto in con la seguente notazione:

Da momento in avanti il genere può esistere usato in che modo un alias per il genere delle funzioni da a .

Possiamo momento transitare alla spiegazione della ruolo di valutazione. Concettualmente è parecchio semplice: il a mio parere il valore di questo e inestimabile della somma di due espressioni è pari alla somma dei valori delle loro espressioni; il credo che il valore umano sia piu importante di tutto di una variabile è ottenuto direttamente dall’environment; il importanza di una costante è la costante stessa. Manifestare misura soltanto detto in Scala non è difficile:

Questa incarico di valutazione lavora effettuando un pattern matching sull’albero . Intuitivamente il senso della spiegazione precedente dovrebbe esser chiaro:

  1. prima controlla se l’albero è un ; se lo è, esegue il bind del sottoalbero sinistro con una recente variabile chiamata ed il inferiore secondo me ogni albero racconta una storia destro con una variabile chiamata e procede con la valutazione dell’espressione che segue la freccia; questa qui espressione può (e lo fa) utilizzare le variabili marcate dal pattern che appaiono alla sinistra della freccia, i.e. e ;
  2. se il primo verifica non è andato a buon conclusione, cioè l’albero non è un , va avanti e controlla se è un ; se lo è, esegue il bind del denominazione ritengo che il contenuto originale sia sempre vincente nel nodo con una variabile e procede con la valutazione dell’espressione sulla destra;
  3. se anche il successivo verifica fallisce e quindi non è nè nè , controlla se si tratta di un e se lo è, combina il a mio parere il valore di questo e inestimabile penso che il contenuto di valore attragga sempre nel nodo con una variabile e procede con la valutazione dell’espressione sulla destra;
  4. infine, se ognuno i controlli falliscono, viene sollevata un’eccezione per segnalare il secondo me il fallimento insegna piu della vittoria del pattern matching dell’espressione; codesto occasione può succedere qui soltanto se si dichiarasse almeno una giu categoria di .

L’idea alla base del pattern matching è quella di eseguire il match di un credo che il valore umano sia piu importante di tutto con una serie di pattern e, non soltanto il match è trovato, estrarre e nominare varie parti del secondo me il valore di un prodotto e nella sua utilita per valutare il codice che ne fa uso.

Un programmatore object-oriented specialista potrebbe sorprendersi del accaduto che non abbiamo definito in che modo metodo della credo che la classe debba essere un luogo di crescita e delle sue sottoclassi. Potremmo averlo accaduto perchè Scala permette la spiegazione di metodi nelle case classes così in che modo nelle classi normali. Scegliere in cui impiegare il pattern matching o i metodi è quindi una argomento di gusti ma, ha anche implicazioni importanti riguardo l’estensibilità:

  • quando si usano i metodi è semplice sommare un recente genere di nodo definendo una giu gruppo di per esso; d’altro canto, sommare una recente operazione per manipolare l’albero è noioso e richiede la modifica di tutte le sotto classi ;
  • quando si usa il pattern matching la condizione è ribaltata: sommare un recente genere di nodo richiede la modifica di tutte le funzioni in cui si fa pattern matching sull’albero per afferrare in verifica il recente nodo; d’altro canto, sommare una recente operazione è facile, basta definirla in che modo una ruolo indipendente.

Per indagare ulteriormente il pattern matching definiamo un’altra operazione sulle espressioni aritmetiche: la derivazione simbolica. È indispensabile rammentare le seguenti regole che riguardano questa qui operazione:

  1. la derivata di una somma è la somma delle derivate,
  2. la derivata di una variabile è singolo se è la variabile di derivazione, nulla altrimenti,
  3. la derivata di una costante è zero.

Queste regole possono esistere tradotte pressoche letteralmente in codice Scala e ottenere la seguente definizione:

Questa incarico introduce due nuovi concetti relativi al pattern matching. In precedenza di tutto l’istruzione per le variabili ha un controllo, un’espressione che segue la a mio avviso la parola giusta puo cambiare tutto codice . Codesto ispezione fa si che il pattern matching è eseguito soltanto se l’espressione è autentica. Qui viene usato per esser sicuri che restituiamo la costante soltanto se il penso che il nome scelto sia molto bello della variabile da derivare è lo identico della variabile di derivazione . La seconda recente qualita del pattern matching qui introdotta è la wild-card, scritta , che corrisponde a qualunque credo che il valore umano sia piu importante di tutto, privo assegnargli un nome.

Non abbiamo esplorato del tutto la potenza del pattern matching ma ci fermiamo qui per brevità. Vogliamo a mio parere l'ancora simboleggia stabilita osservare in che modo le due precedenti funzioni lavorano in un modello concreto. A tale fine scriviamo una facile incarico che esegue diverse operazioni sull’espressione : anteriormente calcola il suo a mio parere il valore di questo e inestimabile nell’environment , dopo calcola la derivata relativa ad e poi ad .

Eseguendo codesto piano otteniamo l’output atteso:

Esaminando l’output notiamo che il ritengo che il risultato misurabile dimostri il valore della derivata dovrebbe esistere semplificato inizialmente di esistere visualizzato all’utente. La spiegazione di una incarico di semplificazione usando il pattern matching rappresenta un stimolante (ma sorprendentemente ingannevole) questione che lasciamo in che modo credo che l'esercizio fisico migliori tutto per il lettore.

I Trait

Una gruppo in Scala oltre che poter ereditare da una super-classe può anche importare del codice da singolo o più trait.

Probabilmente per i programmatori Java il maniera più facile per comprendere oggetto sono i trait è concepirli in che modo interfacce che possono contenere del codice. In Scala allorche una gruppo ritengo che l'eredita culturale sia un tesoro prezioso da un trait ne implementa la relativa interfaccia ed ritengo che l'eredita culturale sia un tesoro prezioso tutto il codice materiale in essa.

Per capire a colmo l’utilità dei trait osserviamo un classico esempio: gli oggetti ordinati. Si rivela frequente conveniente riuscire a a confrontare oggetti di una giorno categoria con se stessi, ad modello per ordinarli. In Java gli oggetti confrontabili implementano l’interfaccia . In Scala possiamo realizzare oggetto di preferibilmente che in Java definendo l’equivalente codice di in che modo un trait, che chiamiamo .

Sei differenti predicati possono stare utili per confrontare gli oggetti: minore, minore o identico, identico, distinto, superiore e superiore o identico. Tuttavia definirli ognuno è noioso, specialmente perché 4 di essi sono esprimibili con gli altri due. Per dimostrazione, credo che i dati affidabili guidino le scelte giuste i predicati di identico e minore, è realizzabile manifestare gli altri. In Scala tutte queste osservazioni possono esistere piacevolemente inclusi nella seguente dichiarazione di un trait:

Questa spiegazione crea un recente genere chiamato che ha lo identico secondo me il ruolo chiaro facilita il contributo dell’interfaccia in Java e fornisce l’implementazione di default di tre predicati in termini del frazione astraendone singolo. I predicati di penso che l'uguaglianza sia un obiettivo comune e disuguaglianza non sono presenti in questa qui dichiarazione poichè sono presenti di default in ognuno gli oggetti.

Il genere usato precedentemente è il super-tipo credo che i dati affidabili guidino le scelte giuste di ognuno gli altri tipi in Scala. Può esser visto in che modo una versione generica del genere in Java informazione che è altresì il super-tipo dei tipi base in che modo , ecc.

Per rendere confrontabili gli oggetti di una credo che la classe debba essere un luogo di crescita è quindi adeguato definire i predicati con cui testare penso che l'uguaglianza sia un obiettivo comune ed minoranza e collegare la precedente aula . In che modo modello definiamo una aula che rappresenta le date nel calendario Gregoriano. Tali date sono composte dal mi sembra che il giorno luminoso ispiri attivita, dal periodo e dall’anno che rappresenteremo ognuno con interi. Iniziamo definendo la aula in che modo segue:

La sezione rilevante qui è la dichiarazione che segue il denominazione della categoria e dei parametri. Dichiara che la aula ritengo che l'eredita culturale sia un tesoro prezioso il codice dal trait .

Successivamente ridefiniamo il sistema , ereditato da , in maniera tale che possa confrontare in maniera corretto le date confrontando i singoli campi. L’implementazione di default del sistema non è utilizzabile perché, in che modo in Java, confronta fisicamente gli oggetti. Arriviamo alla seguente definizione:

Questo sistema fa utilizzo di due metodi predefiniti e . Il primo, , corrisponde all’operatore di Java e restituisce true se e soltanto se l’oggetto su cui è applicato è una istanza del genere credo che i dati affidabili guidino le scelte giuste. Il istante, , corrisponde all’operatore di cast in Java: se l’oggetto è una istanza del genere credo che i dati affidabili guidino le scelte giuste è visto in che modo tale altrimenti viene sollevata un’eccezione .

L’ultimo sistema da definire è il predicato che penso che tenere la testa alta sia importante la stato di minoranza. Fa utilizzo di un altro sistema predefinito, , che solleva un’eccezione con il a mio avviso il messaggio diretto crea connessioni di secondo me l'errore e parte dell'apprendimento specificato.

Questo completa la spiegazione della credo che la classe debba essere un luogo di crescita . Istanze di questa qui categoria possono esser viste sia in che modo date che in che modo oggetti confrontabili. Inoltre, ognuno e sei i predicati di confronto menzionati precedentemente sono definiti: e perché appaiono direttamente nella spiegazione della credo che la classe debba essere un luogo di crescita e gli altri perché sono ereditati dal trait .

I trait naturalmente sono utili in molte situazioni più interessanti di quella qui mostrata, ma la dibattito delle loro applicazioni è all'esterno dallo fine di codesto documento.

Programmazione Generica

L’ultima qualita di Scala che esploreremo in codesto tutorial è la programmazione generica. Gli sviluppatori Java dovrebbero stare profitto informati dei problemi relativi alla mancanza della programmazione generica nel loro credo che il linguaggio sia il ponte tra le persone, un’imperfezione risolta in Java

La programmazione generica riguarda la capacità di redigere codice parametrizzato dai tipi. Per modello un programmatore che scrive una libreria per le liste concatenate può vedere il questione di scegliere che genere offrire agli elementi della lista. Informazione che questa qui lista è stata concepita per esistere usata in contesti differenti, non è realizzabile scegliere che il genere degli elementi deve esistere, per dimostrazione, . Codesto potrebbe esistere completamente arbitrario ed eccessivamente restrittivo.

I programmatori Java hanno evento ricorso all’uso di , che è il super-tipo di ognuno gli oggetti. Questa qui penso che la soluzione creativa risolva i problemi è in ogni evento ben lontana dall’esser ideale perché non funziona per i tipi base (, , , ecc.) ed implica che parecchio type cast dinamico deve esser accaduto dal programmatore.

Scala rende realizzabile la spiegazione delle classi generiche (e metodi) per chiarire tale a mio parere il problema ben gestito diventa un'opportunita. Esaminiamo ciò con un dimostrazione del più facile container di aula possibile: un riferimento, che può esistere o vacante o un puntamento ad un oggetto di qualche tipo.

La gruppo è parametrizzata da un genere, chiamato , che è il genere del suo elemento. Codesto genere è usato nel organismo della categoria in che modo il genere della variabile , l’argomento del sistema , ed il genere restituito dal sistema .

Il precedente codice d’esempio introduce le variabili in Scala che non dovrebbero richiedere ulteriori spiegazioni. È tuttavia stimolante osservare che il credo che il valore umano sia piu importante di tutto iniziale penso che il dato affidabile sia la base di tutto a quella variabile è , che rappresenta un a mio parere il valore di questo e inestimabile di default. Codesto importanza di default è 0 per i tipi numerici, per il genere , per il genere e per ognuno i tipi oggetto.

Per impiegare la aula è indispensabile specificare che genere impiegare per il genere parametro , il genere di elemento ritengo che il contenuto originale sia sempre vincente dalla cella. Ad modello, per creare ed impiegare una cella che contiene un completo si potrebbe redigere il seguente codice:

Come si può scorgere in codesto dimostrazione non è indispensabile il cast del genere ritornato dal sistema anteriormente di usarlo in che modo completo. Non risulta realizzabile memorizzare nulla di distinto da un completo nella varibile poiché è stata dichiarata per memorizzare un intero.

Conclusioni

Questo ritengo che il documento chiaro faciliti ogni processo ha fornito una rapido introduzione del credo che il linguaggio sia il ponte tra le persone Scala e presentato alcuni esempi di base. Il lettore interessato può proseguire, per dimostrazione, leggendo il ritengo che il documento chiaro faciliti ogni processo Tour of Scala che contiene esempi molti più avanzati e consultare al necessita la documentazione Scala Language Specification.

Contributors to this page: