Press "Enter" to skip to content

GOTO 2018 • Let’s Get Lazy: Exploring the Real Power of Streams • Venkat Subramaniam


[Musica]
grazie per essere venuti qui, parliamo di
diventiamo pigri ad esplorare il vero potere
dei flussi il mio nome è Venkat Subramanyam
Sto parlando di cosa è la valutazione pigra
quali sono alcuni dei motivi per cui siamo
veramente interessato e parleremo
su come la pigrizia può essere implementata
un certo numero di modi diversi ma prima di noi
iniziare solo una veloce dimostrazione di mani
quanti di voi sono pigri, questo è bello
voglio solo assicurarmi di essere sulla destra
posto fantastico quindi ho parlato di te
conoscere la valutazione pigra cosa fa davvero
significa essere pigri bene quando si tratta di
programmazione funzionale che sentiamo spesso
la gente parla di come l’immutabilità sia così
importante parliamo di ordine superiore
funzioni e, a mio avviso, il
problema con tali discussioni e ho
fatto questo anche me lo sta dicendo
programmatori che dovrebbero programmare
l’immutabilità è come dire ai bambini
devono mangiare verdure e nessuno
lui ama così perché abbiamo veramente a cuore
immutabilità dell’acqua alcune delle ragioni
e voglio parlare veramente perché quello
è così importante da fare come stai ascoltando
lungo se avete domande che chiedo
per sollevare le domande attraverso il
app e avremo le domande a
Alla fine della sessione e anche io lo farò
prenditi il ​​tuo tempo per valutare il discorso sull’applicazione
anche verso la fine quindi parliamo a
poco su qual è la ragione di tale
conosci l’importanza dell’immutabilità e
così bene, davvero chiederò il
domanda sai cosa è veramente
programmazione funzionale e e e io sono
argomenterò quella programmazione funzionale
davvero poco da fare con immutabile o
la programmazione differenziale lo è davvero
poco con le funzioni di ordine superiore a
me le caratteristiche davvero interessanti della funzione
la programmazione è due cose che siamo noi
sono davvero interessati a funzionale
composizione e composizione funzionale
ci dà la possibilità di esprimere il nostro codice
davvero bene in termini di flusso dei dati
attraverso l’ elaborazione che facciamo e io sono
dirò uno dei più critici
aspetti di questo è la funzione
compositiva classe di composizione fissa
valutazione e rimuovere la pigrizia da questo
equazione penso che sia piuttosto inutile
parlare di programmazione funzionale così
valutazione pigra è probabilmente uno dei
aspetti più critici della programmazione
funzionalmente in un certo senso e quindi pigrizia
è assolutamente critico in qualsiasi
linguaggio di programmazione funzionale sensibile
vedrai una valutazione pigra in questo modo
questa è una delle cose più importanti
da considerare ma quando si tratta di
programmazione ci sono diversi
linguaggi di programmazione là fuori e
sfortunatamente il mondo ha davvero
sistemato su alcuni mainstream selezionati
le lingue ci sono letteralmente sai
così tante lingue direi migliaia
di lingue là fuori, ma ancora siamo
concentrandosi su una manciata di loro ma è così
fa la maggior parte del mainstream
le lingue che programmiamo sono inclinate
verso un modo o uno stile di
programmazione che è snervante
perché potremmo passare attraverso un intero
carriera nella programmazione di questi mainstream
lingue e nemmeno ottenere un
opportunità di realizzare un tutto nuovo
mondo diverso che è là fuori
beh, una cosa del genere è come si chiama
ordine applicativo rispetto all’ordine normale
è davvero divertente nel nostro campo come noi
nominare le cose che risulta normale è l’ordine
in realtà abbastanza anormali non lo usiamo
come troppo spesso ma cosa fa veramente
significa diamo un’occhiata a un esempio
qui per un minuto ecco questo piccolo
Il codice Java e nel codice Java sto andando
andare avanti e chiamare una funzione foo e
Chiamerò un’altra funzione, facciamolo
dì annuncio qui ora sto per passare
uno e sappiamo chiaramente come Java
funziona in questo caso chiamerà annuncio
e poi sta andando a chiamare la funzione
pippo ma non deve essere così
e viene chiamato questo ordine di esecuzione
l’ordine applicativo la parola
applicativo significa davvero nell’ordine in
che applichiamo ma un ordine normale
in realtà fa cose abbastanza diverse
diamo un’occhiata a ciò che realmente
significa con un piccolo esempio che sto per fare
scrivi un esempio molto piccolo qui in
Haskell dirò aggiungere KB uguale a a
più B quindi è una funzione abbastanza semplice
è abbastanza auto-esplicativo di cosa si tratta
la funzione sta facendo sto aggiungendo solo due
valori qui e poi chiamerò
valutare e passargli un valore come per
e tutto ciò che è la funzione di valutazione
il ritorno è il valore per noi ora
Chiamerò una funzione di stampa
chiamerò la funzione di stampa che sto per fare
chiama stampa qui
Chiamerò valutare e chiamare aggiungere 1 &
3 1 & 2 qui eseguirò questo
piccolo codice e produce un valore di 3
tuttavia notare che Haskell funziona davvero
il caso della scuola superiore Haskell si va
a Haskell e dire Haskell chiama add e
Haskell direbbe ma perché bene perché io
voglio passare il risultato di questo a
valutare quindi Haskell dice quindi andare a chiamare
valuta perché mi dai fastidio, ok?
Chiamata Haskell valutare come perché perché io
vuoi chiamare bene l’amico e poi chiamare
amico perché ti infastidisce con a
valore 8 bene lo dimostrerò ma
come lo dimostriamo e sfortunatamente in
Haskell Haskell è funzionale
linguaggio di programmazione non puoi solo
rilasciare impurità ovunque tu voglia così se
Dovevo andare qui e mettere una stampa
dichiarazione
Haskell mi urlerà contro e dirà cosa sono
stai cercando di fare in una pura funzione quindi io
era tipo di sedermi e graffiare il mio
testa come dimostriamo l’ovvio qui
e non avrei mai pensato di usare a
debugger per dimostrare qualsiasi cosa nella mia vita
così così sarò solo fare esattamente
che proprio qui così sarò far apparire °
CI che è il fucile Haskell che sto per fare
caricare qui proprio questi dardo campione
attacca il file che ho appena scritto in questo momento
Inserirò un breakpoint online
numero uno carattere numero 16 e il
il punto di interruzione è proprio lì che chiamerò
la funzione principale e ti sto mostrando
l’ ovvio proprio qui sta aspettando
puoi vedere sulla linea numero 1 ed è così
aspettando ora il punto di interruzione, naturalmente
Devo dire di continuare se lo farai
Vado avanti e digito continua e
mentre scrivo continui, puoi vederlo
sta effettivamente visualizzando il risultato di 3 a
prova che in realtà ha chiamato l’add
funzione perché si stava fermando in linea
numero 1, ovviamente, ho preso tutto il
pelliccia per mostrarti l’ovvio che è
tipo di inutile non è, ma prendiamo
di nuovo a questo codice per un minuto sarò
tornare alla funzione di valutazione e io sono
restituirò il valore di 42 proprio qui
quando eseguo il codice stampato a 42
ma questa volta tornerò a
Haskell e dire call call e dice perché
quello che voglio chiamare valuta quindi chiama
chiama valutare quando risulta Haskell
in realtà non ha mai chiamato la funzione dell’annuncio
In questo caso come faccio a saperlo provarlo
di nuovo torniamo al comando prod
apriamo l’arruffato ancora una volta
carichiamo di nuovo il programma, facciamolo
imposta il punto di interruzione ancora una volta
ora che il punto di interruzione è impostato, chiamo
la funzione principale e notalo mai
preoccupato di rompere sulla linea numero uno
questa è una pillola che non è mai realmente
preoccupato di fermarsi sulla funzione di aggiunta così
cosa stiamo dimostrando davvero con questo
piccolo esempio bene questo è normale
ordine di esecuzione che stai vedendo
proprio lì e si scopre che la maggior parte
lingue che usiamo nell’uso tradizionale
ordine applicativo ma l’ordine normale è
piuttosto raro e anormale in un certo senso
e molte lingue non lo usano ma
una lingua che lo fa naturalmente
Haskell hai visto che lo facevi davvero
bene si scopre che alcune lingue
sono nati pigri sono nati dal
spiaggia e loro si siedono lì e hanno un
tempo buono, ma alcune lingue devono
lavorare sodo per essere pigri sono gentili
di come me sono sempre agitato Sono
sempre fino a qualcosa e mia moglie dice
andando a rilassarsi sono come si fa
ed è così che siamo come te
so che alcune lingue sono assolutamente
ansiosi non sono veramente pigri ma è così
scopre che è una valutazione pigra
assolutamente critico quindi qual è il
beneficio della pigrizia il beneficio di
la pigrizia è davvero l’efficienza quindi se tu
voglio davvero fare il tuo programma
efficienza ufficiale non è in esecuzione
le cose più velocemente ma evitando le cose
quello non dovrebbe essere fatto nel primo
posto così immagina di prendere il pezzo di
calcolo e non eseguirli perché
non hai davvero bisogno dei risultati
questo può diventare davvero potente
come quello che immagina questo per un minuto
di rinviare la valutazione su su
Gennaio il secondo in cui il capo ti chiama
nell’ufficio e il capo ti dice
il secondo gennaio che stai andando
lavorare su un progetto importante e il
risultato il rapporto di esso è dovuto ad aprile
il 15 che cosa fai di uscire
l’ufficio del capo il secondo gennaio
alla tua scrivania e inizia da questo diritto
via corretto, certo che non lo farai
inizia subito il 14 aprile
perché vuoi il 15 non è vero?
come si chiama essere intelligenti e
questo è quello che si potrebbe fare ricordo a
il tempo in cui ero a scuola ero
davvero uno studente terribile e lo farei
vedere tutti questi studenti che lavorano davvero
dura per l’esame a quattro mesi di distanza e io
li guardava sempre e diceva cosa
stai preparando così duramente per il
esame perché vedi che c’è un sacco di
le cose possono accadere tra ora e il
esame il giorno dell’esame potenzialmente lì
potrebbe essere una tempesta di neve davvero pesante o un
temporale e l’intera scuola potrebbe
essere cancellato il professore potrebbe morire prima
l’esame c’è un sacco di cose che
può succedere non è così cosa fai come
uno studente molto efficiente che aspetti
la notte prima di studiare bene è così
un po ‘ come quello che mi piace davvero è
la pigrizia porta all’efficienza e solo a
tempo lo chiamiamo o lo chiamiamo l’ultimo
momento responsabile che cosa tutte queste cose
sono davvero buone cose quindi come facciamo noi
davvero raggiungere questo diamo un’occhiata a
un esempio di questo come essere veramente
in grado di ottenere qualcosa di simile così
per capire questo, prendiamo
su esempio qui in due diversi
lingue se vuoi scrivere a
piccolo esempio qui in Scala solo per
intrattiene il pensiero che fanno le altre lingue
questo come pure per esempio groovy
Cartland puoi fare queste cose dentro
più lingue diverse prendiamo
dare un’occhiata ad un esempio di questo qui
Definirò una funzione e il
la funzione che definirò qui è chiamata
calcola e questo prende il valore intero
e tutto ciò che farò in questo
funzione particolare come return n times to
solo una funzione molto banale ma buona
abbastanza per noi per iniziare così è
la mia funzione di calcolo che ho scritto qui
in Scala ma qui sul lato Java lascia
io vado avanti e scrivo la stessa funzione
qui dirò calcolo dove sono
prenderò un numero e tutto quello che sto per
do è semplicemente restituire il numero di volte 2 così
praticamente sullo stesso codice in entrambi
lingue ma nel cielo fuori da cosa
Sto andando fare è dire X è uguale a lasciare di
dì 4 e io dirò in questo caso
allo stesso modo sul lato Java dirò
int finale X è uguale a 4 ma vado
per dire semplicemente se
d’altra parte dall’altra parte sono
dirai se X è maggiore di 5 e
calcola chiamiamo la funzione di calcolo
e dirò di calcolare oh, andiamo
dite che X è più grande di 7 di me
voglio stampare andiamo avanti e
salva il risultato 1 altrimenti lo farò
salva il risultato e stamperò
diciamo risultato – voglio fare
qualcosa di molto simile a questo sul
lato di Java, quindi andiamo avanti
e scrivere che prima di provare ad eseguire
questo quindi dirò se X è più grande
di 5 e il calcolo di diciamo che X è
maggiore di 7 Voglio semplicemente output
risultato 1 altrimenti uscirò semplicemente
qui sopra andiamo avanti e diamo il risultato
2 quindi questi due sono praticamente simili
funzioni tra Scala e Java qui come
puoi vedere ma eseguirò questo
piccolo codice e la mia domanda davvero a
questo punto è la funzione di calcolo
essere chiamato cosa pensi che non vedo
la gente che dice di no là bene lo farà
non essere chiamato e controlliamo che lo sia
in realtà non viene chiamato così quando vado
indietro ed esegui questo codice qual è il
l’output dice che dice il risultato 2 e chiaramente
il calcolo non è stato chiamato ma lo sono
chiederò la domanda perché è stato calcolato
non chiamato nessuno riconosce la ragione
per questo dai non essere timido
sì, è giusto che il corto circuito non lo sia
così sappiamo che questo è un breve insieme a
faresti vedere e indovina chi andiamo
avanti e dire chiamato qui indovina chi
ha introdotto questa caratteristica
beh, risulta che le carte hanno faida
stato in lingue per un tempo molto lungo
John McCarthy ha introdotto i corti
faida come parte della programmazione Lisp e
lingue da quando uso questo è a
il folklore non è ciò che tutti sanno
riguardo ai cortocircuiti ci arriviamo tutti
aspettare che d’altra parte Vado
di nuovo a questo codice e dire tentativo over
qui e ho intenzione di dire Val temp
è uguale al calcolo di X ora salvo il
variabile in una variabile temporanea e
allora ho intenzione di passare e usare quello
variabile allo stesso modo, dirò oltre
qui la nostra temperatura è uguale a dire
calcolo di X e ho intenzione di cambiare
questo a un temporaneo qui ora torna indietro
al codice di Scala la mia domanda è volontà
richiamo di calcolo ora cosa ne pensi a
piccolo punto interrogativo sul volto delle persone
Non sono sicuro mi permetta di cambiare la domanda
la compagnia di magliette si chiamerebbe ora sì
non è un diritto che non dovremmo chiamare
calcolare e ancora quando si esegue il codice
i computer in realtà chiamavano quanto fosse triste
è non è vero perché ora è il computer davvero
ha chiamato bene il motivo per cui viene chiamato il calcolo
la Scala dice hey cosa succede se c’è un
effetto collaterale dici che aspetta un secondo sei
parlando improvvisamente di effetti collaterali ma
un minuto fa stavi avendo esattamente il
lo stesso metodo di calcolo lo avevi nel
situazione di corto circuito e anche se
c’è stato un effetto collaterale
perché nel mondo non lo chiami bene
la risposta breve a questa domanda è
le specifiche del linguaggio che non puoi mai
discutere con le specifiche del linguaggio
le specifiche del linguaggio dicono anche nel
evento di un effetto collaterale se ci si trova in a
situazione di corto circuito abbiamo il
giusto non chiamare la funzione sul
altra mano in condizioni normali
dichiarazione la lingua dice oh mio Dio
e se davvero avremo un?
effetto collaterale
Meglio chiamarlo così come una ricerca come te
può vedere nel caso di Scala e nel
caso di Java ha finito per chiamare il
funzione ma so che l’avete detto tutti
non dovrebbe essere chiamato sono totalmente d’accordo con
così quello che puoi fare è che puoi dire
pigro proprio lì e dicendo te pigro
puoi vedere che Scala non sta più chiamando
la funzione perché determina ciò
non è davvero necessario senza la parola
pigro puoi vedere che è in realtà
chiamando la funzione ma quando rilascio il
parola pigra lì puoi vedere che è no
più a chiamarlo ma solo per illustrare
questo se è possibile il valore di X era 14
vedi che sta chiamando la funzione ma
se il valore di x è 4 non lo è più
chiamando la funzione così marcandola
pigro sei in grado di ottenere ciò nel
caso di Scala allo stesso modo nel caso di
Java ho intenzione di andare avanti e
pigro proprio lì e quando eseguo il codice
non funziona so per un minuto te
erano come caspita questo è impressionante non è vero
scusa ti ho deluso, quindi no
non funziona bene ma sai che dici
come, ma lo voglio io, perché non posso averlo
questa caratteristica particolare e così il
rispondere a questa domanda è sì, puoi
ce l’ hai ma come puoi presentarti
pigrizia per conto proprio e questo è uno dei
le domande per pensare veramente e
per questo voglio fare un passo indietro di un minuto
e parlare di una dichiarazione e lo farei
sostengono che questo è probabilmente il più profondo
dichiarazione mai nel nostro campo non c’è
un solo giorno in cui mi siedo e programma
quando non metto in pausa e apprezzo questo
particolare affermazione II non penso
c’è qualcosa di più profondo nel nostro
campo e questo è stato detto da un gentiluomo
chiamato David Wheeler e David wheeler
probabilmente ha detto la cosa più saggia di sempre
e ha detto tutti i problemi nel computer
la scienza può essere risolta usando un’altra
livello di indiretta e questo per me è
la dichiarazione più fenomenali mai ora
se ci pensi davvero al livello
di indiretta è il design principale di
tutti i disegni secondo me perché questo
è il padrone ha fondamentalmente
modo abile di fare le cose e questo è
la più fenomenale padronanza del design se
ci pensi perché un livello
indiretta dice semplicemente piuttosto che
la soluzione di questo qui a risolvere un problema che
a sua volta risolverà il problema che usiamo
questo molto nella programmazione di computer in C
linguaggi di programmazione usiamo puntatori come
livello di riferimento indiretto, ad esempio, bene
risulta in programmazione funzionale il
livello di indiretta c’è – il
livello di riferimento indiretto in funzionale
programmazione dalla programmazione funzionale
viene da bene cosa fa in realtà
vieni da bene se questo è uno dei miei
la realizzazione mi chiama sciocca ma ottengo
entusiasta di queste cose quando io
il programma è quando potresti programmare
per diversi anni e un giorno improvvisamente
qualcosa ti sta davvero all’orizzonte che forse
è ovvio per tutti
ma tu ti rendi conto che wow è così
davvero fantastico e per me questo è dentro
livello di programmazione funky di riferimento indiretto
viene dalle espressioni lambda, quindi questo a
me è un momento ha perché i lambda danno
tu quel livello di indirezione e allora
fa la lambda dire che dice una lambda
che chiamare questa funzione ora chiama questo
funzione anonima che è un lambda
espressione che a sua volta può chiamare questo
funzione in un secondo momento quindi per me questo
è uno degli aspetti veramente critici di
lambda è che ti danno il livello
di indiretta e funzionale
programmazione e poi una volta che guardi
in questo modo cambia il mondo intero per
me perché è uno strumento di design che posso
guarda e apprezza ora quando io
programma in stile funzionale perché è
qualcosa che cambia il modo in cui io
percepire e utilizzare la soluzione a questo
Punto quindi cosa posso fare qui nel codice
ora posso dire qui un pigro se vuoi
fuori numero intero e ho intenzione di dire
Tim e poi dirò di avvisare
qui dirò di nuovo pigro e guarderò
questo molto attentamente se chiamo il
metodo di calcolo proprio qui questo è un gioco
di ordine Java lo chiamerà immediatamente
funzione perché è ciò che fa Java
è un linguaggio di ordine applicativo ma
quello che posso dire a Java è un favore
non chiamare il calcolo ora chiama
più tardi questa freccia è quasi come una
livello di indirezione non è così così
dicendo che non eseguire calcoli ora esegui
è un po ‘più tardi quindi questa è la laurea
di rimandare la valutazione e lo sei
dicendo non ora un po ‘più tardi per favore
e quella piccola parentesi freccia è a
è un’indicazione di un posticipo di lambda
valutazione del metodo di calcolo, quindi cosa
potremmo potenzialmente fare qui, potremmo
creare una classe chiamata lazy dove il
la classe pigra potrebbe aggrapparsi a un’istanza
se vuoi e potrebbe anche resistere
un piccolo fornitore di P dove il
il fornitore proviene dal funzionale
interfaccia nel caso di lavoro
e quindi posso ovviamente dire qui il
il fornitore lo chiamerà fornitore e
quindi, naturalmente, quello che posso fare è creare
il costruttore pigro che sta prendendo il
fornitore e quello che posso fare è semplicemente
prendere il fornitore per conservarlo a
fornitore uguale al fornitore ma poi
Posso scrivere un metodo chiamato get where
il metodo glit può dire se l’istanza
è uguale a null quindi, ovviamente, potrei
diciamo che l’istanza è uguale al fornitore
dot ottenere il valore di sbarazzarsi del
fornitore a quel punto non lo facciamo davvero
preoccupano di più e poi tornare
l’ oggetto che si tiene all’interno del
oggetto in modo da poter iniziare a scrivere cose
ovviamente sto scrivendo questo codice qui ma
potresti usarlo da terze parti
biblioteche se vuoi o puoi metterle
in un programma separato e lo usiamo
nelle tue applicazioni ma, ma nella scrittura
questa valutazione pigra che sto dicendo rimandare
questo a un secondo momento come risultato posso
entra qui e ottieni il valore di
Templin Intendo davvero e ignoro il
avvertimento solo per un minuto e tu puoi
vedi in fondo molto il risultato è troppo
viene visualizzato proprio lì dentro
altra parte se dovessi modificare questo a
40 e si noterà per lo
in basso viene chiamato e risultato 1 quindi il
la chiamata di questo è rinviata fino a te
non puoi più rimandarlo così puoi
avere pigrizia integrata nel tuo
le domande in quel modo e quello arriva
dal livello di indecisione che ero
parlando di un minuto fa
così la pigrizia è dotato di lambda in più
di queste lingue e che ci dà un
livello di riferimento indiretto di cui possiamo beneficiare
davvero bene questo ci porta a come
possiamo davvero trarre beneficio da questo tipo
di pigrizia nel programmare così
capire discorsi di questo let su
pigrizia in collezioni di oggetti questo
è un aspetto molto critico a cui pensare
perché la programmazione funzionale ci dà
la nostra eleganza nel codice usa bellezza
nel codice ma allo stesso tempo anche se noi
bisogna stare molto attenti perché noi
non posso davvero essere felice con l’eleganza e
bellezza siamo davvero a
devono davvero cercare prestazioni
anche così per capire questo prendiamo
un piccolo esempio e giocare con essa facciamo
dì per un minuto data una collezione
diciamo collezione una collezione di
numeri ben fuori dalla collezione ordinata
dei numeri direi dato un collettivo
raccolta ordinata di numeri che sto per
dì trova il doppio del primo numero
maggiore di 3 e questo anche così voglio
per trovare il primo numero che è più grande
di 3 e questo è anche come faccio questo
nello stile imperativo della programmazione
bene nello stile imperativo di
programmazione a cui siamo abituati
questo molto nella nostra esperienza, quindi sono
andando iniziare con l’elenco dei numeri interi
lo chiameremo come numero uguale a e
diciamo diciamo lista e cosa sono
I gonna fornire per questa particolare lista
Dirò che questo sarà il mio
lista di numeri diciamo da 1 a 10 ma
con la piccola differenza che sto per dire
5 e 4 come una sequenza di numeri così
avviso che ho 1 2 3 5 4 6 7 8 9 e 10
ma come faccio questo nell’imperativo
stile bene nello stile imperativo di
programmare quello che faremo è
per prima cosa dire se il risultato è
uguale a 0 e ovviamente alla fine
Voglio produrre il risultato ma cosa fare
Faccio qui per int I uguale a 0 I less
che i numeri iniziano e io vado a
pensa a cosa chiamare qui è
la lunghezza è che sospiri è contare non possiamo
avere uno standard nel nostro settore perché
questo renderebbe la vita facile così in questo
caso, naturalmente, si tratta di una dimensione di si tratta di un
elenca è una lunghezza di esso è un
array è un conteggio se è diverso
lingua e poi ovviamente devi
fare un’altra scelta è più il nostro io
plus plus o plus plus I e poi te
pausa per un secondo come la domanda è
che meno di R minore o uguale a
ogni volta che lo scrivi qualcuno
ha chiesto l’altro giorno cosa sono quei simboli
significa che ho detto che è il
Simbolo internazionale per I’m confused
perché ogni volta dobbiamo fermarci e
porre la domanda per non essere equo
Certo che non c’è bisogno di lottare che
difficile più che avresti potuto dire dato
elemento che viene dai numeri e da cosa
lo farò ora
Posso semplicemente dire qui se l’elemento è
maggiore di tre e se elemento mod 2
è uguale a zero quindi ovviamente il
risultato più uguale al tempo degli elementi – ora
come un lettore osservatore probabilmente guardi
a questo codice e dici che sei sbagliato si
stiamo dimenticando di mettere una pausa proprio qui
ora se non si interrompe il meglio
caso si otterrà una prestazione scadente in
nel peggiore dei casi si sbaglia
risultato ma è tua responsabilità
fai tutto questo nel tuo codice e notalo
quando eseguo questo codice , produce il
risultato di otto ma il problema con
il codice di stile imperativo è imperativo
il codice di stile è un imperativo molto fuorviante
il codice di stile che sto per dire ha un built in
ascia accidentale complessità quindi cos’è
complessità accidentale complessità arriva
dallo spazio della soluzione ora la soluzione è
complesso perché stai leggendo il punteggio
e cercando di capire se è giusto
e in genere ciò che accade nel mio caso è
Ho messo questo codice in pochi giorni dopo
sai chi entra nel mio tester e il mio
tester dice che il tuo codice fa schifo e io sempre
dì al mio tester di non dirmi il mio cappotto
fa schifo dimmi come fa schifo oggi perché
ogni giorno sembra sottostare in modo diverso ma
il punto davvero in questo caso è quello
il tester dice bene ho provato il tuo codice
con una raccolta vuota di dati e
il tuo risultato era zero quando i risultati
sarebbe inesistente ti ho provato
mentre un codice con una collezione di soli
numeri che sono numeri dispari che ha dato a
risultato sbagliato cerco di ottenere numeri in meno
di tre mi ha dato risultati sbagliato
fallito in così tanti modi, la ragione
è fallito in tanti modi è il risultato
di zero è piuttosto invalido quindi una volta il
il tester utente mi dice che è sbagliato cosa sono
Lo farò ora
Tornerò su questo codice e dirò
Va bene, sistemerò quello che dirò
il risultato intero è uguale a null e quindi
ovviamente la domanda è come si fa
sentirsi
questo ora ovviamente è un odore e questo
non sarà molto divertente
scrivi il codice va solo peggio a
questo punto rispetto a prima era così lui
lottare con tutto questo e dire gosh
deve esserci un modo migliore per scrivere
questo codice bene si scopre che c’è
in realtà un modo migliore e questo è il
il codice di stile funzionale è stato ridotto
la complessità in generale va bene, naturalmente
codice di stile funzionale rimuove questo
complessità accidentale dal nostro codice e
e parte del motivo è che il codice
una grande legge come la dichiarazione del problema
quindi una delle bellezze reali di questo è
il codice inizia a leggere come il problema
affermazione quindi quello che posso fare qui è che posso
di uscita e a questo punto lo farò
dì i numeri dart stream e arriva
il flusso che è un iteratore interno
quindi dico che il numero inizia a scorrere un dardo
filtro e cosa farò qui in
questo esempio è che comincerò con il
funzione filtro quindi dammi un secondo I
voglio ricompensare ciò che abbiamo avuto
minuto fa perché voglio mostrare un
differenza tra questi due così così
in questo caso, naturalmente, quello che sto per
mostrarti qui è che il funzionale
codice di stile ha ridotto la complessità
il codice inizia a leggere come il problema
affermazione come abbiamo visto qui, quindi ignoriamola
che per un minuto andiamo avanti e mettiamo
un int proprio qui ma a questo punto cosa
Voglio fare davvero è parlare di come
il codice di stile funzionale è inferiore
complesso quindi per quel motivo andiamo
avanti e lascia quel codice là fuori per
un secondo andiamo avanti e diciamo output
numero di avvio del flusso ma questa volta lo sono
andando a dire filtro dato un elemento
elementi superiori a 3 e filtrare nuovamente
dato un elemento element Mar 2 2014
vece di esso posso sicuramente fare che
decisione
così dato questo codice quando eseguo il codice
entrambi i pezzi di codice mi danno esattamente
lo stesso risultato l’imperativo e il
funzione del codice di stile ma dall’altra
mano il codice di stile funzionale è un codice
inizia a leggere come il problema
dichiarazione data una raccolta di numeri
fammi numeri che sono più grandi di
tre prendi i numeri che sono pari
prendi il doppio di quello e poi ottieni
me la prima uno e se non me è
zero bene se guardi questo codice questo
il codice è elegante questo codice lo farò
dì semplicemente che questo codice è carino e possiamo farlo
assolutamente d’accordo con quello e possiamo
dì che questo codice è carino ma sfortunatamente
anche se molte lingue ti danno questo
Java fa questo c-sharp fa questo ma
Ruby e Python e chiacchiere e fine
e groovy e JavaScript molto
le lingue danno questo, ma io sono venuto a
realizzazione cupa nella vita e questo è un
la carineria non è sostenibile e questo è
la parte triste quando voglio andare
vedere un bambino molto piccolo un amico o
il parente ti chiama e dice che abbiamo un
piccola e andiamo a visitare il bambino questo è
così piccolo bambino e, naturalmente, quando vai
vedere il bambino la prima cosa di mia moglie
voglio dire è carino e vado al
bambino e dì ragazzo non lo farà
sostenere e questa è la verità che è finita
perché il bambino carino è così carino per
due anni della vita umana alla fine
di due anni quello che diciamo sei fastidioso
parli troppo e questo si chiama a
terribile – così la carineria non lo è
Sfortunatamente sostenibile e questo è
esattamente vero per lo stile funzionale
codice non puoi guardare questo codice e
dì che è carino e la prossima cosa
qualcuno ti vende sì, va bene
com’è andata la performance?
se non puoi fare performance tutto il
la carineria è uno spreco totale nella nostra vita così
vogliamo essere carini ma dove possiamo ma
vogliamo anche dare una prestazione
questo è assolutamente fondamentale quindi in altri
parole regole di efficienza dell’efficienza al
fine del giorno giusto quindi questo è vero
fatto di regole di efficienza della vita alla fine
del giorno in modo che tu non possa semplicemente dire
è carino e piedi che dire
performance che diventa assolutamente
fondamentale quindi
cosa facciamo per l’efficienza di questo
codice cosa se guardo la linea numero 26
e dire che calcolo il risultato per ogni
valore singolo e quindi per numeri pari
e poi raddoppiare quei valori e poi io
ritorna la foresta buttando via tutto il
altro calcolo che un vero spreco ora
pensiamo a cosa succederà
in questo caso particolare, quindi tornare a
questo codice lo riorganizziamo solo a
un po ‘scriverò una funzione
qui chiamato
booleano e il booleano sta per dire è
maggiore di 3 prende un numero e questo
semplicemente restituisce il numero a maggiore di
3 per un minuto in modo simile sarò write
altre due funzioni è la funzione successiva
sarà facile anche e tutto ciò che è
sta per fare è restituire ma 2 è uguale a
zero e finalmente questo sarà a
raddoppiarlo e quale sarà semplicemente
restituire il valore e due volte così dato
questo codice ovviamente quello che voglio fare è
usa quel codice qui ora guarda il
codice di stile imperativo per solo un minuto
come funziona il codice di stile imperativo
solo la parte evidenziata se ti concentri
quando passiamo a 1, dice che 1 non è più grande
di 3 2 non è maggiore di 3 3 non è
maggiore di 3 o 5 è maggiore di 3
ma non è nemmeno ma 4 è più grande di
3 e 4 è addirittura raddoppiato, quindi era 8
calcoli per ottenere il risultato nel
codice di stile imperativo dimostralo così
per dimostrarlo dirò che è più grande
di 3 proprio qui e ho intenzione di allora
diciamo è anche di n o il nostro io piuttosto qui
e poi finalmente sto andando semplicemente chiamare un
raddoppialo qui e ovviamente come a
risultato possiamo passare i dati quando
tutti il codice che cosa sta andando a fare
bene in questo caso ovviamente sta andando
per fornire quel valore andiamo avanti e
assicurati che io stia usando il giusto
funzione qui così quando torno indietro e chiamo
questa funzione puoi vedere sta dicendo
me che saranno 8 calcoli
per eseguire questo codice, quindi cosa fa?
davvero provvedere noi andiamo avanti e
metti quella piccola affermazione qui
Dirò che il chiamato è più grande di quanto dirà
è maggiore di 3 e poi diremo
chiamato qui
diremo è persino e finalmente chiamato
qui diremo il doppio e e
quando scrivo questo codice come si chiama
per bene andremo avanti e diciamo andiamo
avanti e dì più n qui, così possiamo
in realtà apprezzo il valore che è
chiamandolo così e poi semplicemente
dì più n così quando eseguo questo codice
per il codice di stile imperativo che puoi
vedere che ha eseguito un totale di otto
calcoli proprio lì due tre
quattro cinque sei sette otto così otto unità
di lavoro e abbiamo ottenuto il risultato nel
stile imperativo di codice ma il
domanda da porsi è che cosa riguarda il
codice di stile funzionale bene se sto prendendo
dieci valori e confronto maggiore di on
10 che è dieci calcoli che è
morto all’arrivo non è 10 è
più di otto aggiungiamo insulto a
infortunio questo andrà a confrontare il pari
per sette valori nella raccolta questo
sta per raddoppiare per valori e poi
restituirà il primo valore così
che sta per essere 10 più 7 e 17
più 4 sono 21 calcoli quindi se io
diciamo che lo stile funzionale è carino ma
spenderai 21 calcoli
contro 8 stai per dire di uscire
qui così non saremo
tollerando un codice di stile funzionale se questo
si traduce in scarse prestazioni quindi cosa fare
facciamo a questo proposito ben per fortuna questo è
una delle cose che scorre davvero
fornire molto elegantemente, quindi cosa fa il
lo streaming davvero fa i flussi sono davvero
costruito sulla pigrizia, quindi cosa fa?
significa davvero che i flussi sono veramente pigri
bene a capire questo andiamo avanti
e converti questo accordo vero timore e noi
andrà avanti e chiamerà anche l’est
proprio qui e poi finalmente, naturalmente
andremo avanti e chiameremo il doppio
funzione anche qui, ma prima
corriamo questo parliamo di come sia
andando a lavorare ora quando guardi il
in streaming i flussi sono fondamentalmente
pigro ho visto solo queste caratteristiche
tra i miei figli e il mio flusso
I bambini sono fondamentalmente pigri, lo farò
condividi con te un’esperienza che ho visto
nella mia casa la mia meravigliosa moglie lo dirà
Mio figlio , sai, spegni la TV
è come se non fossero state pronunciate parole e poi
lei gli dirà di mettere la spazzatura e
nessun muscolo è stato veramente spostato e quindi
dice a Sam di fare i compiti non a
la matita è stata scelta a questo punto lei
dice semplicemente chiama papà e tutto
funziona e quindi possono essere d’accordo con il nome
Gesù chiamò papà
quindi il punto e alcune case è chiamato
mamma dipende famiglia sempre
dire che i genitori giocano un buon poliziotto e un cattivo
ruolo di poliziotto non puoi sapere cosa gioco così
il punto è che questi sono
chiamato terminale funziona il terminale
le funzioni sono quelle che attivano il
valutazione quindi il modo in cui funzionano i flussi
è quando vai in un ruscello e dici
filtro è come l’aria forse più tardi
hey filtro di nuovo forse un’altra mappa del tempo
bene qualche altra volta e trova prima oh
caro, facciamolo e a quel punto è così
lo farò minimamente ciò che è previsto così
se eseguo questo codice avviso che abbiamo
esattamente la stessa sequenza di valutazione
aiuto chiama a questa funzione non di più e
non meno in questo caso particolare quindi
codice di stile funzionale è efficiente come
il codice di stile imperativo quando viene
al numero di calcoli
esibizioni e pigrizia ci porta davvero
per quello e senza pigrizia lì
non sarebbe divertente usare l’espressivo
natura della funzione di stile di
programmare questo è particolarmente vero con
progetti di big data lavoro con i clienti
che hanno a che fare letteralmente con milioni di persone
di dati che devono elaborare e
quando trattiamo con 70 o 80 milioni di
dati che non possiamo fare inefficienti
computazione pigrizia salva davvero il
giorno per noi e questo diventa assolutamente
critico quindi con quello che abbiamo detto
pigrizia, ma in realtà è pigrizia
portare a così per concludere questo voglio
davvero tornare a questa immutabilità è
questo è essenziale per la valutazione pigra
assolutamente vera immutabilità
essenziale per una valutazione pigra se tu
non avere immutabilità se lo sei
dati mutanti che non puoi rimandare
valutazione sei sempre preoccupato
qual è il valore che sarà
ora e se sta mutando la tua domanda
hai usato il valore prima della mutazione
o dopo la mutazione ma se il valore è
immutabile non importa non lo è
andando a cambiare puoi valutare ora tu
può valutare in seguito o non preoccuparsi
valutando del tutto e puoi rimandare
quello un bel po ‘ con quello detto
pigro porta a due cose che si è
efficienza ma ne porta anche a uno
altra cosa bella che è infinita
flussi infiniti sono così infiniti flussi
abbastanza dannatamente buono per esprimere certo
idee nel codice porta all’efficienza ma
porta anche a flussi infiniti il
l’idea di un flusso infinito deve essere in grado di
generare una collezione illimitata di dati
ma come possiamo creare nel mondo
raccolta illimitata di dati che possiamo
goditi queste idee se otteniamo una buona sospensione
di pigrizia quindi per capirlo
dai uno sguardo leggermente diverso
esempio qui andiamo avanti e dillo
Voglio iniziare con un piccolo esempio di
un campione in cui ho un metodo chiamato es
Prime restituisce se un numero è
primo o meno ma si noti il ​​principale
funzione la funzione principale dice n è
uguale a 101 en pari a 51 costa
un calcolo ma cosa fa il computer
il computer restituirà il totale di
radice quadrata del primo numero primo K
iniziare con n è un problema semplice
proviamo a implementarlo nel
prima lo stile imperativo quindi vado a
Diciamo doppio il risultato è uguale a zero
e voglio restituire il risultato quando sono
fatto con esso
ma poi cosa ho intenzione di fare con questo
sto per dire qui in quello che è
questo indice è uguale a zero o piuttosto
int è uguale a index uguale a n in
il conteggio è uguale a zero bene se tu
avviso qui ne installiamo alcuni
variabili
ma poi dico che il conteggio selvaggio è inferiore a K
e vengo a fermarmi e chiedo
la domanda è meno di K o meno
di R uguale a K non sei ancora allora
Io dico se e sto andando prendere l’indice
valore e dire è primo di rendimento
allora cosa farò allora sono
devo dire che un risultato è più uguale a Matt
grande radice quadrata fuori indice ora se loro
ti chiedo se il codice è corretto sei
dirò no, non è corretto perché no
devi incrementare bene l’indice
allora tu dici che devi incrementare il
conta pure allora dimmi che hai
per aumentare l’indice dentro ma tu
è necessario incrementare il contatore piuttosto
conta dentro un indice al di fuori di come fai tu
sentirsi sul codice come questo è un
esempio di complessità accidentale ora se
scrivi un codice come questo sei tu
fissandolo per scoprire quale sia il codice
sta facendo e quel fatidico momento a
l’analista di business viene da te e dice
hey come sta andando e la tua risposta
normalmente sto cercando di scoprire cosa
il codice ti sta facendo stare zitto
ciò che sentiamo al riguardo , otteniamo
irritato cosa succede se il codice può essere davvero
espressivo non sarebbe davvero bello
dopotutto bene quel codice funzionava ma andiamo
prova a farlo nello stile funzionale
come lo eseguiamo davvero bene?
Lo farò qui è il punto del flusso di ritorno
etere e ne prenderò il valore
finisci per cominciare a dargli un elemento
l’elemento +1 si ferma proprio lì e guarda
quel codice per un minuto in cui il mondo è
questo codice facendo questo è un esempio di un
flusso infinito questo flusso dice che lo farò
darti un valore nn più 1 n più 2 n
più 3 e più 4 n più 5 e più 6
e continua ad andare mai e poi mai fermarsi
dandoti quel valore, so cosa sei
pensando che stai pensando oh mio Dio
se il flusso è davvero infinito dove
nel mondo lo memorizzerai sul
nuvola ovviamente, ma il punto è davvero
che questo flusso è assolutamente senza limiti
beh, la bellezza del flusso è così
valutazione pigra è abbastanza intelligente per
dire che ti darò flusso infinito se
hai il coraggio di chiedere un flusso infinito di
Certo che non chiederemo mai qualcosa
infinito quindi questo è su richiesta è come
tutti i film e solo Netflix
guarda quello che chiedi
non tutto il resto è lì
sembra quasi che ci sia il n
numero di loro non è questo è il tutto
punto che stai per generarlo
al volo sulla domanda e questo è
Pigrizia proprio lì, ma poi quello che posso
fare qui è posso dire dot filter e and
il filtro dice semplicemente dato a
la raccolta di numeri mi dà solo il
numeri primi non altro così dato
tutti i numeri che iniziano con n mi danno
tutti i numeri primi che iniziano con n
poi dico mappa e chiederò
matematica radice quadrata così dato tutto il
numeri che iniziano con n mi danno tutti
i numeri primi che iniziano con n ma
dammi la radice quadrata di tutti quelli
numeri e tu dici ‘non limitare k bene
è K o meno di K o meno lì
è K dannazione, non devi preoccuparti
va avanti e poi puoi eseguire il
somma operazione su di esso molto facilmente come te
può vedere per ottenere esattamente lo stesso risultato
come l’altro in modo da poter vedere come il
il codice diventa molto espressivo e
questo è un esempio di utilizzo di un infinito
flusso per risolvere il problema che puoi
ci sono un sacco di problemi che non abbiamo mai
davvero esperto in linguaggi come
Java perché non ne abbiamo mai avuto la possibilità
creare così facilmente una collezione infinita
ma ora che abbiamo la capacità di avere
un livello di ricerca indiretta la capacità di
davvero rinviare i calcoli che possiamo
trarre vantaggio dalla risoluzione dei problemi che erano
altrimenti anche difficile da immaginare e e
possiamo usare la pigrizia e possiamo usare
flussi infiniti o per risolvere il problema
quindi per me quella capacità di fare davvero
flussi infiniti è uno dei più affascinanti
capacità del linguaggio è questo
ci dà la possibilità di guardare alcuni
algoritmi e risolvere quelli
algoritmi in modi che probabilmente non
davvero immaginato di risolvere in passato così
per riassumere ciò di cui abbiamo parlato qui
la pigrizia è davvero importante perché ora
cosa abbiamo ripetuto quello che abbiamo parlato
sull’efficienza non si tratta di eseguire a
veloce si tratta di evitare un compito che
non dovrebbe essere eseguito eseguito nel
il primo posto quindi, in altre parole, questo è
il nucleo dell’efficienza se davvero
pensateci efficienza non si tratta di
correre veloce significa evitare
compiti che non dovrebbero essere fatti nel
il primo posto così come stai formulando
le tue idee e algoritmi se ci sono
calcoli che possono essere salvati come
un esempio una delle cose che pone
in ciò che porta ad essere anche l’abilità
per rimandare davvero i calcoli al
punto dove forse non devi mai
eseguilo e se non dovessi mai
eseguilo perché perché il tuo codice dice se
Non ho una ragione per farlo funzionare
completamente scartare questa valutazione e io
non preoccuparti di eseguirlo e questo è un
modo molto potente di esecuzione
esprimendo il codice quindi non è solo il
espressività del codice ma il
l’efficienza del codice ti porterà
così come un esempio torniamo al
questo codice e guardalo ancora una volta
se dovessi andare a questo codice dove sono
applicazione del presente codice come come
pigrizia se vuoi ciò che voglio fare
è la possibilità di posticipare le operazioni
ora il codice può essere molto efficiente
il punto in cui non puoi mai essere più
efficiente che non eseguire un pezzo di
codice non è perché se è un codice
nemmeno giustiziato ci vuole il minimo
quantità di tempo rispetto a qualsiasi altra cosa tu
può fornire così tornare a questo
esempio reale veloce se vuoi quando io
esegui questo codice puoi vederlo chiamato all
quella funzione proprio lì sull’altro
mano andiamo avanti e rimuovere questo per
solo un secondo e ho intenzione di semplicemente
fermati alla fine prima proprio qui e a
alla fine di questo sto andando semplicemente
dire fatto quando eseguo questo codice giusto
qui puoi vedere tutto ciò che esce e questo
detto fatto ma la bellezza di questo è che sono
andando semplicemente a tornare a questo codice e
Ho intenzione di commentare solo l’ultimo
parte nel codice e ho intenzione di semplicemente
riavvia questo codice e puoi vedere che è a
fatto non si è preoccupato di eseguire davvero
la facilità persino la funzione o l’ est ‘
maggiore di 3 o doppio 8 e per me
questa è la massima efficienza che puoi
ottenere è che è possibile disegnare questa pipeline
di queste disfunzioni e
ma la pipeline della funzione non lo è
esercitato finché non si allega un terminale
operazione alla conduttura se non lo fai
collegare il funzionamento del terminale ovviamente
quindi l’esecuzione non è realmente basata
le sue prestazioni ed efficienza sono di
evitando tutti i compiti che non ha reali
beneficio o nessun vantaggio reale e quello
è dove l’efficienza arriva così
se sei interessato a scaricare il
esempi di codice a cui sei più benvenuto
il download dal mio sito web lo sarò
felice di ascoltare le domande che potresti
avere
tu

Please follow and like us: