Apache Groovy: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
SunBot (discussione | contributi)
m Bot: Standardizzo interwiki
m quel che esce da wikidata è chairamente peggio
 
(66 versioni intermedie di 42 utenti non mostrate)
Riga 1:
{{Nota disambigua|l'album di [[Red Garland]]|Groovy (album)|Groovy}}
{{W|informatica|dicembre 2007}}
{{Linguaggio di programmazione
{{s|informatica}}
|nome = Apache Groovy
'''Groovy''' è un [[Linguaggio_di_programmazione|linguaggio di programmazione]] [[Programmazione ad oggetti|ad oggetti]] per la [[Piattaforma_Java|Piattaforma Java]] come alternativa al [[Java_(linguaggio)|linguaggio Java]]. Può essere visto come [[Linguaggio_di_scripting|linguaggio di scripting]] per la Piattaforma Java, presenta caratteristiche simili a quelle di [[Python]], [[Ruby]], [[Perl]], e [[Smalltalk]]. A volte ci si riferisce a Groovy con il nome alternativo di JSR 241.
|immagine = Groovy-logo.svg
|didascalia =
|autore = Guillaume Laforge
|data = [[2003]]
|versione =
|utilizzo = [[General purpose]]
|paradigmi = [[Programmazione orientata agli oggetti|Orientato agli oggetti]], [[Programmazione imperativa|imperativa]], [[Linguaggio di scripting|scripting]]
|tipizzazione = [[Tipizzazione forte|Forte]], [[Tipizzazione dinamica|Dinamica]]
|specifiche =
|estensione =
|influenzato_da = [[Java (linguaggio di programmazione)|Java]], [[Python]], [[Ruby (linguaggio di programmazione)|Ruby]], [[Perl]], [[Smalltalk]], [[Objective-C]]
|ha_influenzato =
|implementazione_riferimento =
|sistema_operativo = [[Multipiattaforma]]
|lingua =
|licenza = [[Licenza Apache|Apache]] v. 2.0
|sito_web =
}}
'''Apache Groovy''', fino al 2015 solo '''Groovy''', è un [[linguaggio di programmazione]] [[Programmazione a oggetti|a oggetti]] per la [[Piattaforma Java]] alternativo al [[Java (linguaggio di programmazione)|linguaggio Java]]. È un linguaggio sia statico che dinamico, può quindi essere utilizzato sia come linguaggio di programmazione che come [[linguaggio di scripting]]. Presenta caratteristiche simili a quelle di [[Python]], [[Ruby (linguaggio di programmazione)|Ruby]] e [[Smalltalk]]. A volte ci si riferisce a Groovy con il nome alternativo di ''JSR 241''.
 
== Caratteristiche ==
Groovy usa una sintassi simile a quella di Java basata su parentesi graffe, e viene compilato dinamicamente in [[bytecode]] per la [[Macchina_virtuale_Java|Java Virtual Machine]], ed interagisce in modo trasparente con altro codice Java e con le librerie esistenti. Il compilatore di Groovy può essere usato per generare bytecode Java standard che può quindi essere usato da qualsiasi progetto Java. Groovy può anche venire usato come linguaggio di scripting dinamico.
Groovy usa una [[sintassi (informatica)|sintassi]] simile a quella di Java, basata su [[parentesi graffa|parentesi graffe]], viene compilato in [[bytecode]] per la [[Macchina virtuale Java|Java Virtual Machine]], ed interagisce in modo trasparente con altro codice Java e con le librerie esistenti. Il [[compilatore]] di Groovy può essere usato per generare bytecode Java standard che può quindi essere usato da qualsiasi progetto Java. Groovy può anche venire usato come linguaggio di scripting dinamico.
 
Altre caratteristiche:
Dopo varie versioni beta e release candidate numerate come 1.1, il 7 dicembre 2007 Groovy 1.1 Final è stato rilasciato e rinumerato come Groovy 1.5, per evidenziare i grandi miglioramenti fatti rispetto alla precedente versione.
* [[Tipizzazione dinamica]] e [[Tipizzazione statica]]
* Sintassi nativa per liste, mappe ed [[espressioni regolari]]
* [[Closure (informatica)|Chiusure]]
* [[Overloading]] degli operatori
 
== Confronto della sintassi ==
==Caratteristiche del Linguaggio==
;Standard Java (Java 5+)
<syntaxhighlight lang="java">
for (String item : new String [] {"Rod", "Carlos", "Chris"}) {
if (item.length() <= 4) System.out.println(item);
}
</syntaxhighlight>
 
;Groovy
* [[Tipizzazione_Dinamica|Tipizzazione dinamica]]
<syntaxhighlight lang="groovy">
* Sintassi nativa per liste, mappe ed espressioni regolari
["Rod", "Carlos", "Chris"].findAll { it.size() <= 4 }.each { println it }
* [[Chiusura_(informatica)|Chiusure]]
</syntaxhighlight>
* Overloading degli operatori
 
== Getter, setter e visibilità ==
==Confronto della Sintassi==
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.
'''Standard Java (Java 5+)'''
<source lang="java">
for (String item : new String [] {"Rod", "Carlos", "Chris"}) {
if (item.length() <= 4) System.out.println(item);
}
</source>
 
Per creare una proprietà in sola lettura sarà sufficiente implementare il metodo getter omettendo il setter.
'''Groovy'''
<source lang="groovy">
["Rod", "Carlos", "Chris"].findAll{it.size() <= 4}.each{println it}
</source>
<!--
class Foo {
def doSomething() {
def data = ["name": "James", "___location": "London"]
for (e in data) {
println("entry ${e.key} is ${e.value}")
}
}
def closureExample(collection) {
collection.each { println("value ${it}") }
}
static void main(args) {
def values = [1, 2, 3, "abc"]
def foo = new Foo()
foo.closureExample(values)
foo.doSomething()
}
}
-->
 
Un altro vantaggio è l'assenza del punto e virgola (;) come terminatore di linea.
==Supporto per Linguaggi Markup==
 
;Standard Java (Java 5+)
Una caratteristica di Groovy che vale la pena sottolineare è il suo supporto nativo per vari linguaggi di markup come [[XML]] ed [[HTML]]. Questa caratteristica permette di definire e manipolare molti tipi di dati eterogenei con una sintassi ed una metodologia di programmazione uniformi. Per esempio:
<syntaxhighlight lang="java">
public class Libro {
 
private String titolo;
'''il seguente codice Groovy ... '''
private String autore;
<source lang="groovy">
 
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>
 
== Supporto per linguaggi markup ==
Una caratteristica di Groovy che vale la pena sottolineare è il suo supporto nativo per vari [[linguaggio di markup|linguaggi di markup]] come [[XML]] ed [[HTML]]. Questa caratteristica permette di definire e manipolare molti tipi di dati eterogenei con una sintassi ed una metodologia di programmazione uniformi.
 
Per esempio il seguente codice Groovy:
<syntaxhighlight lang="groovy">
 
import groovy.xml.MarkupBuilder
Riga 68 ⟶ 166:
}
println myXMLDoc
</syntaxhighlight>
</source>
 
'''... produceProduce questo XML:'''
<sourcesyntaxhighlight lang="xml">
 
<workbook>
Riga 83 ⟶ 181:
</worksheet>
</workbook>
</syntaxhighlight>
</source>
 
== Storia ==
James Strachan parlò per la prima volta dello sviluppo di Groovy sul suo blog nell'agosto [[2003]]<ref>{{Cita web |lingua=en |url=http://radio.weblogs.com/0112098/2003/08/29.html blog]|titolo=James nellStrachan'Agostos Weblog |urlarchivio=https://web.archive.org/web/20070405085722/http://radio.weblogs.com/0112098/2003/08/29.html }}</ref>. Diverse versioni furono rilasciatepubblicate tra il [[2004]] ed il [[2006]]. Dopo l'inizio del processo di standardizzazione [[Java Community Process|JCP]], la numerazione delle versioni fu cambiata e la versione chiamata "1.0" fu rilasciatapubblicata nel Martedìmartedì 2 gennaio [[2007]].
 
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.
==Voci correlate==
* [[Grails]] Un framework web basato su Groovy
 
== 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> ==
== Collegamenti esterni ==
* 1.0 uscita a gennaio 2007, richiede JDK 1.4
* 2.0 uscita a giugno 2012, richiede almeno JDK 1.5 e introduce la compilazione statica e il type checking statico.
* 2.4 uscita a gennaio 2015, richiede almeno JDK 1.6, dalla versione 2.4.4 il linguaggio Groovy viene pubblicato 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 è uscito a maggio 2018, richiede almeno JDK 1.7
* Groovy 3.0 è uscito 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 è uscito a gennaio 2022, richiede almeno JDK 1.8, implementa un supporto migliorato per JPMS ed è la prima versione a 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 ==
*[http://groovy.codehaus.org/ Sito Ufficiale]
<references/>
*[http://www.jcp.org/en/jsr/detail?id=241 JSR 241]
*[http://www-128.ibm.com/developerworks/java/library/j-alj08034.html An introduction to Groovy]
*[http://www.techbookreport.com/tutorials/groovy_derby_01.html Groovy and Apache Derby database - tutorial]
*[http://dmoz.org/Computers/Programming/Languages/Java/Extensions/Groovy/ Open Directory: Java: Extensions: Groovy]
 
== Voci correlate ==
[[Categoria:Linguaggi di programmazione]]
* [[Grails]], framework web basato su Groovy
* [[ManyDesigns Portofino]], web framework basato su Groovy
* [[Gradle]], sistema di build automation basato su Groovy
 
== Altri progetti ==
{{interprogetto}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|1=http://groovy.codehaus.org/|2=Sito ufficiale|lingua=en|accesso=17 dicembre 2007|urlarchivio=https://web.archive.org/web/20140302111159/http://groovy.codehaus.org/|dataarchivio=2 marzo 2014|urlmorto=sì}}
* {{cita web|url=https://www.jcp.org/en/jsr/detail?id=241|titolo=JSR 241|lingua=en}}
* {{cita web|https://www.ibm.com/developerworks/java/library/j-alj08034.html|An introduction to Groovy|lingua=en}}
 
{{Controllo di autorità}}
[[ca:Groovy]]
{{portale|informatica}}{{DEFAULTSORT:Apache Groovy}}
[[cs:Groovy]]
[[Categoria:Linguaggi di programmazione orientati agli oggetti]]
[[de:Groovy]]
[[Categoria:Linguaggi di scripting]]
[[en:Groovy (programming language)]]
[[Categoria:Linguaggi per JVM]]
[[es:Groovy (Lenguaje de Programación)]]
[[Categoria:Linguaggi di programmazione imperativi]]
[[fr:Groovy (langage)]]
[[ja:Groovy]]
[[ka:გრუვი]]
[[ko:그루비 (프로그래밍 언어)]]
[[nl:Groovy]]
[[pl:Groovy]]
[[pt:Groovy]]
[[ru:Groovy]]
[[th:ภาษากรูวี]]
[[tr:Groovy]]
[[zh:Groovy]]