Come configurare smartphone e PC. Portale informativo
  • casa
  • Errori
  • Nuovo linguaggio di programmazione Kotlin. Perché Kotlin è così amato da Google e chi ha bisogno di duemila linguaggi di programmazione

Nuovo linguaggio di programmazione Kotlin. Perché Kotlin è così amato da Google e chi ha bisogno di duemila linguaggi di programmazione

Il linguaggio di programmazione Kotlin, sviluppato dall'azienda JetBrains di San Pietroburgo, è diventato il linguaggio di sviluppo ufficiale per Android. Questo è stato annunciato ufficialmente alla conferenza I/O di Google. Il team di Kotlin è guidato dal laureato dell'Università ITMO Andrey Breslav. Perché Kotlin è così amato dal colosso IT tra molti altri linguaggi "giovani", come e perché compaiono in generale nuovi linguaggi di programmazione, leggete nei commenti degli esperti e nella raccolta di informazioni ITMO.NEWS.

Come vengono sviluppati i linguaggi di programmazione

Secondo varie stime, nel mondo esistono già più di duemila linguaggi di programmazione diversi. Vengono rilasciati costantemente aggiornamenti per le vecchie lingue e compaiono anche nuove lingue. Quando la sintassi di una lingua non cambia, ma diventa solo più complessa e ampliata, allo sviluppatore basta un po' di pratica per continuare a scrivere nella sua lingua preferita. A volte la struttura del linguaggio stesso cambia, e quindi il programmatore a volte deve imparare di nuovo, adattandosi al linguaggio aggiornato. Di solito, la transizione verso una nuova struttura avviene gradualmente e in parti, ovvero solo il 10-20% del codice del programma inizia a essere scritto utilizzando la nuova lingua.

« I programmatori non erano completamente soddisfatti dei linguaggi C++ e Java, perché sono linguaggi piuttosto complessi e il primo è più difficile del secondo. Pertanto è apparso il linguaggio Scala, che piace a molti programmatori, ma è anche molto complesso. La vasta esperienza di JetBrains nella creazione di strumenti di sviluppo di programmi per vari linguaggi di programmazione gli ha permesso di creare in sette anni il linguaggio Kotlin, che è completamente compatibile con Java, ma più semplice e conveniente di esso. I linguaggi di programmazione vengono costantemente sviluppati; nessuno si pone più il compito di creare un linguaggio universale. Nonostante ciò, ogni lingua è più efficace in un determinato ambito in cui viene utilizzata più spesso. C'è anche una direzione nella creazione delle lingue quando vengono sviluppate per un argomento specifico", ha commentato il capo del Dipartimento di Tecnologia di Programmazione dell'Università ITMO.


Oggi alcune aziende compilano addirittura le proprie valutazioni linguistiche. Ad esempio, la società TIOBE, specializzata nella valutazione della qualità dei software, dal 2001 calcola mensilmente l'indice di popolarità di alcune lingue. L'elenco generato contiene 50 righe e affinché un linguaggio di programmazione venga incluso nell'indice, gli sviluppatori devono scrivere una lettera corrispondente all'azienda. Il calcolo si basa sui dati di 25 motori di ricerca Internet. Finora Java è in testa alla classifica con un ampio margine, seguito da C. Allo stesso tempo, i compilatori dell'elenco sottolineano che nell'ultimo anno entrambi i linguaggi di programmazione sono diventati meno popolari, di circa il 6%. Allo stesso tempo, TIOBE mostra che il C era il linguaggio numero 1 fino al 2002, e Java era al 14° posto nel 1997, ma cinque anni dopo ha sostituito il C al primo posto.

Puoi tenere un'ottima conferenza sulla storia dello sviluppo delle lingue: il curatore dei programmi accademici di Yandex, direttore del centro per i concorsi studenteschi presso la Facoltà di Informatica della Scuola Superiore di Economia, parla di come le lingue C , PHP, Ruby e Java sono comparsi. Michail Gustokashin. Il docente sottolinea che per ogni compito dovrebbe essere scelto un linguaggio di programmazione diverso. Ad esempio, dice che per l'industria militare è meglio scrivere nel buon vecchio Pascal, una lingua nata nel 1970! Perché? Perché è più affidabile. Le applicazioni aziendali possono essere scritte in Java perché anche questo linguaggio è abbastanza affidabile, ma molto più facile da usare. L'esperto sottolinea inoltre che è importante mantenere vivo l'interesse per il linguaggio tra i programmatori creando una comunità di sviluppatori che scrivono in questo linguaggio. Se viene creata un’infrastruttura attorno a una nuova lingua e le persone si riuniscono per usarla, solo allora la lingua diventerà popolare. A proposito, anche gli sviluppatori di Kotlin hanno adottato questa strategia.

Un po' di Kotlin

Il linguaggio di programmazione Kotlin ha iniziato a essere sviluppato presso la società JetBrains di San Pietroburgo nel 2010. La versione ufficiale del prodotto è stata rilasciata nel 2016. La lingua ha ricevuto questo nome in onore dell'isola nel Golfo di Finlandia su cui si trova Kronstadt. Per un'interessante coincidenza, il nome della popolare lingua Java è anche il nome di un'isola dell'Indonesia. Probabilmente la coincidenza non è casuale. Come affermato nel comunicato stampa, Kotlin dovrebbe funzionare ovunque venga eseguito Java e uno degli obiettivi era creare un prodotto che potesse essere utilizzato in progetti misti creati in diverse lingue.


Come notano gli autori di Kotlin, la cosa più importante per loro era creare un prodotto “pragmatico”. Ciò significa che non si concentravano solo sulla correzione dei bug e sul miglioramento del prodotto, cosa che farebbe qualsiasi programmatore, ma volevano creare uno strumento utile.

« Gli strumenti di sviluppo, inclusi i linguaggi di programmazione, sono in continua evoluzione. Le lingue differiscono dagli altri strumenti in quanto sono piuttosto difficili da sviluppare evolutivamente. La nuova versione del linguaggio deve supportare tutti i programmi esistenti. Ciò limita le possibilità di sviluppo delle lingue esistenti e crea la necessità dell'emergere di nuove. Il fattore che determina il successo di un nuovo linguaggio di programmazione è, innanzitutto, la comodità per gli sviluppatori. Oltre ad essere conciso ed espressivo, Kotlin è altamente compatibile con il codice Java: puoi utilizzare tutte le librerie esistenti e persino mescolare codice in due lingue in un unico progetto, quindi non ci sono particolari difficoltà di transizione", ha commentato il project manager Kotlin presso JetBrains, laureato all'Università ITMO.

Perché Google ha amato Kotlin

Sul sito ufficiale gli sviluppatori Android scrivono di aver osservato la “ascesa” di Kotlin negli ultimi anni. I googler non sono timidi nel descrivere il linguaggio come impressionante, conciso, stimolante e piacevole con cui lavorare. Ha aumentato la produttività: il codice del programma in esso contenuto è in media più breve del 40% rispetto ad altri linguaggi e Kotlin consente anche di evitare alcuni errori nel codice. Uno dei fattori determinanti per la popolarità di Kotlin presso Google è stata la sua compatibilità con Java, che viene già utilizzato nello sviluppo di applicazioni per Android.

Ora, quando i programmatori iniziano a creare una nuova applicazione nell'ambiente di sviluppo ufficiale di Android Studio, possono immediatamente abilitare il plug-in "Supporto Kotlin". Puoi anche convertire righe di codice già create in altre lingue nella lingua Kotlin, inserire blocchi in altre lingue in righe di codice in Kotlin. In futuro verranno sviluppate più librerie e strumenti per la lingua, verranno sviluppati più materiali formativi e sarà più facile trovare soluzioni a possibili problemi.

« La mancanza di garanzie di supporto linguistico da parte di Google ha scoraggiato molti sviluppatori dal passare a Kotlin. Anche se ti piace davvero la lingua,Un programmatore pensa sempre al rischio che ad un certo punto questo linguaggio smetta semplicemente di funzionare. Ora c'è la garanzia che Kotlin non smetterà di funzionare e prevediamo che il numero di utenti della lingua aumenterà notevolmente. Sarebbe naturale supporre che molte aziende alla fine passeranno completamente a Kotlin, anche se tecnicamente nulla le obbliga a farlo, è semplicemente una questione di preferenza“- ha sottolineato Andrey Breslav.

Ha aggiunto che Kotlin viene sviluppato molto attivamente. Il team di sviluppo sta attualmente lavorando sul sistema di compilazione, sulla velocità di compilazione, sul miglioramento delle prestazioni dell'IDE, sull'aggiunta di nuove funzionalità al toolkit, comprese quelle relative all'integrazione in Android Studio. Sono in corso anche lavori su progetti multipiattaforma (capacità di compilare lo stesso codice per diverse piattaforme) e una serie di miglioramenti linguistici sono in fase di progettazione.


Google ha inoltre sottolineato di ispirarsi al concetto del linguaggio Kotlin, secondo il quale esso è sempre stato e rimarrà gratuito per gli sviluppatori, cioè un progetto open source. Ciò significa che il linguaggio non è legato a nessuna azienda in particolare e il codice sorgente è distribuito con licenza gratuita. È possibile scaricare il prodotto. Per supportare lo sviluppo di Kotlin, Google e JetBrains creeranno una partnership senza scopo di lucro. Inoltre, come parte della “missione” di Android, è molto importante che gli autori di Kotlin creino attorno al loro prodotto una comunità di persone che siano professionalmente coinvolte nello sviluppo in questo linguaggio e amino condividere la loro esperienza. Ad esempio, a novembre negli Stati Uniti si terrà la conferenza Kotlin e gli sviluppatori potranno anche ricevere quotidianamente notizie e suggerimenti sul prodotto software e incontrarsi a livello locale.

A proposito, il progetto Android Studio stesso è stato sviluppato sulla base dell'ambiente di sviluppo software IntelliJ IDEA, anch'esso creato da JetBrains. Ma nonostante la stretta collaborazione, l'azienda di San Pietroburgo sottolinea che non si parla di vendita di JetBrains al colosso americano dell'informatica. Allo stesso tempo, Koltin non sarà progettato solo per Android. L'obiettivo dell'azienda è rendere il linguaggio di programmazione adatto a diverse piattaforme di sviluppo.

Questo articolo parla del linguaggio di programmazione Kotlin. Imparerai le ragioni dell'emergere del progetto, le capacità della lingua e vedrai diversi esempi. L'articolo è stato scritto principalmente con l'aspettativa che il lettore abbia familiarità con il linguaggio di programmazione Java, tuttavia anche chi conosce un'altra lingua potrà farsi un'idea dell'argomento. L'articolo è superficiale e non affronta le problematiche legate alla compilazione in javascript. Puoi trovare la documentazione completa sul sito ufficiale del progetto, ma proverò a parlare brevemente del linguaggio.

sul progetto

Non molto tempo fa, JetBrains, un'azienda che crea ambienti di sviluppo, ha annunciato il suo nuovo prodotto: il linguaggio di programmazione Kotlin. Un'ondata di critiche ha colpito l'azienda: i critici hanno suggerito che l'azienda tornasse in sé e completasse il plugin per Scala, invece di sviluppare un proprio linguaggio. Agli sviluppatori Scala manca davvero un buon ambiente di sviluppo, ma i problemi degli sviluppatori di plugin sono comprensibili: Scala, che è nata grazie a ricercatori svizzeri, ha incorporato molti concetti e approcci scientifici innovativi, il che ha reso la creazione di un buon strumento di sviluppo un compito estremamente difficile . Al momento, il segmento dei moderni linguaggi tipizzati staticamente per la JVM è piccolo, quindi la decisione di creare il proprio linguaggio insieme a un ambiente di sviluppo sembra molto lungimirante. Anche se questo linguaggio non mette affatto radici nella comunità, JetBrains lo realizza principalmente per le sue esigenze. Qualsiasi programmatore Java può comprendere queste esigenze: Java come linguaggio si sta sviluppando molto lentamente, nel linguaggio non compaiono nuove funzionalità (aspettiamo funzioni di primo ordine già da diversi anni), la compatibilità con le versioni precedenti del linguaggio lo rende È impossibile che molte cose utili appaiano nel prossimo futuro (ad esempio, una parametrizzazione di tipo decente). Per un'azienda che sviluppa software, il linguaggio di programmazione è il principale strumento di lavoro, quindi l'efficienza e la semplicità del linguaggio sono indicatori da cui dipende non solo la facilità di sviluppo di strumenti, ma anche i costi di codifica del programmatore, ad es. essere quello di mantenere questo codice e capirlo.

A proposito della lingua

La lingua è tipizzata staticamente. Ma rispetto a Java, il compilatore Kotlin aggiunge informazioni al tipo sulla possibilità che il riferimento contenga null, il che rafforza il controllo del tipo e rende l'esecuzione più sicura:

Divertente foo(text:String) ( println(text.toLowerCase()) // NPE? No! ) val str:String? = null // Stringa? -- tipo nullable foo(str) //<- компилятор не пропустит такой вызов -- // тип str должен быть String, чтобы // передать его в foo

Nonostante questo approccio possa salvare il programmatore da una serie di problemi associati a NPE, per un programmatore Java all'inizio sembra non necessario: è necessario eseguire controlli o conversioni non necessari. Ma dopo un po' di tempo di programmazione in Kotlin, tornando a Java, senti che ti mancano queste informazioni sul tipo e pensi di usare le annotazioni Nullable/NotNull. A questo si riferiscono i problemi di compatibilità con le versioni precedenti con Java: queste informazioni non sono nel bytecode Java, ma per quanto ne so, questo problema è ancora in fase di risoluzione e per ora tutti i tipi provenienti da Java sono annullabili.

A proposito, riguardo alla compatibilità con le versioni precedenti: Kotlin è compilato nel bytecode JVM (i creatori del linguaggio dedicano molti sforzi al mantenimento della compatibilità), che gli consente di essere utilizzato nello stesso progetto con Java e la possibilità di utilizzare reciprocamente Java e le classi Kotlin rendono la soglia per introdurre Kotlin in un grande progetto Java esistente molto minimale. Importante a questo proposito è la possibilità di utilizzare più sviluppi Java creando un progetto interamente in Kotlin. Ad esempio, è stato quasi facile per me realizzare un piccolo progetto basato su spring-webmvc.

Diamo un'occhiata al frammento del controller:

Path(array("/notes/")) classe controller NotesController ( private autowired val notesService: NotesService? = null path(array("all")) fun all() = render("notes/notes") ( addObject(" note", notesService!!.all) ) //... )

Le peculiarità dell'uso delle annotazioni in Kotlin sono visibili: in alcuni punti non sembra così pulito come in Java (questo vale per casi speciali, ad esempio, un array di un elemento), ma le annotazioni possono essere usate come parole chiave "fatte in casa" come come autowired o controller (se si specifica un tipo di alias durante l'importazione) e in termini di funzionalità, le annotazioni sono più vicine alle classi reali.

Va notato che Spring non è stata in grado di eseguire il wrapper delle classi Kotlin per gestire le transazioni: spero che ciò sia possibile in futuro.

Il linguaggio supporta funzioni di prima classe. Ciò significa che una funzione è un tipo integrato nel linguaggio per il quale esiste una sintassi speciale. Le funzioni possono essere create localmente, passate come parametri ad altre funzioni e i riferimenti ad esse memorizzati:

Divertimento faiSomething(thing:()->Unit) ( // dichiara un parametro di tipo function // ()->Unit non accetta nulla e // non restituisce nulla di importante thing() // chiama ) doSomething() ( // e qui al volo creiamo una funzione di tipo // ()->Unit e la passiamo alla funzione doShomething // se la funzione è l'ultimo parametro puoi // spostarla fuori dalle parentesi di chiamata println("Ciao mondo ") )

Se a questa estensione aggiungiamo funzioni che ci consentono di estendere una classe già esistente utilizzando un metodo che non viola l'incapsulamento della classe, ma a cui è possibile accedere come metodi di questa classe, otterremo un meccanismo abbastanza potente per estendere librerie Java standard che sono piuttosto scarse in termini di praticità. Per tradizione, aggiungiamo la possibilità di filtrare l'elenco già esistente nella libreria standard:

Divertimento Elenco .filter(condizione:(T)->Booleano):Elenco (val risultato = lista () for(elemento in questo) ( if(condizione(elemento)) risultato.add(elemento) ) restituisce risultato ) val unaLista = lista(1, 2, 3, 4).filter ( it > 2 ) // unaLista= =

Tieni presente che le variabili non hanno tipi specificati: il compilatore Kotlin li deduce se possibile e non interferisce con la comprensibilità dell'interfaccia. In generale, il linguaggio è progettato in modo tale da evitare il più possibile a chi sta alla tastiera di digitare caratteri non necessari: sintassi breve ma chiara con un minimo di parole chiave, nessuna necessità di punto e virgola per separare le espressioni, inferenza di tipo dove appropriato , nessuna nuova parola chiave per creare la classe: solo ciò che è necessario.

Per illustrare l'argomento delle classi e della brevità, diamo un'occhiata al seguente codice:

// la creazione delle classi bean diventa // laconica, i campi possono essere dichiarati // direttamente nella dichiarazione del costruttore class TimeLord(val name:String) // la classe potrebbe non avere affatto un corpo class TARDIS(val proprietario:TimeLord) fun main (argomenti:Array ) ( val medico = TimeLord("Dottore") val tardis = TARDIS(dottore) println(tardis.proprietario.nome) )

In poche righe siamo riusciti a dichiarare due classi, creare due oggetti e stampare il nome del proprietario del TARDIS! Si può notare che la classe viene dichiarata con i parametri del suo unico possibile costruttore, che sono anche la dichiarazione delle sue proprietà. Estremamente breve, ma informativo. Sicuramente ci sarà chi condannerà l'impossibilità di dichiarare più di un costruttore, ma mi sembra che questo abbia il suo pragmatismo - dopo tutto, diversi costruttori in Java ti permettono di dichiarare parametri predefiniti, che Kotlin supporta nel linguaggio level, o converti un tipo in un altro, con cui funzionerà questa classe, e questo può già essere tranquillamente lasciato al metodo factory. Prestare attenzione alla dichiarazione delle “variabili” e dei campi. Kotlin ci costringe a fare una scelta: val o var . Dove val dichiara un riferimento finale immutabile e var dichiara una variabile, il che aiuta a evitare l'uso diffuso di riferimenti mutabili.

Esempio

Ora siamo arrivati ​​al punto in cui possiamo fare qualcosa di più interessante. Durante le interviste, spesso do il compito di realizzare un albero, attraversarlo e determinare alcune azioni con un elemento. Vediamo come viene implementato in Kotlin.

Questo è come vorrei che fosse l'utilizzo:

Divertente main(argomenti: Array ) ( // crea un piccolo albero val tree= tree("root") ( node("1-1") ( node("2-1") node("2-2") ) node("1-2 " ) ( node("2-3") ) ) // attraversalo e stampa i valori sull'albero della console.traverse ( println(it) ) )

Ora proviamo a implementarlo. Creiamo una classe di nodi dell'albero:

/** * @param valore dati del nodo */ class Node (val valore:T) ( // nodo figli privato val figli:List > = arrayList() /** * Metodo che crea e aggiunge un figlio a un nodo * @param value il valore per il nuovo nodo * @param funzione init per inizializzare il nuovo nodo, opzionale * parametro */ fun node(value: T, init:Nodo .()->Unità = ()):Nodo (val nodo = Nodo (value) node.init() children.add(node) return node ) /** * Il metodo attraversa ricorsivamente tutti i nodi figlio a partire dal * nodo stesso, a ciascun nodo viene notificato un gestore * @param handler gestore della funzione per il valore di ciascun nodo */ fun traverse(handler:(T)->Unit) ( handler(value) children.forEach ( child -> child.traverse(handler) ) ) )

Ora aggiungiamo una funzione per creare la parte superiore dell'albero:

/** * Crea un nodo dell'albero con valore valore e inizializza * i suoi figli con il metodo init. */ divertimento tree(valore:T, init:Node .()->Unità): Nodo ( val node = Node(value) // chiama il metodo init passato nel // parametro sull'oggetto nodo node.init() return node )

In due punti del codice è stata utilizzata una costruzione come Node.()->Unit, il cui significato è che come input è previsto un tipo di funzione, che verrà eseguita come metodo di un oggetto di tipo Node. Dal corpo di questa funzione si accede ad altri metodi di questo oggetto, come il metodo Node.node(), che permette di eseguire l'inizializzazione dell'albero simile a quella descritta nell'esempio.

Invece di una conclusione

Grazie alla sua buona compatibilità con Java e alla capacità di sostituire gradualmente il vecchio codice, in futuro Kotlin potrebbe diventare un buon sostituto di Java in progetti di grandi dimensioni e uno strumento conveniente per creare piccoli progetti con la prospettiva del loro sviluppo. La semplicità del linguaggio e la sua flessibilità offrono allo sviluppatore maggiori opportunità di scrivere codice veloce ma di alta qualità.

Se sei interessato alla lingua, tutte le informazioni sulla lingua possono essere trovate sul sito ufficiale del progetto, le loro fonti possono essere trovate su github e qualsiasi errore trovato può essere pubblicato nell'Issue Tracker. Ci sono ancora molti problemi, ma gli sviluppatori del linguaggio li stanno combattendo attivamente. Ora il team sta lavorando sulla versione ancora non molto stabile della pietra miliare 3, dopo la stabilizzazione, per quanto ne so, è previsto l'utilizzo del linguaggio all'interno dell'azienda JetBrains, dopodiché è già prevista la prima versione.

Tag: aggiungi tag

Nel 2010, un gruppo di sviluppatori della filiale russa di JetBrains ha deciso di sviluppare un linguaggio che fosse più conveniente e sicuro rispetto ai tipi di Java, ma non così complesso come Scala. Il nome di questa lingua è stato dato in onore dell'isola di Kotlin, situata nel Golfo di Finlandia (per analogia con Giava, da cui prende anche il nome l'isola).

Se guardi una panoramica moderna dei linguaggi di programmazione più promettenti, incluso, troverai sicuramente Kotlin lì. Qual è l'essenza di questa lingua, perché piace così tanto a tutti, quali prospettive ha - ne parleremo più avanti.

Sintassi

L'idea di creare un linguaggio che sia ugualmente conveniente sia per i principianti che per gli sviluppatori esperti è espressa direttamente nella sua sintassi. Come ogni analogo moderno, Kotlin è estremamente conciso, compatto e comprensibile. Un'enorme quantità di codice che prima doveva essere scritta in Java ora può essere semplicemente ignorata. Un semplice esempio: l'uso del punto e virgola per separare le istruzioni non è un requisito: il compilatore ora capisce tutto da solo se si passa a una nuova riga. Quando si dichiarano le variabili, in molti casi non è necessario specificarne il tipo: verrà determinato automaticamente.

Allo stesso tempo, va detto che Kotlin, in termini di registrazione, è tornato un po' allo stile Pascal: anche qui la chiarezza prevale sulla chiarezza delle strutture. Puoi leggere qualcosa in più a riguardo in questo breve articolo. Copre solo i principi di base della costruzione dei linguaggi Java e Kotlin, quindi sarà comprensibile a tutti.

Tuttavia, lasceremo comunque un piccolo pezzo di codice:

divertente main(argomenti: Array ) {
ambito val = "mondo"
println("Ciao $scope!")
}

Una voce estremamente semplice che dovrebbe essere comprensibile a chiunque abbia studiato programmazione a scuola o all'università per almeno un anno.

È importante ricordare che Kotlin è completamente compatibile con Java. Ecco perché all'inizio veniva considerato un semplice zucchero sintattico, utilizzato per compiti complessi in cui si voleva semplicemente risparmiare tempo e fatica.

Vantaggi

In generale, tutti i vantaggi rispetto a Java sono già stati menzionati, quindi li raccoglieremo in un unico posto:

    Volume del codice. Non utilizzare pezzi di codice arcaici non necessari accelera il processo di sviluppo e aumenta la leggibilità;

    Sicurezza. Le regole per la creazione del codice incorporate nella sintassi del linguaggio consentono di evitare piccoli errori difficili da tracciare che si verificano solo durante l'esecuzione del programma;

    Compatibilità con Java. Ciò è conveniente sia dal punto di vista dell'apprendimento di una nuova lingua, sia dal punto di vista del trasferimento graduale dei propri prodotti software da Java a Kotlin. Ad esempio, questo è esattamente quello che è successo con l'applicazione Basecamp.

Screpolatura

Essendo un linguaggio sviluppato sulla base di Java, Kotlin presenta due evidenti svantaggi in confronto: velocità ed elaborazione. Nel primo caso tutto è chiaro: lavorando sulla JVM è difficile battere Java in termini di prestazioni. Il secondo problema è un po’ inverosimile per una lingua così giovane, perché è in circolazione ufficiale da poco più di un anno. Sì, qui ci sono molti meno strumenti e librerie che in Java. Ma, in primo luogo, questo non è ancora fondamentale e, in secondo luogo, nel mondo Java la quantità non si è sempre tradotta in qualità.

Kotlin, per ora, fa fronte ai suoi compiti principali e la piena compatibilità con Java aiuta a chiudere gli occhi su queste lacune.

Prospettive

Nonostante lo sviluppo di Kotlin sia iniziato nel 2010, la prima versione ufficiale è stata rilasciata solo nel febbraio 2016. Da allora, la richiesta per la lingua è cresciuta rapidamente, nella classifica TIOBE è entrata nella TOP-50 entro un anno , e il mese scorso alla conferenza Google I /O ha annunciato il supporto ufficiale per Kotlin nel sistema di sviluppo di applicazioni Android.

Considerando l'elevata popolarità di IntelliJ IDEA tra gli sviluppatori e l'attenzione strategica dell'azienda su Kotlin, possiamo affermare con sicurezza che tra 3-4 anni lo vedremo tra i concorrenti a pieno titolo di Java e Swift nel campo dello sviluppo mobile. Inoltre, se i creatori del linguaggio non rimarranno delusi dal loro prodotto, Kotlin continuerà sicuramente a conquistare seriamente altri orizzonti: web, intelligenza artificiale, Internet delle cose, big data, applicazioni desktop.

Se sei seriamente interessato a questa lingua, assicurati di dare un'occhiata al suo sito web ufficiale (versione russa) e sperimenta tutti i suoi vantaggi per esperienza personale. Affrettatevi prima che diventi mainstream.

Questo articolo parla del linguaggio di programmazione Kotlin. Imparerai le ragioni dell'emergere del progetto, le capacità della lingua e vedrai diversi esempi. L'articolo è stato scritto principalmente con l'aspettativa che il lettore abbia familiarità con il linguaggio di programmazione Java, tuttavia anche chi conosce un'altra lingua potrà farsi un'idea dell'argomento. L'articolo è superficiale e non affronta le problematiche legate alla compilazione in javascript. Puoi trovare la documentazione completa sul sito ufficiale del progetto, ma proverò a parlare brevemente del linguaggio.

sul progetto

Non molto tempo fa, JetBrains, un'azienda che crea ambienti di sviluppo, ha annunciato il suo nuovo prodotto: il linguaggio di programmazione Kotlin. Un'ondata di critiche ha colpito l'azienda: i critici hanno suggerito che l'azienda tornasse in sé e completasse il plugin per Scala, invece di sviluppare un proprio linguaggio. Agli sviluppatori Scala manca davvero un buon ambiente di sviluppo, ma i problemi degli sviluppatori di plugin sono comprensibili: Scala, che è nata grazie a ricercatori svizzeri, ha incorporato molti concetti e approcci scientifici innovativi, il che ha reso la creazione di un buon strumento di sviluppo un compito estremamente difficile . Al momento, il segmento dei moderni linguaggi tipizzati staticamente per la JVM è piccolo, quindi la decisione di creare il proprio linguaggio insieme a un ambiente di sviluppo sembra molto lungimirante. Anche se questo linguaggio non mette affatto radici nella comunità, JetBrains lo realizza principalmente per le sue esigenze. Qualsiasi programmatore Java può comprendere queste esigenze: Java come linguaggio si sta sviluppando molto lentamente, nel linguaggio non compaiono nuove funzionalità (aspettiamo funzioni di primo ordine già da diversi anni), la compatibilità con le versioni precedenti del linguaggio lo rende È impossibile che molte cose utili appaiano nel prossimo futuro (ad esempio, una parametrizzazione di tipo decente). Per un'azienda che sviluppa software, il linguaggio di programmazione è il principale strumento di lavoro, quindi l'efficienza e la semplicità del linguaggio sono indicatori da cui dipende non solo la facilità di sviluppo di strumenti, ma anche i costi di codifica del programmatore, ad es. essere quello di mantenere questo codice e capirlo.

A proposito della lingua

La lingua è tipizzata staticamente. Ma rispetto a Java, il compilatore Kotlin aggiunge informazioni al tipo sulla possibilità che il riferimento contenga null, il che rafforza il controllo del tipo e rende l'esecuzione più sicura:

Divertente foo(text:String) ( println(text.toLowerCase()) // NPE? No! ) val str:String? = null // Stringa? -- tipo nullable foo(str) //<- компилятор не пропустит такой вызов -- // тип str должен быть String, чтобы // передать его в foo

Nonostante questo approccio possa salvare il programmatore da una serie di problemi associati a NPE, per un programmatore Java all'inizio sembra non necessario: è necessario eseguire controlli o conversioni non necessari. Ma dopo un po' di tempo di programmazione in Kotlin, tornando a Java, senti che ti mancano queste informazioni sul tipo e pensi di usare le annotazioni Nullable/NotNull. A questo si riferiscono i problemi di compatibilità con le versioni precedenti con Java: queste informazioni non sono nel bytecode Java, ma per quanto ne so, questo problema è ancora in fase di risoluzione e per ora tutti i tipi provenienti da Java sono annullabili.

A proposito, riguardo alla compatibilità con le versioni precedenti: Kotlin è compilato nel bytecode JVM (i creatori del linguaggio dedicano molti sforzi al mantenimento della compatibilità), che gli consente di essere utilizzato nello stesso progetto con Java e la possibilità di utilizzare reciprocamente Java e le classi Kotlin rendono la soglia per introdurre Kotlin in un grande progetto Java esistente molto minimale. Importante a questo proposito è la possibilità di utilizzare più sviluppi Java creando un progetto interamente in Kotlin. Ad esempio, è stato quasi facile per me realizzare un piccolo progetto basato su spring-webmvc.

Diamo un'occhiata al frammento del controller:

Path(array("/notes/")) classe controller NotesController ( private autowired val notesService: NotesService? = null path(array("all")) fun all() = render("notes/notes") ( addObject(" note", notesService!!.all) ) //... )

Le peculiarità dell'uso delle annotazioni in Kotlin sono visibili: in alcuni punti non sembra così pulito come in Java (questo vale per casi speciali, ad esempio, un array di un elemento), ma le annotazioni possono essere usate come parole chiave "fatte in casa" come come autowired o controller (se si specifica un tipo di alias durante l'importazione) e in termini di funzionalità, le annotazioni sono più vicine alle classi reali.

Va notato che Spring non è stata in grado di eseguire il wrapper delle classi Kotlin per gestire le transazioni: spero che ciò sia possibile in futuro.

Il linguaggio supporta funzioni di prima classe. Ciò significa che una funzione è un tipo integrato nel linguaggio per il quale esiste una sintassi speciale. Le funzioni possono essere create localmente, passate come parametri ad altre funzioni e i riferimenti ad esse memorizzati:

Divertimento faiSomething(thing:()->Unit) ( // dichiara un parametro di tipo function // ()->Unit non accetta nulla e // non restituisce nulla di importante thing() // chiama ) doSomething() ( // e qui al volo creiamo una funzione di tipo // ()->Unit e la passiamo alla funzione doShomething // se la funzione è l'ultimo parametro puoi // spostarla fuori dalle parentesi di chiamata println("Ciao mondo ") )

Se a questa estensione aggiungiamo funzioni che ci consentono di estendere una classe già esistente utilizzando un metodo che non viola l'incapsulamento della classe, ma a cui è possibile accedere come metodi di questa classe, otterremo un meccanismo abbastanza potente per estendere librerie Java standard che sono piuttosto scarse in termini di praticità. Per tradizione, aggiungiamo la possibilità di filtrare l'elenco già esistente nella libreria standard:

Divertimento Elenco .filter(condizione:(T)->Booleano):Elenco (val risultato = lista () for(elemento in questo) ( if(condizione(elemento)) risultato.add(elemento) ) restituisce risultato ) val unaLista = lista(1, 2, 3, 4).filter ( it > 2 ) // unaLista= =

Tieni presente che le variabili non hanno tipi specificati: il compilatore Kotlin li deduce se possibile e non interferisce con la comprensibilità dell'interfaccia. In generale, il linguaggio è progettato in modo tale da evitare il più possibile a chi sta alla tastiera di digitare caratteri non necessari: sintassi breve ma chiara con un minimo di parole chiave, nessuna necessità di punto e virgola per separare le espressioni, inferenza di tipo dove appropriato , nessuna nuova parola chiave per creare la classe: solo ciò che è necessario.

Per illustrare l'argomento delle classi e della brevità, diamo un'occhiata al seguente codice:

// la creazione delle classi bean diventa // laconica, i campi possono essere dichiarati // direttamente nella dichiarazione del costruttore class TimeLord(val name:String) // la classe potrebbe non avere affatto un corpo class TARDIS(val proprietario:TimeLord) fun main (argomenti:Array ) ( val medico = TimeLord("Dottore") val tardis = TARDIS(dottore) println(tardis.proprietario.nome) )

In poche righe siamo riusciti a dichiarare due classi, creare due oggetti e stampare il nome del proprietario del TARDIS! Si può notare che la classe viene dichiarata con i parametri del suo unico possibile costruttore, che sono anche la dichiarazione delle sue proprietà. Estremamente breve, ma informativo. Sicuramente ci sarà chi condannerà l'impossibilità di dichiarare più di un costruttore, ma mi sembra che questo abbia il suo pragmatismo - dopo tutto, diversi costruttori in Java ti permettono di dichiarare parametri predefiniti, che Kotlin supporta nel linguaggio level, o converti un tipo in un altro, con cui funzionerà questa classe, e questo può già essere tranquillamente lasciato al metodo factory. Prestare attenzione alla dichiarazione delle “variabili” e dei campi. Kotlin ci costringe a fare una scelta: val o var . Dove val dichiara un riferimento finale immutabile e var dichiara una variabile, il che aiuta a evitare l'uso diffuso di riferimenti mutabili.

Esempio

Ora siamo arrivati ​​al punto in cui possiamo fare qualcosa di più interessante. Durante le interviste, spesso do il compito di realizzare un albero, attraversarlo e determinare alcune azioni con un elemento. Vediamo come viene implementato in Kotlin.

Questo è come vorrei che fosse l'utilizzo:

Divertente main(argomenti: Array ) ( // crea un piccolo albero val tree= tree("root") ( node("1-1") ( node("2-1") node("2-2") ) node("1-2 " ) ( node("2-3") ) ) // attraversalo e stampa i valori sull'albero della console.traverse ( println(it) ) )

Ora proviamo a implementarlo. Creiamo una classe di nodi dell'albero:

/** * @param valore dati del nodo */ class Node (val valore:T) ( // nodo figli privato val figli:List > = arrayList() /** * Metodo che crea e aggiunge un figlio a un nodo * @param value il valore per il nuovo nodo * @param funzione init per inizializzare il nuovo nodo, opzionale * parametro */ fun node(value: T, init:Nodo .()->Unità = ()):Nodo (val nodo = Nodo (value) node.init() children.add(node) return node ) /** * Il metodo attraversa ricorsivamente tutti i nodi figlio a partire dal * nodo stesso, a ciascun nodo viene notificato un gestore * @param handler gestore della funzione per il valore di ciascun nodo */ fun traverse(handler:(T)->Unit) ( handler(value) children.forEach ( child -> child.traverse(handler) ) ) )

Ora aggiungiamo una funzione per creare la parte superiore dell'albero:

/** * Crea un nodo dell'albero con valore valore e inizializza * i suoi figli con il metodo init. */ divertimento tree(valore:T, init:Node .()->Unità): Nodo ( val node = Node(value) // chiama il metodo init passato nel // parametro sull'oggetto nodo node.init() return node )

In due punti del codice è stata utilizzata una costruzione come Node.()->Unit, il cui significato è che come input è previsto un tipo di funzione, che verrà eseguita come metodo di un oggetto di tipo Node. Dal corpo di questa funzione si accede ad altri metodi di questo oggetto, come il metodo Node.node(), che permette di eseguire l'inizializzazione dell'albero simile a quella descritta nell'esempio.

Invece di una conclusione

Grazie alla sua buona compatibilità con Java e alla capacità di sostituire gradualmente il vecchio codice, in futuro Kotlin potrebbe diventare un buon sostituto di Java in progetti di grandi dimensioni e uno strumento conveniente per creare piccoli progetti con la prospettiva del loro sviluppo. La semplicità del linguaggio e la sua flessibilità offrono allo sviluppatore maggiori opportunità di scrivere codice veloce ma di alta qualità.

Se sei interessato alla lingua, tutte le informazioni sulla lingua possono essere trovate sul sito ufficiale del progetto, le loro fonti possono essere trovate su github e qualsiasi errore trovato può essere pubblicato nell'Issue Tracker. Ci sono ancora molti problemi, ma gli sviluppatori del linguaggio li stanno combattendo attivamente. Ora il team sta lavorando sulla versione ancora non molto stabile della pietra miliare 3, dopo la stabilizzazione, per quanto ne so, è previsto l'utilizzo del linguaggio all'interno dell'azienda JetBrains, dopodiché è già prevista la prima versione.

Tag:

  • kotlin
  • Giava
  • jetbrains
Aggiungere etichette

Divertente main(argomenti: Array ) ( val numeri = arrayListOf(15, -5, 11, -39) val nonNegativeNumbers = numeri.filter ( it >= 0 ) println(nonNegativeNumbers) ) // Output: 15, 11

Le funzioni di ordine superiore sono funzioni che accettano altre funzioni come argomenti e restituiscono funzioni. Considera il seguente esempio:

Divertimento alphaNum(funzione: () -> Unità) ()

In esso, func è il nome dell'argomento e () -> Unit è il tipo della funzione. Diciamo che func sarà una funzione che non accetta argomenti e non restituisce nulla.

Le espressioni lambda, o funzioni anonime, sono funzioni che non vengono dichiarate, ma piuttosto passate come espressioni. Ecco un esempio:

Somma Val: (Int, Int) -> Int = ( x, y -> x + y )

Dichiariamo una somma variabile che prende due numeri, li somma e restituisce la somma ridotta a un numero intero. Per chiamarlo è sufficiente una semplice somma (2,2).

Confronto di velocità tra Java e Kotlin

La prima compilazione del codice Kotlin richiede circa il 15-20% in più rispetto allo stesso processo in Java. Tuttavia, la build incrementale di Kotlin è anche leggermente più veloce di quella di Java. Pertanto, le lingue sono approssimativamente uguali nella velocità di compilazione.

Il futuro di Kotlin

Kotlin è la prossima evoluzione di Java, con il quale è pienamente compatibile. Ciò lo rende un ottimo strumento per applicazioni mobili e aziendali. E poiché Kotlin è ora la lingua ufficiale di Android, non c'è timore che impararlo ti lascerà senza lavoro.

Una serie di articoli ti aiuterà ad apprendere questa lingua, descrivendo il processo di creazione di una semplice applicazione mobile Keddit, un client per la popolare risorsa Reddit. Per tua comodità, abbiamo elencato tutte le sue parti nell'elenco seguente.

Avrai bisogno delle seguenti librerie:

  • Modifica 2.0;
  • RxJava;
  • Picasso;
  • RecyclerView;
  • Estensioni Kotlin per Android;
  • Pugnale 2.

Tutte le fonti sono disponibili su GitHub. La serie è composta dalle seguenti parti.

I migliori articoli sull'argomento