Press "Enter" to skip to content

GOTO 2017 • Kotlin – Ready for Production • Hadi Hariri


[Musica]
comunque benvenuto grazie a tutti per
essendo qui questo è un discorso su Kotlin è
a è un discorso molto introduttivo quanti
di voi qui avete sentito parlare di cotone usato
cotone va bene così, spero, quando te ne vai
tutti usano il cotone, basta tornare indietro e
prendi il capo che riscriveremo
tutto in cotone perché è così
fantastico che tu vada, è il migliore
motivo per riscrivere qualcosa perché è
eccezionale
Comunque, sto scherzando comunque
Colleen ti da un po ‘di storia
iniziato da noi nel 2010 siamo JetBrains
a quel tempo eravamo abituati a camminare indietro a quel tempo
comunque se abbiamo sentito parlare di JetBrains noi
crea strumenti per sviluppatori e ne abbiamo due
I lati del business da un lato è per lo più
Java e tutti gli IDE sono costruiti con
Java e l’altro lato è netto e il
Le cose di Java utilizzano tutto Java, quindi lo fanno
strumenti per tutti i diversi tipi di
tecnologie e linguaggi ecc. ma lo siamo
ancora usando principalmente Java per scriverlo e
avevamo bisogno di un linguaggio di cui abbiamo bisogno è la lingua
era un po ‘più conciso di cosa
avevamo bisogno di un linguaggio che fosse un
un po ‘più espressivo e facile da usare
interoperabile con tutto il supporto
e il codice sorgente che avevamo indietro
allora erano dieci anni di codice sorgente giusto
in questo momento jetbrains a 17 anni così
abbiamo un sacco di codice legacy e noi
voglio il linguaggio che è stato pragmatico ora
al momento abbiamo guardato più
lingue per cui li abbiamo scartati
diverse ragioni alcune delle cose
vedrai probabilmente sono molto simili a
Scala e mi chiederai perché non l’hai fatto
basta andare con Scala Scala non è un
linguaggio facilmente utilizzabile che conosciamo
perché abbiamo creato strumenti per questo ed è
non una lingua e al momento non lo era
molto veloce ora è un po ‘più veloce
ma non era molto veloce allora e anche
Scala è un linguaggio molto potente in
che ti permette di fare assolutamente
tutto ciò che vuoi più o meno abbiamo pensato
quello potrebbe ritorcersi contro ad un certo punto
quindi alla fine abbiamo deciso di creare il nostro
proprio linguaggio quindi prima di tutto Colin
è nato per necessità
più o meno come tutti gli strumenti a
il tuo cervello è stato sviluppato sotto
Licenza Apache 2 su github da allora
cos’è Kotlin è un linguaggio statico I
dimentica sempre di menzionare che mira
il JavaScript JVM e di recente
annunciato anche nativo così è nativo
già la prima tecnologia demo
l’anteprima è già disponibile che puoi
scaricarlo L’ ho trovato in esecuzione su a
Raspberry Pi che è abbastanza carino senza
qualsiasi JVM o altro e funziona
lo stato abbastanza bene attuale era
pubblicato il 15 febbraio 2016 1 punto 1
è stato rilasciato quest’anno che era un 1.0 noi
hanno proprio ora che slitta non è aggiornato in
Infatti questo è ciò che si chiama goto is a
conferenza molto agile proprio qui
quindi la prossima volta non dimenticherò che ce l’abbiamo
Oltre 40 sviluppatori che lavorano al college
questo lo rende la seconda più grande squadra di
JetBrains
giusti cervelli di Jeff erano circa sette
cento più persone 40 38 35 o così il nostro
IntelliJ IDEA Kotlin o nessun core IntelliJ
e poi gli altri e Colin è
un po ‘come la seconda squadra più grande
proprio ora a destra di Jerry, quindi abbiamo un
lotto investito in Colin oltre 100
comitati è usato in più di 10
prodotti ora a JetBrains
qualsiasi nuovo prodotto che creiamo
essenzialmente sta usando Colin anche il nostro nuovo
dotnet ibe
è scritto in Colin Java and.net chi
avrei pensato e non mi piace il nome
cadere a meno che non ci avvantaggi davvero
Lo farò e quindi ci sono alcuni esterni
le aziende che utilizzano Kotlin pure
come Expedia NBC News Digital Netflix
Amex e pochi altri ok quelli sono giusti
alcuni di loro proprio dove puoi usarlo
quindi praticamente ovunque Colin eri tu
sappiamo che creiamo strumenti e server desktop
quindi abbiamo creato Colin per essere in grado di creare
strumenti e server desktop ma è possibile
usalo su qualsiasi piattaforma Android è
compatibile con Java 6 in modo da poterlo utilizzare
e ha avuto un sacco di uptick nel
Piattaforma Android a causa di alcuni dei
nuove funzionalità linguistiche che ha portato
che Java 8 ha portato alla JVM ma
ancora in difficoltà su alcuni aspetti
porta ad Android dato che è molto
simile a Java C sharp JavaScript
groovy e praticamente messo ogni
la lingua là fuori eccetto il cervello F
qualunque cosa
ti dà un buon tempo di accelerazione in modo che il
l’idea non era di allontanarsi completamente da
quello che sai ma che tipo di usare alcuni di
la conoscenza che sai di essere
ho familiarità con la lingua così posso
ti prometto che se conosci Java C
sharp JavaScript Scala groovy di tutto
questi raccoglierai Kotlin in pochissimo tempo
ma è apposta e
l’interoperabilità è una grande cosa per noi noi
voleva un linguaggio che fosse interoperabile
con tutti i codebase perché abbiamo solo
sai che non sei Silicon Valley
può solo spegnere per sei mesi e
riscrivere in JavaScript di cui avevamo bisogno
interrompere con tutto il codice sorgente
che abbiamo così abbiamo un ruolo importante in
termini per assicurarsi che tutto sia
interoperabile come si può usare molto
molto aperto a destra facciamo strumenti per sviluppatori
ovviamente vogliamo che tu usi i nostri strumenti
ma Kotlin è estremamente aperto che puoi usare
con tutto quello che vuoi puoi usare
la riga di comando è possibile utilizzare Maven
Gradle cobalto che è un nuovo strumento di costruzione
simile alla grande su ispirato da Gradle
costruire usando Kotlin e IntelliJ IDEA
e qualcuno ancora usa la formica, intendo noi
Fallo, ma io sono convinto che lo faremo
probabilmente le uniche persone al mondo
va bene
è per noi e Android studio eclipse noi
crea un plugin per Eclipse e NetBeans
facciamo anche un plugin per la settimana della rete okay
è questo che vediamo qualche codice qualsiasi
domande fino ad ora nulla sono così bravo a
spiegando nessuno nessuno ne aveva nemmeno avuti
domande ora oh mi dispiace per quello
Sì, su quali piattaforme puntiamo
nativo in questo momento si chiama Raspberry
Pi iOS ma stiamo andando a target iOS
stiamo andando a target OS X e Windows
sì, probabilmente hanno alcuni problemi
Linux già in parte funziona così
sta attraversando la LLVM quindi qualsiasi cosa
che funziona su quello e quindi non lo so
fa lo sfarfallio qui il punto
è male vero, è male, quindi mi chiedo se
è il proviamo questo
se posso fare qualcosa a riguardo è così
molto peggio, giusto
oh è meglio?
e non avevamo nemmeno bisogno di un nuovo cavo
facciamo che il trenta va bene che è
meglio a destra fresco
fantastico quindi file nuovo progetto ora che ho
fatto questo parlare un paio di volte che
è un eufemismo
e quindi ci sono varie versioni di esso
sul web ma mi piace sempre dare
il mio pubblico è qualcosa di nuovo perché allora
non è giusto non è giusto per te non lo è
fiera su di me in modo che andremo a fare
qualcosa di leggermente diverso, quindi facciamolo
arriva la mia app per Chicago e Colleen
con un tempo di esecuzione molto piccolo molto molto
piccolo davvero piccolo come 700k anche e a
libreria standard
quindi ecco Kotlin ignorare tutti quelli che sono
i file che erano solo nella mia fonte
cartella quindi dirò sample e creo a
file type main print line ciao Chicago
e questo è l’unico differente
cosa vedrai in questo
presentazione su tutti i diversi
quelli che sono là fuori
il nome Chicago va bene, intendo
vieni a cosa ti aspettavi ora
Farò qualcosa in diversi ordini
e in questo modo sarà leggermente diverso
okay, quindi eseguirò quello e, si spera, se
che compila ci salveremo Chicago
eccoti fantastico
non trattenere le tue emozioni sia e
ovviamente puoi eseguire il debug anche io
puoi fare cose come sai introdurti a
variabile qui e dire messaggio variabile
e quindi impostare un punto di interruzione su quello e
fai il debug di questo e ottieni tutto lo stack
tracce e tutto così essenzialmente te
ottenere tutti i refactoring e tutti
che fuori dagli schemi, tutto a posto
quello con Kotlin è lo strumento
di prim’ordine fidati di me
Non sono di parte, ma lo so dal modo in cui io
lavoro per JetBrains va bene così uno dei
cose che noterete
immediatamente è che non c’è nessun oggetto
non c’è niente di giusto quindi questo è un po ‘
come un semplice file con una voce principale
punto in modo che è l’equivalente di in
Java avresti una lezione e poi
vuoto statico pubblico principale del punto di ingresso
per chiamare è solo una funzione chiamata
il principale che corrisponde a questo modello va bene così
con Collin è una cosa buona che io
non c’è bisogno di avere tutto questo
diverse funzioni come metodi statici di
oggetti statici posso solo avere funzioni
in un tipo di file simile a JavaScript e
ti allontani da questa idea di avere
come queste classi di utilità e aiuto
classi in cui hai tutto il mazzo di
funzioni che stai aggiungendo perché tu
non so dove altro metterli a posto
quel problema scompare completamente
non è scomparso ora va oltre
ai file Ora hai tutti questi
file diversi e non sai dove
per mettere le tue funzioni ma hey ci siamo liberati
di alcuni personaggi nel processo quindi io
può avere un’altra funzione che dice
stampare il messaggio e quindi pronunciare il messaggio
stringa e quindi stampare il messaggio di linea e io
avere un’interpolazione delle stringhe quindi un messaggio
va bene, va bene
quindi sai che chiamare la funzione è molto
semplice stampa del messaggio e
ciao ora un paio di cose da notare
stiamo seguendo la notazione pascal
dove hai il nome del parametro e
quindi il tipo va bene e stringa
interpolazione come ti ho detto che puoi fare
altre cose qui, per esempio, fanno di più
le cose complesse sono come dire lunghezza
e attraverso le operazioni che puoi fare se
altrimenti qualunque cosa al suo interno sì
domanda
Penso che ci siano delle ragioni dietro
termini di strumenti e renderlo più facile in
alcuni aspetti della domanda ID è perché
abbiamo scelto quella notazione in contrapposizione
anche al lavoro di John volevamo che ci fosse
a c’era un era in realtà
interessante da mangiare qualcuno ha detto oh questi
nuove lingue che conosci mettendo le loro
tipi dopo i nomi sì, tranne questo
è stato fatto come 40 anni fa giusto
è in linea con quelle persone
dalla tua community JavaScript
pensa che la programmazione funzionale sia questa
nuovo paradigma che è appena stato
inventato bene, comunque, non ho intenzione di farlo
criticare l’JavaScript, forse dovrei
so che dovrei aver ragione quindi lascia che ti mostri un
piccolo confronto una delle cose che
cerchiamo di fare con Colin è renderlo di meno
più conciso scrivi più conciso di
Java ora non sta dicendo molto, intendo
lo sapevi che Java è piuttosto ferbos ma
per darti un’idea lasciami andare avanti e
creare una classe cliente, così ho intenzione di farlo
creare una classe cliente qui e poi
Lo chiamerò Colin e lo farò
dì il cliente giusto e lo sarà
una lezione e ho intenzione di rimuovere tutto
questo non ne ho bisogno e lo dirò bene
stringa nome e andiamo avanti e
effettivamente creare un ID Val int e var
nome stringa e possiamo lasciarlo a quello
giusto quindi questo è essenzialmente creare un
classe che ha due proprietà e Colin
non esiste un campo come tale
giuste queste sono due proprietà ha a
proprietà che si chiama ID che è
leggi solo perché ha il prefisso
ha una vocale davanti e ha un
la proprietà ha chiamato name che è readwrite
e questo è anche un costruttore
giusto così posso esprimere tutto questo in a
linea singola ora ho intenzione di andare avanti
e aggiungi qualcosa qui modifica chiamato
dati giusti in modo che faccia alcune cose
cosa fa bene andiamo avanti
e creare una classe Java e chiameremo
è cliente Java e lo faremo
int privato
I D e questo sta per essere letto solo
non ha letto solo è quello che è
inizializzazione finale Aggiungi costruttore
parametro okay nome stringa privata add
parametro costruttore e poi siamo
andare avanti e creare getter e
organizziamo per questo per questo stiamo andando
per creare un getter allora stiamo andando a
vieni qui e crea un uguale e
codice hash e poi andremo a venire
qui e crea due stringhe e poi
stiamo andando a venire qui e creare un
cos’altro possiamo creare metodi di sovrascrittura
clone okay, quindi è Java
lo chiamano okay, quindi proviamo ad essere un
un po ‘più conciso, ovviamente
stai per dire un grosso affare IntelliJ
lo fa per te sì lo fa
essenzialmente ci stiamo mettendo fuori
di affari
il punto qui però è che tu
non so se questo codice è in realtà solo
predefinito del modello standard generato da
IntelliJ o il tuo IDE preferito o se lo è
chiamato qualcosa di diverso o quando tu
aggiungi un nuovo campo o una proprietà che hai
andare e aggiornare quello giusto è un intero
sacco di codice della caldaia che non è necessario
tutto ciò è essenzialmente lì
per te con questa singola linea ora l’ho fatto
singoli i dati è ciò che ha aggiunto i due
stringa sono uguali al codice hash e
il clone altrimenti sarebbe solo un
classe standard con due proprietà ok
qualsiasi domanda
in questo momento chiudiamo tutto così ok
cos’altro abbiamo?
quindi le funzioni funzioni sono molto semplici
come ho detto sono al massimo livello che abbiamo
parametri che hai visto che hai
parametri di default quindi questo è di nuovo
sul taglio del codice boilerplate così
se ho due funzioni che ne richiedono due
diversi tipi di parametri uno di
per esempio è opzionale, io no
devo creare sovraccarico che potrei solo
passare un parametro predefinito in questo modo
caso ho una funzione con tre
i parametri l’ultimo ha un valore predefinito
valore di Smith se non lo chiamo
senza passare quel valore in esso sta andando
per impostazione predefinita a destra Smith dato che ho
parametri di default ho anche la denominazione di
i parametri così ora posso chiamare i parametri
usando un nome come prefisso quindi qui dico
che i parametri predefiniti e opzionali
come puoi vedere ha tre parametri e
Dico che il secondo parametro è X e
il primo parametro è y quindi posso cambiare
l’ ordine di esso è anche uno dei buoni
l’uso dei parametri di denominazione è se lo hai
una base di codice in cui si hanno funzioni
con molti parametri che non puoi
refactor devi chiamarlo perché
è di terze parti o qualsiasi cosa dia
intuizione, infatti, se stai usando per
istanza IntelliJ con Java che potresti
ho notato con l’ultima versione
ti dà anche un po ‘come un suggerimento
all’interno dell’IDE che ti fornisce informazioni
riguardo al nome del parametro okay
quindi di nuovo andando alla concisione così
si noti che il tipo di reso predefinito è
Kotlin è in realtà un’unità che è simile
annullare, tranne che è un oggetto, quindi posso
interrogare anche su di esso e vedremo cosa
un oggetto è se non fornisco il
impostazioni predefinite se non dico unità per impostazione predefinita
suppone che sia l’unità così che sarebbe
l’equivalente del vuoto in Java se voglio
per restituire un tipo quindi vorrei solo mettere
il tipo qui in questo caso lo sarei
restituendo un INT una delle cose grandi
e chiamare di nuovo è inferenza di tipo come
per quanto possiamo dedurre cercheremo di dedurre
quindi se voglio creare un parametro I
non devo dire che sai che creerò un
parametro chiamato my int which is of type
int ed è uguale a zero non devo
Faccio quello che potrei semplicemente dire var mia fine
è uguale a zero non devo essere espliciti
riguardo al tipo che il compilatore dedurrà
e proviamo a fare lo stesso ovunque
quindi qui per esempio ho una funzione
quello è su una singola linea essenzialmente che cosa
Ci sto solo dicendo che x è uguale
x volte due quindi sa che tipo X è
e quindi restituirà un tipo
intero non devo mettere le parentesi graffe
o fare cose come return return return x
due volte e fare quello che sarebbe il
modo più lungo per farlo bene se è solo un
singola espressione che la funzione
restituisce quali molte funzioni possono essere allora
Posso farlo su una sola riga in
questo senso va bene puoi avere funzioni
con più parametri qualsiasi numero di
parametri giusti e questo diventa abbastanza
potente quando inizi a parlare
alcune funzioni di ordine superiore che faremo
vedere in un minuto, così ecco che posso
passare inababc come molte cose come me
vorrei ora una delle cose che noi
provare a rimuovere in cotone è nullo giusto
quanti di voi amano sanno che è come
JavaScript c’è sempre qualcuno nel
stanza che ama JavaScript ce n’è uno
persona che amano nota quante persone
amo JavaScript ora questo povero bene lo stesso
parti sulla nota d’ amore hanno ancora
JavaScript affatto così in colonna noi
rimuovi ora per impostazione predefinita il tipo non può
avere il valore null così quando dichiaro a
stringa qui per esempio di Val my
stringa bene questo è catturato questo è Java
forse dovrei farlo in comune, quindi se io
diciamo var var var la mia stringa equivale a blah
bla destra e dico var la mia stringa così io
può modificarlo uguale a nessun diritto dice
me non puoi assegnare a un tipo non nullo
posso avere null se voglio, ma io
deve essere Excel che questo può essere
nullable che è
fondamentalmente aggiungendo un punto interrogativo al
fine quindi significa che questo tipo è
nullable quindi ora potrei fare la mia stringa
non è uguale ora quando lavori
con Collin di solito cerchi di evitare
nota perché sai qual è il punto
di null se tutto andrà a finire
essere se non ora essenzialmente ma da allora
abbiamo bisogno di interoperare con Java noi
lavorare con il concetto di null
c’è molto del codice che sei
consumare è Java e Java può restituire a
cliente e quel cliente può essere
nullable giusto quindi come lavoro con
nota così qui puoi vedere che ho un
tipico codice Java giusto se il cliente no
null se il cliente ottiene il nome non lo è
null se cliente ottiene nome inizia
con un A conosci i nomi con a non lo sono
permesso in questo è una sicurezza
eccezione che è come la password
algoritmi su alcuni siti Web in modo cliente
il servizio in Java è così
ora con Kotlin posso fare qualcosa a
un po ‘ più facile quindi cosa sto facendo qui
sta dicendo che sto usando questo cliente in
Java ma si noti che non c’è nulla
controlla perché suppone che non lo sia
null quindi non devo mai controllare
nullo
sta dando allo sviluppatore l’ opzione di
dicendo questo tipo che stai consumando
da Java non è annullabile o non è giusto se
non posso davvero dirlo
il tipo non è in grado e ora devo controllare
per null così vedi che qui è
dandomi un errore e dicendo che puoi
solo fare chiamate sicure ora invece di fare
che se il cliente non è nullo allora
cliente punto nome posso solo aggiungere
questo punto interrogativo che è come il
Operatore di Elvis e dice solo se lo è
non nulla quindi chiama questo se è ora
quindi non chiamarlo giusto lo rende di più
conciso se voglio spararmi nel
piede posso anche farlo e dice che non lo faccio
cura che questo sia ora chiamalo comunque ma
questa è una cosa molto importante perché
quando inizialmente lo facemmo, vedemmo
va bene l’idea è che tutto ciò che io
consumare da Java non è in grado giusto
potenzialmente annullabile quindi importerò
tutto come annullabile cosa succederebbe
abbiamo finito con basi di codice di domanda
segna ovunque, quindi abbiamo pensato bene
non funziona
perché non annotano basi di codice e
dì che va bene un processore di annotazione
corri e vedi se non è annullabile allora
segnerà che questo punto interrogativo è
obsoleto questo controllo è obsoleto e
quindi non ne hai bisogno lo rende un
un po ‘più pulito non ha funzionato
Alla fine o così l’ultima opzione era fare
quello che vuoi a destra si conosce meglio
se il tipo che stai consumando
è nullable o no se si aggiunge il
punto interrogativo se non è non aggiungere il
punto interrogativo e non ne hai bisogno
controlli extra, quindi lavora con te Colin
di solito tenta ed evita i null
ma lavorando con Colin e Interop
scenario a volte devi affrontare
Conosciamo alcune altre cose che proviamo
fare per renderlo un po ‘di più
conciso quindi il casting qui è una persona ora
notare che ho una lezione aperta qui
perché di default classi in call in
sono definitivi
ciò significa che non puoi ereditare da loro
a meno che non li contrassegnate esplicitamente come aperti
e ho un impiegato di classe che
eredita dalla persona e dal dipendente
Ho giorni di vacanza in proprietà
imprenditore che non ha vacanze
perché quello che sappiamo tutti noi non capisco
vacanze o almeno pagate qui io
avere una funzione che richiede una persona e
dice se la persona è una persona dipendente
giorni di vacanza è inferiore a 20 preavviso
quello che manca c’è il casting giusto
è automaticamente il casting per questo motivo
questo è in verde che probabilmente non puoi vedere
ma si mostra in verde dicendo
che è lanciato automaticamente ad un
persona un dipendente perché tu hai
già mi hai detto che hai già fatto il
controllare e questo non è immutabile, quindi io
sappi che non sarà modificato
da qualche altro thread quindi posso
lancia automaticamente questo per te e per quello
fa spesso la stessa cosa con nullable
tipi anche ora in termini di
costruendo un sacco di volte quando tu
creare di nuovo le classi , proviamo e siamo
conciso qui
hai il costruttore nel reale
stessa riga del nome della classe
definizione giusta ma hai anche tu
costruttori secondari quindi se voglio
più costruttori posso averli noi
chiamali semplicemente costruttore con
diversi parametri e quindi chiamare il
costruttore di base se non si ha
costruttori secondari e tu vuoi
fare un po ‘il codice di inizializzazione anche voi
avere questa opzione e tu la crei
blocco chiamato init e dentro init you
inizializza tutto ciò che vuoi con il
costruttore ma di nuovo spesso lo trovi
che questo non è veramente necessario
Iniezione di dipendenza quindi quanti di voi
sapere l’iniezione di dipendenza giusta
iniezione di dipendenza uno dei problemi
con quello è quello che sto iniziando
codice che ho per assicurarsi che sei tu
so che sarà inizializzato a
runtime così spesso quando dichiaro il tipo
quel tipo deve essere annullabile quando io
dichiararlo perché non posso inizializzarlo
con tutto ciò che abbiamo per quello
per esempio in ritardo che è un
modificatore che posso dire lo sai
cliente val cliente e che sarebbe
basta inserire bene la sintassi no
importa ma è il punto di essere è quello
puoi solo dire che è tardi così
Non devo rendere questo nullable I
non è necessario avere codice esplicito per
inizializzare questo nel costruttore e
vale anche per un altro livello
delegazione, ecco un esempio di
delegazione ora si mostrano due esempi delle
altro tornerà alle interfacce
interfacce tipiche a cui sei abituato
avere un repository e poi ho una pipe
un record di tipo generico ottiene per ID che
restituisce un tè o ottiene tutti i ritorni
lista di tè più sbagliata di sempre
implementazione di repository ma
questo è quello che tutti vediamo nel muro e
allora ho un cliente un controller
classe che ora occupa un repository
normalmente quello che faresti qui è questo
sarebbe dichiarato qui e poi tu
direbbe che conosci il voto del deposito
campo privato equivale al diritto del repository
inizializzalo e dovrei metterlo
quello dentro
in esso o in qualsiasi altra cosa abbiamo chiamato
delegazione di prima classe, quindi quello che diciamo è
che questo valore è di tipo mescolato in
questa classe e delegata a qualunque cosa sia
passato qui è un parametro in modo da notare
che ho questa funzione prendi tutto e io
ho ottenuto per ID e io non sto prefisso
che con qualsiasi campo non sto facendo il mio
punto di deposito privato punto ottenere tutti i miei
il punto del campo dell’archivio privato ottiene il mio ID
perché è rappresentato da questa linea
qui sta dicendo che le chiamate al metodo sono
arrivando dal parametro che siamo
passare come costruttore quindi è gentile
di come un mixin se hai familiarità con
i mix-in in rubino si mescolano in questo
funzionalità all’interno della classe in questo momento
la domanda che potrebbe sorgere qui è
cosa succede se ne ho quattro diversi
le dipendenze passate dove
so quale metodo appartiene a cosa
farti una bella uccisione di IDE però
se ne hai quattro normalmente
un altro segno che è quella classe
probabilmente si sta coordinando troppo per te
bisogno di rompere il problema in un
diverso modo giusto non passano troppo
molte dipendenze nelle tue classi
altrimenti diventano ancora lezioni di Dio
in questo momento abbiamo parlato
costruendo ciò che riguarda la decostruzione
decostruendo di nuovo abbiamo cose da fare
cerca di renderlo più leggibile e di più
espressivo quindi qui per esempio ho un
funzione che restituisce inizialmente una coppia
avevamo tuple
quindi UO crolla così tu lo sai
tuple di tre valori di quattro o cinque
quindi lo abbiamo ridotto a due coppie e
triplica e qualsiasi cosa oltre che un dato
classe perché una volta ne aggiungi più di due
o tre parametri si perde il
semantica di ciò che stai cercando di fare
se hai bisogno di più di tre valori
ripristinare una classe di dati che è molto
facile da definire ma qui sto tornando a
coppia come faccio a dare un po ‘di semantica
nel senso che potessi fare qualcosa del genere per
elemento negli elementi elemento della linea di stampa
primo e secondo che non mi danno
intuizione su cosa sia questo primo e secondo
l’elemento è ma posso decostruire
e posso dire per città e città
elementi quindi stampare la città di stampa del paese
molto simile a quello che si incontra in
JavaScript va bene e tu puoi fare lo stesso
quando stai creando un tipo o qualcosa
e ora infatti anche Kotlin ha lanciato
via variabili quindi se hai mai giocato
per esempio con Haskell puoi
in realtà decostruisca le cose e alcune di esse
il valore che stai ottenendo sei
non utilizzare invece di ottenere suggerimenti che
questa variabile non è utilizzata dall’IDE I
posso semplicemente usare il trattino basso dicendo I
non mi importa di questo valore giusto come
molti di voi adorano il modello singleton
quanti di voi sanno come implementare
il modello singleton quanti di voi
devo cercarlo ogni volta che tu
implementare un unico modello oh come on be
onesto se lo sei se conosci il
pattern Singleton a memoria, allora si sta
abusando della tua memoria dovresti usarlo
per qualcos’altro come Singleton
i modelli e le espressioni regolari non lo sono
qualcosa che vuoi tenere qui
ci sono cose molto più preziose in
vita dico sempre che voglio andare
la mia tomba senza apprendimento regolare
espressioni quindi ecco il singleton
modello in Continente è solo un oggetto
c’è una cosa chiamata a abbiamo il
concetto di oggetto come prima classe
cittadino quindi non solo non ti serve
per creare una classe e quindi assicurarsi
che il costruttore può essere invocato solo
una volta ed è un costruttore privato blah
blah blah, dichiari solo un oggetto ora
Non sto dicendo che questo significa te
tutti dovrebbero andare e creare singleton
metodi non sono così grandi se
sono a sola lettura stanno bene
pulito uno stato non sono così di nuovo bene
ma va giù per cercare di fare le cose
il più conciso possibile
ok ok ora ecco alcune cose
probabilmente non l’hai visto molto
di queste cose puoi vedere in più
lingue e come ho detto per lo
l’inizio di colin è ispirato da molti
le cose vanno bene ma una cosa che noi
avere è così estensioni
che cosa fa questa funzione?
Ciao, puoi vedere bene dietro
sono troppo liberali otto per me da chiedere
adesso ma in ogni caso, aspetta che ti chieda di entrare
dieci minuti
che cosa fa questa è una funzione
salve tranne che è preceduto da una stringa
punto dot cosa vuol dire
beh, in realtà quello che sta facendo è
estendendo la classe stringa con una nuova
funzione di destra in modo che possa venire nel mio
main Posso dire che sono io, ciao ciao ora
qualsiasi classe di stringhe ha questa funzione
sono io punto ciao ciao giusto il
la funzione di estensione è simile se tu
sapere c-sharp
è lo stesso concetto di vederli fare acquisti
chiama l’estensione del metodo anche se in
c-sharp e article la tua classe con a
classe statica e un metodo statico e
quindi passare in questo è il primo parametro
qui basta solo prefisso con il nome di
la classe I può accedere all’istanza di
la classe che sto estendendo posso passare
parametri per la classe che sto estendendo
in questo momento guarda questo è Jo questo
dovrebbe essere uguale a questo se veniamo qui che è
comprensibile perché sto dicendo che dovrebbe
uguale prende un valore e lo confronta con
l’ istanza reale e in effetti questo
potrebbe essere semplificato in questo modo ma
ha quest’altra piccola cosa qui
chiamato
M correzione e che mi permette di chiamarlo
Così questo deve essere uguale questo bene
una delle cose fondamentali che volevamo
compire con Kotlin era l’ abilità
per creare celle di cervo Cecily DSL che tu
può creare facilmente semplicemente nel tuo sub
dominio e li usa senza dover
capire AST o un intero gruppo di
teoria del linguaggio e alcune di queste cose
che vedrai ora sono ciò che ci permettono
avere questa capacità
quindi le funzioni di estensione mi permettono di
estendere qualsiasi classe che posso estendere Java
la classe I può estendere una chiamata in classe con
qualsiasi funzionalità che voglio l’ infisso
mi permette di creare quello che può essere
ha chiamato una notazione infix fintanto che è
una funzione che è una funzione di estensione
su una funzione membro che ha un singolo
parametro ora arriva la libreria standard
con un sacco di cose così qui per
esempio creo e guardo di nuovo il
inferenza nel chiamarti sai che io
non devo essere esplicito Ho una lista
di un elenco di brani di album che ho
più album niente intorno a tutti
questo tipi espliciti e surround ecc se
Voglio dichiarare una lista di numeri uno
a trenta se voglio dichiarare un array
di parole array off e poi tutto il
diverso tipo parole lista capitali off
Madrid in Spagna Londra nel Regno Unito Berlino a
Germania, Washington DC, Stati Uniti d’America, che cos’è
questo – qualcuno può dirmi di cosa si tratta
è una funzione infissa proprio dove è
questo definito nella libreria standard così
invece di doverlo fare di più
esplicito Madrid Spagna accoppiano questo in realtà
crea un paio per me lo rende di più
diritto espressivo e lo standard
la libreria viene fornita con un sacco di
funziona in modo da filtrare il filtro che conosci
numeri seguiamo la convenzione groovy
così che se espressione lambda
consiste in un singolo parametro che posso
fare riferimento a quel parametro usandolo invece
di essere esplicito, quindi potrei dirti
so che i miei numeri pari sono uguali ai numeri
filtro e quindi sarebbe una funzione
che sai è divisore per due moduli
a zero uguale in modo che la coppia è, ma prima di
tutto in cotone in ciascuno di questi finanziamenti
espressione questa è un’espressione lambda
è così che fai un lambda
espressione
: potrebbe essere multi-linea a destra e se
il primo parametro è se è un singolo
parametro I può sostituire l’esplicito
definizione di esso decorazione esclusiva di
con esso così è dove viene
da bene
è fantastico, ho tutti questi
funziona come la mappa e se guardi
attraverso la libreria standard il
la maggior parte di questi sono estensione
funzioni su tipi generici così ottieni
mappa mappa filtro mappa ordinata per gruppo
per gruppo tutte queste cose diverse
su tutti i diversi corretti
le collezioni sono elenchi alias qualunque tu sia
voglio applicare individua tutti questi
cose diverse questo viene tutto parte del
la libreria standard quindi l’ ordine elevato
certo che posso creare il mio
le funzioni di ordine superiore è tutto così qui io
avere una funzione di ordine superiore a
funzione di ordine superiore se non lo sei
familiare con il termine che abbiamo appena usato
con filtro è un ordine elevato
la funzione di ordine superiore è a
funzione che accetta una funzione o a
funzione e restituisce una funzione corretta
ora conosci la programmazione funzionale
eccoti
una funzione di ordine superiore questa è a
funzione che accetta un intero e
intero restituisce un intero corretto I
invocate che io dico la funzione di linea di stampa 2 3
come posso chiamare la mia somma più alta della mia somma I
può fare riferimento a funzioni per nome simili
a come puoi fare ora in Java su un tipo
quindi mio figlio è una funzione che ne richiede due
parametri di tipo int e restituisce un
int match è lo schema che sono
aspettando qui ora una delle cose
che ti ho mostrato in giro per essere in grado di
fare multi linea con i lambda uno di
i benefici che questo ha è che noi
provalo di nuovo non solo con il DSL che
Potrei chiamarlo estensibile tanto quanto
possibile e quanti di voi lo sanno
prova con risorse in c-sharp c’è
questa cosa ha chiamato usando in pratica
è simile, prendo un oggetto che è io
usa e getta e dispone automaticamente
Dico usando questo oggetto con le parentesi aperte
fare qualsiasi cosa e dispone automaticamente
un po ‘ simile a provare con risorse
Non ho che in Java non ho
quello in cotone, ma è molto facile
creare creo una funzione chiamata using
che prende un oggetto che è chiudibile e
un corpo un’azione e io dico prova ad eseguire
quell’azione finalmente la chiude bene
quindi quando voglio usarlo posso farlo
qualcosa come usare il mio chiudibile fatto
giusto e sembra che sia una parola chiave
sembra che faccia parte del
linguaggio sembra che sia un costrutto
della lingua ma essenzialmente non lo è
è solo una funzione e se lo sei
familiare con una programmazione sincrona
rx Java le parole chiave in c-sharp around
il lavandino aspetta che tutti noi abbiamo tutto
quelli di Kotlin sono anche chiamati
co-routines è implementato in a
modo generico chiamato co-routines
e nessuna delle soluzioni attende un lavandino
o qualsiasi di queste cose che forniamo
rendimento se si ha familiarità con il
il rendimento delle parole chiave fa quindi parte del
linguaggio sono solo funzioni ma
a causa di alcune delle convenzioni
e le abilità che abbiamo chiamato
sembra che faccia parte del
linguaggio
quindi cos’altro sequenze un sacco di
cose che hai visto quando prendo un
lista di numeri e faccio un filtro e
poi faccio una mappa che è tutta entusiasta
valutazione che significa che sta per andare
attraverso l’intera lista che sta per
valutare tutto e poi sta andando
per stampare il risultato un sacco di volte
ora vogliamo lavorare con la valutazione prevista
che significa fondamentalmente elaborare i dati fino al
troviamo quello che stiamo cercando e poi
scartare il resto è possibile farlo in Java
venivano chiamati i flussi di cotone
flussi e poi a causa di Java in arrivo
con i flussi lo abbiamo cambiato
e noi le chiamiamo sequenze, quindi ora posso
prendere qualsiasi raccolta e dire una sequenza
e appena lo faccio, qualsiasi operazione
dopo diventa pigro
quindi è pigramente valutato e durato ma
non ultimo in termini di codifica algebrica
i tipi di dati vanno bene così se sei familiare
con questo
questo è molto comune in lingue come
Haskell per esempio un dato algebrico
il tipo di file è essenzialmente digitato potrebbe
essere di un tipo o di un altro tipo booleano
per esempio proprio qui ho una pagina
risultato che può essere un successo di tipo o
digita un errore in modo tale che tu veda la classe
il successo eredita dal risultato della pagina
l’errore di classe eredita dal risultato della pagina se
è successo voglio la mia classe di
contiene una proprietà chiamata URL if
è un errore che volevo restituire avere un
il codice e un messaggio ora dimenticano il furto
parola sigillata del mondo qui te lo dirò
cosa succede ora quando mi piace quando
lo voglio
il risultato della pagina chiamante equivale a ottenere la pagina ora
quando il risultato è con successo stampa
linea URL e di nuovo notare che questo è
castato automaticamente al tipo di ritorno
quando il risultato è errore linea di stampa
messaggio giusto è un detergente molto più bello
modo di scrivere codice perché non lo faccio
devi restituire un oggetto che ha
tutto se è un risultato
riuscito o un errore e poi dire se
errore su quella proprietà quindi sai
fare uso di queste proprietà se non farlo
uso di quelle altre proprietà così questo è
fondamentalmente una sottoclasse del tipo
risultato della pagina qual è la parola chiave del campo in
qui sta dicendo che questo è in a
modo gerarchico che nessun’altra classe è mai esistita
sarà ereditato dai risultati della pagina
sì no è diverso che è così aperto
aperto di default è chiuso a destra
significa che nessun’altra classe al di fuori di
questi due stanno per essere ereditari
dal risultato della pagina quindi limita questo
lo scopo dell’ereditarietà fino adesso
chiamando 1.0 dovevi definirlo come parte
della classe così come una classe bambino
ma ora puoi davvero metterlo dentro
lo stesso file finché è dentro il
lo stesso file va bene
e se combini tutto questo
condiziona tutto questo condizionale
dichiarazioni come se quando ecc tutti loro
ritorno possono essere usati come espressioni
così pure se dico di tornare a destra perché
non è intendo dire che devo dire che dice
aggiungi altro ramo o aggiungi il ramo rimanente
recita bene non ho nemmeno un ritorno
digita ma se lo usi come valore di ritorno
se restituisci un valore dal vento allora
diventa un controllo esaustivo perché poi
dirai che sai che non stai prendendo
in considerazione tutti i diversi
istanza va bene così che è abbastanza codice del cibo
torniamo un po ‘ alle diapositive e
finisci con alcune cose
altre cose che le persone stanno facendo e
Co è se stai facendo Android
sviluppo simile a un DSL
per creare viste senza dover
fare affari con le estensioni XML di Android fa
uso di qualche altra tecnologia che noi
chiamiamoli che è chiamato il
plugin per il compilatore, quindi cosa fa
in realtà ottiene informazioni sul tuo
elementi sui tuoi moduli Android e
li ho tipizzati staticamente per te
quindi puoi fare riferimento a loro senza nome
dover fare una ricerca per ID con il
stringa ecc molla di avvio primavera è molto
grande sostenitore di Kotlin ora stanno usando
ora estesamente e molla lo stivale
supporta chiamato in modo nativo e tu
ha chiamato in estensioni che usa
un sacco di cose Cobalts già
detto questo è il DSL per la scrittura
costruire in Kotlin e, naturalmente, vecchio grande
recentemente annunciato bene di recente no
davvero un anno fa lo ha annunciato ora
supportano il cotone in modo da poter scrivere
è il tuo script di gradle incontinente
chiamato Gradle cut Gradle script Kotlin
invece di usare groovy e loro
consiglia Kotlin per eventuali nuovi plugin come
bene arrivando in 1.1 tutte queste cose
ci sono perché 1.1 è già stato
rilasciato per voi i prossimi passi andare a
chiama in languore prova chiama in languore e
chiamando Cowen puoi scaricarli
offline gioca con loro nella lingua
libri c’è un sacco di libri
questi sono solo due di questi già
pubblicato se stai cercando di farlo
Android consiglia il libro a sinistra
chiamalo in azione
Ho un corso onesto se lo sei
interessato ho anche un podcast ora
chiamato a parlare di auto-pubblicità di Kotlin
la loro comunità è molto molto grande
attivo molto bello
abbiamo circa penso a quasi 7000
la gente ora al nostro posto
Non dirlo perché non gli piace
progetti open source sul livello gratuito
lo adoreranno sul giornale, naturalmente
quindi ma sì molto attivo sul gioco
Canale giusto in modo da poter unire il gioco
canalizza e muori con mille morti
di canali allentati all’interno di canali allentati
e anche io volevo parlare con loro
permesso provare forcella perché sono
aiutando a organizzare questo stiamo avendo un
conferenza telefonica a San Francisco così
se siete interessati a che questo sia
sarà un evento di due giorni a novembre
il secondo e il terzo molto economici
bello sarà grande io
ho promesso che non lo farei comunque
riassunto quindi spero che tu abbia l’essenza di
questo l’obiettivo con questo doveva essere un
linguaggio pragmatico molte delle scelte
che abbiamo fatto è di renderlo facile
risolvere alcuni dei problemi che noi
affrontare lo sviluppo quotidiano molto facile
curva di apprendimento dell’interoperabilità
consente un’adozione a basso rischio perché è possibile
aggiungilo gradualmente al tuo codice base
non è necessario iniziare con i test che conosci
qualsiasi classe java può essere chiamata da una colonia
la classe chiamante può essere chiamata da java
e questo è ovviamente molto soggettivo
cosa ma prova empirica basata sul mio
i pregiudizi hanno dimostrato che è estremamente
piacevole da parte di tutti che ho chiesto ok
e Colin è qui per restare e questo è un
molto grande punto importante perché abbiamo
molto investito nel continente e noi
non ha fatto il cotone per vendere consulenza
intorno al cotone o vendere programmi in giro
cotone creiamo una colonna per noi per il nostro
utensili e la nostra attrezzatura sono i nostri principali
fonte di reddito e tu sai che siamo
andando a continuare a vendere strumenti e
Colin è ora diventato uno dei nostri strumenti
tranne che lo usiamo noi stessi e lo diamo
via libera nella speranza che voi ragazzi
tutti compreranno IntelliJ IDEA che
alla fine si spera
e per riassumere sai che qualcuno ha twittato
e con il loro permesso che sto mostrando
è la città di ricerca Colleen ieri sera
e poi passare la mattinata alla ricerca
importo nel codice Java
Studio Android vedo perché l’hanno fatto
praticamente questo è un buon riassunto
del perché lo abbiamo fatto grazie e abbiamo
un minuto per domande senza domande
grande grazie mille sì così il
la domanda è quando estendo la stringa dove
fa così che ha un impatto così
essenzialmente finché è basato su a
portata del livello del pacchetto così quando lo definisci
il tuo pacchetto che per impostazione predefinita è predefinito
pacchetto ma è possibile definire esplicitamente a
pacchetto in Kotlin seguiamo lo stesso
Convenzioni fa Java conosci la morte
da migliaia di sottocartelle tranne te
non è necessario averli in sottocartelle
ma è fondamentalmente sullo scopo, quindi quando
sei dentro l’ID se scrivi come
conosci un punto stringa, ciao, l’ID è
andando a prenderlo e dire oh c’è un
ciao definendo questo pacchetto e lo farò
mostrarti l’intellisense e poi colpisci
inserire e importerà il pacchetto per
tutto bene, gli override di classe non possono
ricorda che la funzione ha la precedenza su
funzione di estensione quindi sì un dato così il
questione di staticità contro istanze
tutto ciò che ho fatto è essenzialmente in a
classe come si sa che in Java destra un
data class è una classe in Java che hai
per creare un’istanza di esso sì io
in realtà non ha mostrato come creare un
esempio di qualcosa di cliente Val Val
Il cliente di eCos non ha novità
parola chiave ok è così che si crea un
per esempio, l’unica cosa che non lo è
un’istanza è oggetto intendo scusa il
unica cosa che non crei
istanza di questo oggetto perché quello è
già la sua istanza singleton ok

sì la domanda è quando si usa
Scala quando useresti Collin in generale
la risposta è se sei felice con Scala
non c’è niente per te in cotone semplice
come quello
a destra se siete insoddisfatti Scala prendere
uno sguardo al cotone Scala è molto potente
ti permette molte cose in colonna noi
non ti permettiamo di scavalcare nessuno
il simbolo definisce uno di
operatore ti limitiamo in ciò che puoi fare
lo facciamo intenzionalmente così spesso
non finiamo con la complessità questo
con quello facciamo così la domanda è intorno
Java con Scala interrompe è it’s
molto molto liscio e non prendere la parola
per questo chiedere su internet chiedere su slack
è molto molto liscio perché ricorda
abbiamo avuto quando abbiamo iniziato abbiamo avuto dieci anni
del codice legacy
ora abbiamo 17 anni di codice legacy Java
come se stessimo cucinando questo ogni giorno così
sottolineiamo molto l’ interoperabilità
sì, siamo molto se la domanda è
intorno alla chiarezza intorno ai tipi
di funzioni giusto parametro di funzione
yeah yeah esplicito sì sì ora siamo
esplicito in tutto ciò perché anche questo
aiuta in termini di ottimizzazioni e
i tempi di velocità del compilatore penso
sì, va avanti l’ultima domanda perché io
penso che dobbiamo andare, si potrebbe il
la domanda è intorno ai test che puoi usare
i quadri di test esistenti
assolutamente infatti c’è ancora di più
quadri meravigliosi uno di loro è chiamato
diffondi il quadro delle specifiche che senti
familiarità con il gelsomino o moka è
essenzialmente questo e ti permette di fare
un po ‘ come uno stile molto carino di
testarlo è davvero molto bello perchè cuz
Sono l’ autore per la versione e uno di
l’ora che noi tre stiamo mantenendo
così puoi vedere che posso fare per
esempio descrivi un calcolatore che dovrebbe
tornare dovrebbe tornare a destra, ma io sono
sarà completamente giusto, c’è anche
un altro chiamato test di colonna che è
il nostro concorrente sta facendo un ottimo lavoro come
bene l’ autore e questo è un po ‘come
un’implementazione del test di Scala in
Kotlin così sembrava anche che non pagassi
per le parole chiave lì così quando lo fanno
chiamare le specifiche mostra alcune persone
in realtà fallo così, questo è un altro
giusto e questo ha il suo tipo di
assertion framework right spec mille
usiamo hamcrest o un sacco di
cose diverse ma questo ha il suo
proprio tipo di aspettative
le cose giuste quindi ce ne sono già molte
roba in quella zona, una delle cose
che stiamo andando a fare rispettare se è
stiamo andando a cercare di separare
completamente da j-unità in modo che
essenzialmente sarai in grado di
usa le specifiche quando scegli come target JavaScript
nativo o gioviale diritto che è per
volta sono qui i tre giorni quindi se tu
voglio venire e sarò felice di
grazie

Please follow and like us: