2016-03-13 16 views

risposta

19

Kotlin è un linguaggio JVM, che IMO sta cercando di migliorare su Java in funzionalità e concisione, pur restando imperativo e statico. Groovy ha un concetto simile, ma ha deciso di andare dinamico. Di conseguenza, un numero di funzionalità linguistiche sarà simile.

Qui sono alcune differenze io sappia

  • statico vs dinamica: Dal momento che Groovy è stato progettato come un linguaggio dinamico, e @CompileStatic, mentre un grande annotazione (lo uso molto), è stato aggiunto dopo. La sua funzionalità sembra un po 'schiacciata, e non impone alle persone di codificare in modo statico. Non è utilizzabile ovunque (ad esempio i miei test di Spock sembrano non riuscire a compilarli). A volte persino con esso su Groovy sembra avere qualche strano comportamento dinamico di tanto in tanto. Kotlin è al 100% statico e la dinamica non è un'opzione.

Esistono molte altre funzionalità. Ti consiglierei di guardare il riferimento e potresti individuarne ancora alcuni, ad es. https://kotlinlang.org/docs/reference/

  • classi di dati - concisi con una funzione di copia (un po 'come classi case a Scala)
  • verificare la sicurezza nulla hai citato (che è un grande professionista)
  • La capacità di distruggere oggetti. val (nome, età) = persona
  • Funzioni di ordine superiore, definite come "fun doStuff (body: Int -> T)): T". Che sono molto meglio delle allegre Closure IMO. (Molto simile alla Scala di)
  • Tipo controlli e calchi intelligenti sono piacevoli: https://kotlinlang.org/docs/reference/typecasts.html
  • Companion oggetti, nello stesso modo in Scala cerca anche di rimuovere i metodi statici dalle classi, Kotlin tenta la stessa cosa.
  • Classi sigillate per limitare l'ereditarietà (di nuovo Scala ha qualcosa di simile)
  • Il sottotipo "Niente", dove tutto è un supertipo di esso. (un altro concetto cruciale in Scala).
  • quando le espressioni per la corrispondenza di base modello: https://kotlinlang.org/docs/reference/control-flow.html

Come si può vedere non prendere in prestito da altre lingue diverse Groovy. Hanno tentato di cogliere una serie di grandi caratteristiche nel tentativo di fare un buon linguaggio. Naturalmente Groovy ha la sua bontà. Ho focalizzato solo quello che Kotlin ha e non visa-versa

Un altro vantaggio è che, essendo realizzato da un produttore di IDE, il compilatore è molto veloce e ha un ottimo supporto IDE. Non sto dicendo che Groovy non ha un buon supporto, ma il mio progetto attuale richiede molto tempo per essere compilato, e il metodo refactor presuppone sempre che tu stia codificando in modo dinamico.

Ti consiglio di provare i Koan per farti un'idea di quali caratteristiche della lingua ti piacciono e di come è paragonabile a groovy (https://github.com/Kotlin/kotlin-koans).

+2

Un'altra caratteristica di Kotlin che ho trovato mancante in Groovy è denominata parametri. È possibile usare map spread per emularlo in una certa misura, ma non sembra essere un modo per combinare parametri standard con parametri nominati: 'someMethod (" foo ", 10, color: RED, verbose: true)' –

+0

"Kotlin è al 100% statico e la dinamica non è un'opzione" Kotlin ha l'inferenza di tipo (anche Golang) in modo da poter programmare in Kotlin in modo dinamico. Kotlin non può essere usato come linguaggio di scripting perché è sempre compilato e questa è la differenza principale rispetto a Groovy. –

+0

In questo caso, "statico" si riferisce alla compilazione e ai tipi determinati/bloccati in fase di compilazione. Per esempio. var s = "ciao"; s = 1; non riuscirà a compilare in Kotlin. La dinamica implica che i controlli delle informazioni sul tipo avvengano in fase di runtime.E.g. in Groovy puoi fare questo: def s = "ciao"; s = 1; def t = s + 1 e verrà compilato/eseguito correttamente. Penso che l'affermazione che kotlin sia statico è ancora corretta, anche se sia Groovy che Groovy hanno inferenza di tipo. Anche Java ha elementi di tipo inferenza, ma è sicuramente un linguaggio tipizzato in modo statico: https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html –

4

Kotlin progettato come linguaggio tipizzato staticamente, con un ottimo sistema di tipi e altri vantaggi del linguaggio tipizzato staticamente.Groovy - in primo luogo è un linguaggio tipizzato dinamicamente, e solo allora - staticamente.

Quando si attiva la compilazione statica in groovy si ottiene solo java con lo zucchero della sintassi. Dall'altra parte - Kotlin, nel loro sistema di tipi, ha due tipi di riferimenti: nullable and nonnullable, quindi è possibile scrivere codice con meno NPE. Se stai chiedendo una sola caratteristica - è così.

Seconda grande caratteristica di Kotlin - non esegue conversioni implicite, d'altra parte - groovy converte implicitamente da doppio a bigdecimal e così via.

Ma Kotlin ha molte altre caratteristiche, come smart casts, ADT (doc), type-safe builders, astrazioni a costo zero e, infine, un grande supporto IDE.

Anche io non sono sicuro di qualità di tipo-deduzione di Groovy (in chiusure per esempio, abbiamo bisogno additional annotations, meh), ma in Kotlin tipo di inferenza lavoro come un fascino, senza annotazioni in ogni pace della lingua.

Compilazione così statisticamente scritta in Kotlin - cittadino di prima classe, in Groovy - not.

+0

Kotlin ha un'inferenza di tipo (anche Golang lo ha) quindi tu può programmare in Kotlin in modo dinamico. Kotlin non può essere usato come script, linguaggio interpretato perché è sempre compilato e questa è la differenza principale rispetto a Groovy. –

+0

Groovy è un linguaggio dinamico, quindi l'inferenza di tipo è integrata nel core del linguaggio. Dovresti saperlo. Ciò è implicito nella definizione del linguaggio digitato dinamico. –

+0

@MarekMarczak cosa intendi per tipo di inferenza? In groovy hai tipi dinamici e conosci il tipo solo in runtime (in molti casi). Anche in groovy ci sono cose come "metodo mancante" che è abusato di gradle. – IRus

Problemi correlati