Apache Groovy: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Richiesta di modifica del titolo, utile in quanto il nome "Groovy" è cambiato nel 2015 |
Aggiunti esempi delle caratteristiche principali del linguaggio e rifattorizzata la sezione versioni che riportava una lista delle minor version. Sostituita con una lista che riporta le versioni principali che introducono funzionalità sostanziali |
||
Riga 20:
|sito_web =
}}
'''Apache Groovy''' è un [[linguaggio di programmazione]] [[Programmazione ad oggetti|ad oggetti]] per la [[Piattaforma Java]] alternativo al [[Java (linguaggio di programmazione)|linguaggio Java]].
== Caratteristiche ==
Groovy usa una [[sintassi (informatica)|sintassi]] simile a quella di Java, basata su [[parentesi graffa|parentesi graffe]], viene compilato
Altre caratteristiche:
* [[Tipizzazione dinamica]] e [[Tipizzazione statica]]
* Sintassi nativa per liste, mappe ed [[espressioni regolari]]
* [[
* [[Overloading]] degli operatori
Riga 34:
;Standard Java (Java 5+)
<syntaxhighlight lang="java">
</syntaxhighlight>
;Groovy
<syntaxhighlight lang="groovy">
</syntaxhighlight>
== Getter, Setter e Visibilità ==
Rispetto a Java, Groovy consente di ridurre la dimensione del codice scritto generando automaticamente i metodi getter e setter per ogni classe e impostando la visibilità "public" di default, senza richiedere che venga specificata ogni volta.
Per creare una proprietà in sola lettura sarà sufficiente implementare il metodo getter omettendo il setter.
Un altro vantaggio è l'assenza del punto e virgola (;) come terminatore di linea.
;Standard Java (Java 5+)
<syntaxhighlight lang="java">
public class Libro {
private String titolo;
private String autore;
public void setTitolo(String valore) {
this.titolo = valore;
}
public String getTitolo() {
return this.titolo;
}
// La proprietà 'author' non ha un metodo setter
// ed è quindi in sola lettura
public String getAutore() {
return this.autore;
}
}
</syntaxhighlight>
;Groovy
<syntaxhighlight lang="groovy">
class Libro {
String titolo
String autore
// La proprietà 'autore' definisce un metodo getter esplicito
// che la rende in sola lettura
String getAutore() {
return autore
}
}
</syntaxhighlight>
== Null Safe ==
Groovy definise degli operatori di confronto che riescono a gestire valori Null senza generare una eccezione<ref>[https://docs.oracle.com/en/cloud/saas/applications-common/23d/cgsac/understanding-groovys-null-safe-comparison-operators.html#u30004087 Operatori di confronto Null-Safe]</ref>. Ad esempio:
<syntaxhighlight lang="groovy">
if (100 > null) {
// Ritorna 'true' ed eseguirà il codice nel blocco
}
if (null > 100) {
// Ritorna 'false' e NON eseguirà il codice nel blocco
}
</syntaxhighlight>
Inoltre con la "Groovy Truth"<ref>[https://groovy-lang.org/semantics.html#the-groovy-truth Groovy Truth]</ref> è possibile semplificare le espressioni che ritornano un valore booleano. Ad esempio le seguenti espressioni daranno come risultato sempre 'false':
<syntaxhighlight lang="groovy">
if (null) { ... // null -> false
if (0) { ... // 0 -> false
if ('') { ... // Blank String -> false
if ([]) { ... // Empty List -> false
if ([:]) { ... // Empty Map -> false
</syntaxhighlight>
== Traits ==
Groovy rende possibile l'ereditarietà multipla attraverso i 'traits'<ref>[https://groovy-lang.org/objectorientation.html#_traits Groovy Traits]</ref>
<syntaxhighlight lang="groovy">
trait Volatile {
void vola() {
println 'Sto volando!'
}
}
trait Quadrupede {
void trotta() {
println 'Sto trottando!'
}
}
class AnimaleFantastico implements Quadrupede, Volatile {
void parla() {
println 'Sto parlando :)'
}
}
def miniPony = new AnimaleFantastico()
miniPony.trotta()
miniPony.vola()
miniPony.parla()
Esecuzione:
Sto volando!
Sto trottando!
Sto parlando :)
</syntaxhighlight>
Riga 85 ⟶ 188:
Dopo varie [[versione beta|versioni beta]] e [[Release (informatica)|release]] candidate numerate come 1.1, il 7 dicembre [[2007]] ''Groovy 1.1 Final'' è stato pubblicato e rinumerato come Groovy 1.5, per evidenziare i grandi miglioramenti fatti rispetto alla precedente versione.
== Versioni<ref>[https://groovy-lang.org/changelogs.html Changelog delle versioni di Apache Groovy]</ref><ref>[https://groovy.apache.org/download.html#requirements Versioni JDK richieste in base alla versione di Groovy]</ref> ==
* 1.0 rilasciata a gennaio 2007, richiede JDK 1.4
* 2.0 rilasciata a giugno 2012, richiede almeno JDK 1.5 e introduce la compilazione statica e il type checking statico.
* 2.4 rilasciata a gennaio 2015, richiede almeno JDK 1.6, dalla versione 2.4.4 il linguaggio Groovy viene rilasciato dalla Apache Software Foundation e diventa Apache Groovy<ref>[https://lists.apache.org/thread/qhr2p2vfbh7fl3vn909fygh9nmg3hqgh Comunicazione ufficiale nella mailing list di sviluppo]</ref>
* Groovy 2.5 è stato rilasciato a maggio 2018, richiede almeno JDK 1.7
* Groovy 3.0 è stato rilasciato a febbraio 2020, richiede almeno JDK 1.8 e introduce un nuovo parser più flessibile (chiamato "Parrot")<ref>[https://groovy-lang.org/releasenotes/groovy-3.0.html 3.0 Release Notes]</ref>
* Groovy 4.0 è stato rilasciato a gennaio 2022, richiede almeno JDK 1.8, implementa un supporto migliorato per JPMS ed è la prima versione ad utilizzare "org.apache.groovy" come coordinata Maven<ref>[https://groovy-lang.org/releasenotes/groovy-4.0.html 4.0 Release Notes]</ref>
* Dalla versione 5.0 il requisito minimo è JDK 11 <ref>[https://groovy-lang.org/releasenotes/groovy-5.0.html 5.0 Release Notes]</ref>
== Note ==
|