
quindi chi nella stanza è uno sviluppatore Java
ok, questo è al cento per cento in questo
gruppo okay mi sta calibrando così
chi non era tutti gli altri
interessante quindi chi ha mai fatto niente
tipo di haskell me Rhonda o cammello mlss
00 secchio qualcosa così questo va bene a metà
del pubblico che è interessante
perché presumo che non ti piaccia questo
tipo di linguaggio con il
passione non saresti qui così io
Supponiamo che ti piaccia, che è buono
e tu presumo tu voglia vedere l’output
lavorare sulla JVM su cui può funzionare
forse la JVM e quando ho iniziato il mio
sforzarmi quando ho guardato dentro
Haskell la mia impressione è stata che io sono il
solo una delle piante del pianeta che
fa java e Haskell allo stesso tempo
e sono davvero in grado di essere sorpreso e lo sono
piacevolmente sorpreso di vedere che c’è
una sovrapposizione che ovviamente siamo
rivolgendosi a Vega siamo ma anche essere
rivolgendosi al secondo gruppo in modo che le persone
che non hanno ancora visto queste lingue
e saremo curiosi di sapere cos’è
diversi ci concentreremo anche sul
prima metà del discorso su ciò che è
diverso da quello che cronometro metro ho
ha lavorato per la canoa a Basilea in Svizzera a
iniziare con e in particolare per il
secondo gruppo che ha fatto principalmente
programmazione imperativa in passato lo farei
Mi piace leggere un programma e chiederò
tu quello che fa il programma va bene
una specie di sfida nel pomeriggio a
contiene cinque righe di codice
tre variabili a B e C
e quando dico uno uguale a quello che ha
semantica del valore che significa che il valore
uno viene assegnato alla variabile ay ay
è uguale a uno scritto come lo sai
ok va bene per tutti così
ecco una sfida cinque righe di codice a
equivale a 1 ottenuto B è uguale a C è uguale a bb
equivale aa uguale a vedere qual è quel codice
facendo un po ‘di aggiustamenti a modo mio
sta peggiorando, sai quando ci provi
per ottimizzare l’ipotesi, ciò che peggiora è
qualcuno ha un rasoio con loro così
comunque così idee che cosa il programma
stava facendo capovolgere due valori molto bene
c’era qualcuno nel pubblico così io
ora darti una lettura di quello che sei
la mente stava facendo quando cercava di seguire
questo programma così ora arriva il
parte di ingegneria di cui avrò bisogno
per la codifica sinistra comunque così hai
per farcela , ho paura di essere così alla pari
1 quindi c’è la posizione di memoria per il
variabile a che ora contiene 1 B uguale
2 ecco qua
c è uguale a B okay a e B rimangono uguali
ma poi il valore di B viene copiato
fino alla posizione C mm-hmm p è uguale a a
così a e C rimangono gli stessi ma poi i
valore nella posizione di un viene copiato
oltre hmm è uguale a C so B e Steve sale
è rimasto lo stesso ma quello che una volta è stato copiato
oltre a cui si aggiunge il valore
di B ora viene copiato in un così questo
sono i passi che dobbiamo seguire il
seguiamo nella nostra testa seguiamo questi
operazioni e come ingegneri su Java
piattaforma utilizzando principalmente il codice imperativo
questo è il tipo di ragionamento che noi
applica ogni giorno anche noi siamo un
gruppo auto-selezionato conosci persone che
hanno enormi difficoltà a fare questo
tipo di giocoleria mentale che non rimangono
anche in programmazione molto tempo fa
frustrante per loro ma immagino che tu
anche d’accordo che per questo piuttosto
operazione primitiva di flipping o
scambiando due valori il numero di
passi e la quantità di considerazioni
quello che dobbiamo fare è piuttosto alto
prezzo è piuttosto alto per un po ‘fuori
cap e questo perché non solo noi
devono interessare tre diversi
luoghi che il nostro cervello è piuttosto buono e
preoccuparsi dei posti ma il cervello no
molto bravo a prendersi cura di questi posti
in vari momenti e perché noi
avere il tempo a tutti in questa cosa si tratta
a causa di incarichi di incarichi
introdurre la nozione di tempo nel codice
tutto ciò che è accaduto prima del
incarico e tutto ciò che è successo
dietro dopo l’incarico questo è
dove prendi il tempo nell’equazione
qui e questo significa che anche per questo
operazione primitiva
dobbiamo preoccuparci di nove diversi
afferma come vedi qui quelli iniziali
qui è solo la definizione ma
allora abbiamo nove stati diversi i
memoria a breve termine dell’umano medio
e sono abbastanza sicuro che tu sia al di sopra di questo
il numero è nove puoi gestirne nove
pone la media è 7 più meno 2
meno 5 e se provi a ricordare cosa
è successo a te quando hai seguito le mie battute
di codice presumo che da qualche parte
qui o qui la tua mente ha rinunciato ora questo
è come puoi giudicarti che puoi
stimare quanto è grande la vostra c’è un sacco di
la memoria è perché è piuttosto difficile
per il cervello e solo alcuni coraggiosi
hanno seguito attraverso così stumped fino a
tu, Gesù, indovina anche che va bene
buona ipotesi, questo è e perché noi
devono seguire queste operazioni per
motivo per il codice questo è chiamato
ragionamento operativo hmm ora se questo
la piccola cosa è già piuttosto difficile
così difficile che la maggior parte di noi non può fare
nella testa abbiamo bisogno di alcuni strumenti
supporto per questo tu sai che abbiamo bisogno
supporto di strumenti che ci dà
informazioni a che punto nel tempo nostro
le locazioni di memoria avevano quel valore e questo
è chiamato il debugger il motivo principale
di gran lunga il motivo più importante
per un debugger è questa la nozione di
programmazione basata sull’ora e il
nozione di tempo combinato se non lo fai
è così drammaticamente meno
fare per un debugger e immagino che tu
già stato lì così tu ne fai un
guarda variabile su uno di quelli e poi
lo fai da solo per vedere cosa
si svolge nell’operazione buona che ho
recentemente ha spiegato questo ai miei genitori
mia mamma ha 75 anni, mio padre ha 80 anni
anni e non hanno alcun tecnico
allenamento qualunque e mi chiedono ragazzo
cosa stai facendo e ti ho detto bene
sai cos’è questa tazza di caffè qui
un a e questo bicchiere d’acqua è un B e
allora vogliamo scambiarlo con l’io
non posso semplicemente metterlo in quello che so
Inoltre non funziona così mio padre che hai
avere una conservazione temporanea sull’acido
come un programmatore sì e spostalo
finito e questo qui e poi controllare
fuori tutto questo e lo facciamo dentro
ho detto la nostra testa e i miei genitori hanno questo
la fase del povero ragazzo povero spiega questo
qualcosa e ma abbiamo capito qualcosa
fuori sono attualmente con questa nuova cosa
abbiamo una nuova idea che chiamiamo funzioni
e funziona come così abbiamo messo questo
Cattolici qui e abbiamo questo
bicchiere d’acqua qui e poi noi
lasciarlo così e non cambiarlo mai
di nuovo e chi guarda questa cosa
vede sempre un caso di stato coerente
chiuso sai per definizione e poi
mio padre ha detto sì grande ragazzo che hai detto a te
volevo vederlo scambiato proprio così
detto di sì vederlo scambiare è facile
ha preso le sue lezioni e ha detto solo
immagina che questi abbiano questi regali
classi dove io e tutti vediamo la sinistra
a destra e così giusto ci sono
quelle lezioni su internet se tu
voglio te e poi lo vedi così ma
questo interferisce con nessuno che tu possa avere
migliaia di persone stanno guardando questo
informazioni e tutti hanno differenti
gli occhiali si guarda solo al primo
versioni ed era un secondo valore e cosa
ha solo un filtro più e nessuno
interferisce con qualsiasi altra cosa con
chiunque altro e c’è sempre un
stato coerente che è molto più facile se io
ti avrei detto all’inizio a
la virgola P equivale alla B virgola a che avresti
ha indovinato più veloce quello che il ragazzo sta facendo
piuttosto sicuro
quindi abbiamo una nuova idea, la nuova idea siamo noi
sbarazzarsi di questi incarichi loro
sembra essere pericoloso e gli incarichi sono
solo una speciale incarnazione di affermazioni
quindi anche solo in una dichiarazione obiettivo
escluso ora se non hai
affermazioni nel linguaggio di programmazione voi
inoltre non hanno bisogno di strutture di controllo
più perché struttura di controllo
controlla il flusso delle operazioni e tu
non avere più operazioni no
dichiarazioni in modo da non aver bisogno di controllo
strutture così da domani mattina in poi
programmiamo diversamente no
incarichi senza dichiarazioni nessun controllo
strutture come sarebbe questo sarebbe
un po ‘sarebbe diverso, sai
la domanda è che possiamo fare
lo fai davvero e in realtà ce ne sono due
modi di farlo la pillola blu e il
pillola di ram la pillola blu è tutto
che mi piace molto questo controllo nel
la conferenza è stata una pista molto buona
contenuti interessanti molte intuizioni
sulla programmazione della maggior parte di esso funzionale
programmazione in questi giorni, ma la pillola blu
era la pillola blu che abbiamo visto
finora imponente sviluppare una disciplina
siamo stati nel primo a parlare di questo
la mattina in distrazione un po ‘sì, va bene
sfida io il continuo il
la dichiarazione ripetitiva era e poi noi
stabilì una convenzione di fare solo
questo lo sai e poi ci siamo accontentati del
convenzione di non farlo mai così e
questo ci ha tenuto in carreggiata per il funzionamento
programmazione sai che devi imporre
disciplina in un modo o nell’altro maybes
strumento di supporto o in una certa misura
lingua supportata in altre lingue
ma l’unico linguaggio che ti dà il
pillola rossa dove ti sbarazzi del vecchio
cosa metrica e inserisci la nuova parola
della realtà sta usando un puramente funzionale
linguaggio che non ha nemmeno un
notazione per un segno
non c’è niente per cui non c’è sintassi
compito che non puoi svolgere
perché non c’è sintassi per questo lì
non c’è sintassi per le affermazioni che non ci sono
strutture di controllo nella lingua così
questo tipo ti costringe in un modo nuovo
di pensare e usare una nuova programmazione
linguaggio sulla programmazione alternativa
la lingua ha senso solo se costringe
a pensare in modo diverso al tuo
soluzioni non si tratta di superficiale
differenze sintattiche il superficiale
differenze sintattiche che vedremo
oggi sono lì solo per ricordare
le fondamentali differenze sottostanti
ed ecco la nostra idea per puramente
linguaggio funzionale che mostrerò
un po ‘di codice se vuoi puoi seguirlo
gli esempi di codice in linea c’è un
ripple online leggere eval print loop dove
puoi provare quel codice che mostrerò un po ‘
un po ‘di codice qui non in ritardo, vivrò
con la codifica dal vivo per darti la gioia di
vedendomi fallire così um e dal
modo per i madrelingua non tedeschi
la parola fig è un po ‘diversa
difficile da pronunciare così sei
Ho il diritto di chiamare quello strano, se vuoi
così qui viene um con cui stiamo lavorando
funzioni da cui è stato creato tutto il nostro codice
Frank brilla per costruire l’intero linguaggio
dalle funzioni nessuna sorpresa c’è molto
del supporto linguistico per le funzioni
perché è tutto ciò che fa ed ecco come
tu ne definisci uno così e lo sarà nel Revel
diciamo che definiamo una funzione chiamata
volte richiede due parametri a e B
e restituisce una volta B questo è come noi
definire una funzione sembra un po ‘
prima non familiare da Java
prospettiva prima non vediamo alcun tipo
è un tipo non tipizzato o dinamico
digitato che cosa è tipo solo JavaScript
II cosa no come vedremo come facciamo noi
applica bene una funzione che possiamo semplicemente dare
i parametri come così nel più
moda silenziosa che puoi pensare al
l’operatore per l’applicazione della funzione è
spazio e questo è in realtà il tema di
questa conferenza sta andando a nuovi spazi
o qualcosa va bene così che siamo noi
usando lo spazio qui vai nello spazio che mi piace
il keynote così tanto il ki migliore sa
che io abbia mai visto così stiamo usando
spazio qui, quindi questo spazio è qui
in realtà un operatore che prende questo
funzione e la applica a questo argomento
e poi al prossimo argomento vedremo
come sembra nello stesso modo io no
sorpresa che restituisce 6m e possiamo chiedere
il ribelle per il tipo di volte che io
ha detto che c’è un tipo che non è senza orario
e il tipo sembra un po ‘pazzo, lo faremo
vediamo cosa significa in un secondo
ottenere un aiuto, quindi non abbiamo avuto momenti
ha dichiarato i tempi in cui si trovano i tipi
terzo non abbiamo nemmeno dichiarato i tipi
dei parametri Vega e lo farà ancora
avere inferenza di tipo globale che significhi se
non vuoi quasi mai averlo
scrivere qualsiasi tipo e ma non importa
quanto piccola o grande è la tua
il linguaggio è sempre completamente
digitando per questo ho detto che questo spazio
qui è di un personaggio vuoto
denotando l’applicazione della funzione
Operatore bene sarebbe un pochino
più corretto dicendo che è il
giustapposizione di questi due li metti
accanto a ciascuno l’un l’altro quindi
più corretto dirlo ma puoi anche farlo
puoi già dedurre tutto il resto
che ho intenzione di dirglielo nel
i prossimi cinque minuti da quella informazione
e questo significa che è vero questo
significa che questa espressione qui e da
il modo in cui l’applicazione della funzione viene lasciata
associativo come operatore, quindi non c’è
implicitamente come le parentesi qui così
significa che x è una funzione è quale
è applicato al numero due che cos’è
questa espressione sta valutando troppo bene
poiché è giustapposto ai tre
deve valutare una funzione ok così questo
deve essere una funzione che applichiamo in seguito
a tre ehi tutti i tuoi liceali
fricassee fresco quindi se chiediamo il momento
in realtà ci dice questo dice questo
freccia significa che abbiamo una funzione da qui
a qui e le funzioni hanno sempre solo
un argomento e esattamente un argomento
dice bene x due x scusa x ecco a
funzione che prende una discussione questa
e ritorna come abbiamo visto restituisce a
funzione che prende in un altro un che
è il numero tre e ne restituisce sei, quindi questo
è come lo leggi e sulla mano sinistra
lato questo è chiamato un vincolo che puoi
leggi questo come interfaccia Java da allora
usiamo x qui che funziona solo per
valori numerici cosiddetti di tipo classe
qui, ma salta un po ‘
quello così se guardiamo in questi tempi
2 poiché lo sappiamo già
espressione denota una funzione grazie
possiamo fare riferimento a questo, possiamo usare x 2 e
dargli un nome ora cosa posso fare
quel nome bene possiamo applicarlo ad alcuni
numero dandoci 6 hmm se chiediamo il
tipo di due volte quello che sarà
mm-hmm c’è un numero di opzioni che cosa
potrebbe succedere che ci tenga in int è a
funzione da intero a intero perché perché
non intorpidito o qualcosa perché noi
l’ho già specializzato in un
intero non può più essere tre a
doppio o un galleggiante o qualsiasi cosa perché noi
l’ho già specializzato e questi
i tipi devono essere esattamente gli stessi tipi
sono stati acquistati entrambi di tipo alfa a destra
lì per ora potresti notare questo spazio
qui in questo spazio c’è per a
motivo se pensi in termini java da
Prospettiva Java se confrontata
questo in un modo in cui fai i metodi
Java ti aspetteresti che ci sia un
parametro formale per cui si chiama giusto
questo argomento ti piacerebbe vedere un
parametro formale nel braccio in
il tuo tipo giusto hmm puoi effettivamente
pensa a un parametro del genere che puoi
immagina un tale parametro se vuoi te
diciamo che ci sarebbe una X allora per
chiamando x 2 avremmo anche bisogno di fornire
la X destra è che va bene così
in realtà come in matematica puoi farlo
questo è come un’equazione in matematica
puoi estendere un’equazione ma la tua
l’autunno può annullare i termini di un
equazione quindi se sei come in Germania
si dice tenda a destra è possibile annullare
la X di te è hesco valido
compresi quelli grigi ma è possibile
cancella la X che puoi dividere
X se tu quella è l’analogia di
in realtà la moltiplicazione sta applicando a
funzione lineare in matematica così è
questa è l’analogia in cui viene
da te puoi cancellare la X che è la
tipo di operazioni che puoi fare
equazioni in tutto il tuo storico Joe
La corrente di Haskell diventa hasta la Vega
il codice diventa una serie di equazioni che
tu risolvi e puoi lavorare con esso come
un’algebra che ovviamente non è
possibile in qualsiasi lingua che abbia
dichiarazioni o incarichi sempre
questi questi annullamento di questi termini
Direi che a volte viene chiamato currying
buone ragioni a volte presto rugose
da Mosè a e ruga che ha fatto il
lavoro teorico su questo ma in realtà
questo tipo di concetto di avere funzioni
che sono usati come argomenti ad altri
funzioni o funzioni che sono
restituito dalle funzioni è il primo
descritto da God la Vega nel pomeriggio
1891 in quello che è successo lo ha fatto
molte pubblicazioni possono uscire dal pane
pan correttamente sul concetto di numeri
o qualcosa non era sul concetto
notazione Devo cercarlo, ho dimenticato
che comunque forse non è così semplice in quattro
volte più specifico e quindi siamo in grado di
facciamo anche la composizione delle funzioni così abbiamo
definire una funzione usando una funzione
applicare una funzione utilizzando parti di a
funzione e ora combinando le funzioni così
diciamo che facciamo qualcosa come due volte
di tre volte due bene come un Java
programmatore presumo che questo ora
fa quanto segue si applicherebbe tre
valuterà tre volte per dare sei
e poi applicando a x 26 ci piace il
Modo Java di fare le cose che si chiama
valutazione rigorosa si sempre prima
valuta i tuoi parametri in un determinato
ordine per lo più da sinistra a destra nella maggior parte
le lingue
e poi lo applicate questo non è il
caso in flag e Haskell perché a
sono stati troppo pigri per il liceo
lee valutano solo questo se necessario
e c’è una buona ragione per questo
bene così che comunque questa regione ha 12 anni
ci aspettiamo ma possiamo scrivere questo in a
anche in modo diverso quindi le due volte
e tre volte le nostre funzioni e possiamo
componga queste funzioni in esso sei
volte hmm con questi punti nel mezzo
e questo punto è prendiamone un po ‘
aiuto per questo e sei volte possiamo
applica questo e ottieni il tipo di sei volte
che è alla fine, naturalmente, prendiamo
un po ‘difficile per questo ora questo qui è
come una funzione f applicata al risultato
di una funzione G applicata ad alcuni X a destra
la posizione matematica che puoi
ricordalo dal liceo e dal tuo
l’insegnante di scuola superiore potrebbe aver menzionato
che puoi scrivere questo come F
composto G è corretto vero sì
e si applica a X, quindi questo è il termine qui
è un nuovo funzionale questo è il nostro sei
volte giusto puoi fare lo stesso
trucco che abbiamo fatto prima di poter mettere il
uova di nuovo puoi mettere le uova sopra
qui sei volte x due x + 3 x messo dentro
parentesi nei sei qui ancora
lo stesso codice funzionerebbe ancora, ma noi
lo hai già cancellato così puoi
comporre funzioni perché il primo
i cittadini di classe nella tua lingua sono chiari
domande lontane finora bene così
tutto questo funziona solo perché abbiamo puro
funzioni e dal momento che abbiamo un sacco di
liceali nella stanza che conosci noi
come due mesi fa abbiamo avuto il giorno della bandiera
in canoa a Basilea e abbiamo fatto un sacco di
interviste in ogni intervista ad alcuni
punto aspetta che io chiedo perché sei qui
ciò che è speciale e hanno detto in alcuni
punti ho detto che sai di cosa si tratta
puro e si poteva sentire il colpo
endorfina che attraversa il corpo quando
dicono puro e come un liceale I
direi che non è endorfine che sono
un colpo di endomorfismi così buono così
perché ci preoccupiamo molto della purezza se noi
avere un metodo java sotto qualsiasi nome e noi
vedere la firma del tipo in n
implementazione e non ci fidiamo di
commenta cosa potremmo dire di qualsiasi
metodo dal suo pozzetto di firma del tipo
diciamo tecnico dice solo che prendo un
un paio di te e te quando torno
qualcosa di tipo T che cosa sono
facendo bene molto probabilmente restituisce il
il primo elemento della coppia ha dato un ritorno
nullo sì certo che potrebbe essere gettato su
l’eccezione sì, naturalmente, stampa codificata
per standard fuori sì, naturalmente mettere un lucchetto
sì, certo, è andato nel database
sì, certo, vai a leggere dal
il database sì forse non poteva fermare il
missili e fermare la terza guerra mondiale di
Certo, a destra chi se ne frega hmm gonfiandone uno
liceo se hai questo tipo di
tipo di firma dicendo che ne prendo un paio
alpha beta Ritorna alfa per ogni
calcolo che finalmente lo detiene
la restituzione finale è l’unica possibile
l’implementazione di ciò sta restituendo il
Alpha nient’altro può mai accadere
prima non c’è null che significa
non c’è anche la notte in cui il
eccezioni
se ci fosse qualche tipo di lato
effetto come leggere cose scritte e così via
sarebbe visibile nel tempo così a lungo
Per farla breve, tutto può succedere qui
sai esattamente cosa succede qui
è un tipo di firma del tipo in cui
in realtà lo strumento può dedurre quello
possibile implementazione del metodo
ci sono in realtà strumenti che lo fanno se tu
voglio che non sia possibile
per ogni funzione per farlo va bene
una pura funzione una volta che abbiamo
ci siamo convinti che abbiamo un puro
funzione di negozio ed è ovviamente
possibile scrivere funzioni pure in
in tutte le lingue puoi farlo
assemblatore se vuoi bene è il tuo
disciplina dello sviluppatore di farlo in gioco
go Haskell abbiamo il tipo di sistema di
dicendoci se è puro o no e
perché il sistema di tipi lo rivela
informazioni qualsiasi strumento in particolare il
il compilatore può usare quell’informazione se noi
chiamare la funzione coseno con un punto o
restituisce uno zero non so qualcosa
ok se lo chiamiamo di nuovo con lo stesso
valore restituirà lo stesso valore di te
sai che puoi memorizzare questo in contanti
è possibile poiché non vi è alcuna nozione di
tempo comunque in una pura funzione che puoi
valutalo in qualsiasi momento prima che lo faccia
usato puoi farlo pigramente puoi farlo
in anticipo speculativamente quando il
i computer sono comunque in buone condizioni, lasciaci andare
valuta alcune espressioni puoi farlo
contemporaneamente quale è la grande cosa
sulla programmazione simultanea e
programmazione parallela senza alcun timore di
tronchi morti e condizioni di gara e
qualunque cosa se hai codice come x 2 3
volte 2 3 volte 2 3 volte 2 3 il
compilatore o forse il tuo ID può dire bene
lasciamolo rimuoverlo e refactarlo dentro
un termine che abbiamo all’inizio
questo è ciò che puoi fare solo con puro
funziona se hai una funzione impura
con un effetto collaterale diciamo
system.currenttimemillis qui qui qui
qui qui non vorresti refactoring
quello giusto giusto per una ragione
che tu trovi il tempo che è in un certo
punto di valutazione in modo da poter eliminare
espressioni secondarie comuni e tutto questo è
un problema di ottimizzazione hmm e in realtà
questo si apre in una vasta gamma di possibili
refactoring che le ides potrebbero ora
applicare in modo sicuro la maggior parte dei rifacimenti dal
l’idea è che si ottiene dal tuo IDE a
il momento in cui uno sviluppatore non è davvero
sicuro che è più come proposta è se
ti suggerirei di poterlo refactoring
in un metodo di estrazione o qualcosa di te
sappi che non è molto sicuro finché tu
non può garantire la purezza ma ora potrebbe essere
sicuro che potrebbe essere contrassegnato come umano qui
uno sicuro per te per favore chiedi al tuo IDE
fornitore per sostenere questo è
ottimizzazione che gli strumenti possono fare
ma anche che lo sviluppatore può fare ora
potresti esserti trovato in questo
posizione dove eri ne hai un po ‘
metodo potrebbe contenere un back in UNIX
leggi attentamente da dove proviene la parte posteriore
qualche cambiamento di stato che non dovrebbe essere
lì o si considera dov’è quel palcoscenico
effettivamente cambiato o posso refactoring
o posso chiamarlo questo è il thread sicuro
posso chiamarlo in Kerala e tu no
semplicemente non lo sai, quindi cosa fai?
si guarda l’implementazione e il
l’implementazione dice che coinvolgere ae B
e C e poi vai nel
implementazione di ae quindi ispezionare
questo e poi in B & B chiama ABC BD
diesel e alla fine si finisce così
questo è da un vero progetto così tu
devo ispezionare un percorso e questo è solo
in realtà è un ramo dell’albero
rifiuti in realtà così e dopo una settimana di
ispezionando il codice che hai convinto
tu sai che è sicuro che posso chiamare
esso
e tu lo fai e poi il giorno dopo alcuni
il programma della tua squadra arriva e cambia
diciamo qui e il sistema stampa
linea perché ne ha bisogno che dal
modo totalmente mina tutto il tuo parallelo
ISM perché si sincronizza su
altro estremo e così via così
qualunque sia l’effetto di quello forse forse
solo calo delle prestazioni o qualsiasi altra cosa
nessuna possibilità di sapere che l’ hai fatto
ipotesi silenziosa non hai possibilità di
sapendo che ha rotto il tuo silenzio
Assunzione è tutto pieno di silenzio
ipotesi e questa è la causa di
borse come fai a girare questo manuale
l’ispezione non funziona così l’unica
cosa è che possiamo chiedere al sistema di tipo se
il sistema di tipo ci dice e lo tiene dentro
posto che tutto questo è puro allora noi
non dobbiamo più ispezionarlo
chiedo bene al sistema di tipo devo andare
uno indietro nella già esistente ora praticamente
ogni lingua sul jet arriva ora
nei prossimi cinque minuti arriva il grande
differenza di Vega tra tutti gli altri jvn
lingue e punto unico di Vega che
Non ho visto in nessun altro linguaggio così
lontano e viene da questo punto qui
Diciamo che ho una lingua super duper
assicura purezza attraverso il tipo
sistema qui in questo in questo codice bene
con il sistema di tipi, ma qui sotto o
in qualche modo intendo un po ‘di più il
la catena della bobina è una chiamata in Java che chiamo
in Java Oh system.out.println attuale
Sono Millie, qualunque sia il metodo java
praticamente tutte le lingue JVM va a
la radice di dire bene non appena tu
chiama in Java tutte le scommesse sono corrette
è colpa tua se non ha così tanto ragione
fai clic su di esso per un’altra strada Vega
dice bene
non ci uniamo a quel livello che facciamo
una netta distinzione tra la nostra
mondo puramente funzionale e l’oggetto
orientato bene è un imperativo stabilito
java volt lo rendiamo estremamente chiaro
distinzione possiamo chiamare entrambi i modi
noi non mescoliamo noi non mescoliamo i due
paradigmi manteniamo la nostra squadra pulita se tu
voglio chiamare da una figura in una scusa
da Java a Frager è facile
parte perché Vega si compila in java
codice sorgente che genera sorgente java
codice e quindi utilizza Java Sea per compilare
in codice bytec in modo da avere sorgente java
codice che gira intorno bene questo è possibile
chiama da qualsiasi modulo java comunque così è
java a java va bene, se vuoi
per vedere che tipo di codice Java genera
puoi anche chiedere alla pace di perdonarmi
la versione java di questo codice figura
da Vega a Java è interessante
parte bene ora dobbiamo distinguere noi
devo dichiarare e dobbiamo farlo non lo è
facoltativo dobbiamo dichiarare il nostro silenzio
ipotesi su cosa sia il codice java
farlo potrebbe essere nascosto nel
implementazione o forse nel farmaco API
o qualunque siano le nostre ipotesi
esplicito dobbiamo dichiarare esplicitamente
cosa pensiamo del tipo di java
il metodo sarebbe in tre termini quindi per
esempio Java net il tuo codificatore L L
è una funzione statica si potrebbe sapere che
ed è una stringa da stringa a cui dargli un
stringa e restituisce la stringa stringa è
immutabile non fa solo effetti collaterali
funziona sui parametri è puro che posso
chiamalo ora da Vega come codifica questo è
il metodo che gli assegno dice caro
cronico e poi sostituisce vuoto con
Non so inviare 20 o qualcosa del genere
bene tutto bello e ordinato proprio tutto
è ancora puro
quando uso questo metodo quando lo uso
funzione il mio codice è ancora puro che abbiamo
altri metodi e in realtà molti metodi
sono impuri diciamo che il poster è figlio
l’ora corrente Millie ci vuole proprio come
un maledetto parametro se vuoi e
ritorna bene questo è un lungo in Java ma
diciamo bene che non è solo tanto è un
I / o lungo e questo perché ora il
a lungo è in qualche modo macchiato, sai che è così
sporco sai se sei il tipo di sistema
ora sa che questo è sporco e io
lungo è in realtà più simile all’inazione
non è il tempo stesso è l’azione
che ti daresti il lungo e io
può chiamare il Medio Oriente ma solo dare
è l’unità ma se mi piacerebbe se io
voglio chiamarlo devo essere che lo fa
me stesso sporco ma soprattutto se voglio
tipo di fare aritmetica con esso questo fa
non compilare dice quando il mio contratto di locazione non è
un lungo che non puoi calcolare con un IO
tanto prima tu stesso devi diventare
sporco devi cambiarti con
IO e poi ti darei il tempo
e poi può fare tutto ciò che vuoi
fare, ma che vi farà in modo che il sporco
il chiamante si sporca e tutti quelli che
mi chiama ma anche sporcarsi e lui e
lui e lui fino a quando il main main è, naturalmente
sporco fa qualcosa senza riscaldamento
la CPU è che sta facendo qualcosa così
questa è la distinzione chiave tra l’autunno
attraverso a tutte le altre lingue sul
JVM in realtà era questo il punto
mi ha venduto sul progetto quando ho visto questo ho
sentivo come se tu sapessi che c’è qualcuno che
sa cosa sta facendo una lunga storia
In breve puoi pompare una chiamata fasulla in
Offerta Java è una specie di cosa intima
non farlo senza protezione quindi un secondo
la seconda cosa che ora indovinate è quella
hai un’inferenza di tipo globale da allora
non hai dichiarazioni in merito
il silenzio non è privo di strutture di controllo
questo e questo è difficile da rivelare in
questi 50 minuti da questo ottieni un
quantità di sicurezza strutturale sul tuo
codice il codice è in realtà come lo era
sapendo cosa stai facendo non lasciarlo
tu esci e riusci le cose dentro
contesto incerto e così via quindi lo sa
strutturalmente molto bene quello che stai facendo
e ti guida ad una soluzione corretta così
se molto più sicurezza e per pochissimo
prova per un prezzo molto piccolo, quindi se non lo fai
vuoi pagare qualsiasi prezzo per te
non fare nulla nel sistema di tipi
hai ancora il tipo di sicurezza e
ecco come lo userai
sono tutti i tuoi calcoli puri
isole in un mare di codice imperativo in
il mare del codice sporco hai cose
che sono mutabili anche nel tuo lavoro
applicazione basata su java e che faccio io
oh e mutevole I oh e database e
ma non dentro di te ci sono isole di
calcoli puri in questo modo possono ragionare
sull’equazione, questa è l’idea e
il sistema di tipi assicura che una volta quello
qualcuno è sporco che non può sfuggire
più è come un contesto che tu
non può scappare e nella prima parte
quelli sono thread sicuro per costruzione
e se hai qualche errore nel tuo
il tuo multi threading in parallelo
qualunque soluzione tu possa escludere un enorme
numero di possibili errori che non hai
guardare dentro quelli perché non possono
fallire e poi come tecnicamente questi
le cose qui sono chiamate monadi
comunque finita è solo un nome e
Ti mostrerò alcuni codici live I
Immagino che forse faremo un pochino io
potrebbe essere necessario qualche minuto in più rispetto a
50 e questo è il problema di fizzbuzz chi
ha mai sentito parlare di fizzbuzz quasi
tutti quindi non puoi numeri per
ogni terzo numero tu dici tasse e per
ogni quinto numero che dici che buzz e
quindi contando da uno a 100 come
questo è un molto spesso è un’intervista
domande e colloqui di lavoro alcune persone
Diciamo che sono giochi per bambini alcune persone
lo uso comunque come gioco bevente
se chiedi su Internet per
possibili implementazioni di questo qui
colpisci il numero uno, questo capita di essere un
codice imperativo ed è in realtà lo è
Java ma è il punto non è questo
è Java ci sono soluzioni molto migliori in
Java come bene, ma questo è una specie di
modo convenzionale di scriverlo in Java
e il punto è che questo è tipico
imperativo si può scrivere questo in C è
la soluzione guarita sarebbe anche così
hai un ciclo for e molti cambiamenti
stato e poi devi pensare
conosci il punto in cui tre e cinque
si riunisce questo è s a 15 e noi
devi prima coprire questo caso e poi
arriva gli altri due casi speciali
casi e poi arriva con Kaiser generale
okay, facciamo una specie di codice tipico chi
avrebbe scritto questo tipo di codice a
risolvi il problema Oh almeno due o
tre ottime volte l’ultima volta che l’ho chiesto
i loro non erano nessuno e quello era un
mentire, ovviamente va bene così è un po ‘
il modo convenzionale e come un pensiero
l’idea di una nuova lingua è questa
dovrebbe farti pensare in modo diverso
il problema in una possibile soluzione così
diciamo se chiamiamo la fregata Apple
questo è javafx oh mio Chris piccolo
comando un po ‘più grande P è scritto in
la figura sta usando javafx tre
componenti comunque così la prima cosa è
non abbiamo per ciclo sì
okay, non possiamo farlo andare a casa, okay
quello che possiamo fare è usare la gamba
di un estremo una sequenza infinita di
numeri questo è qualcosa che abbiamo
disponibile ed è indicata ama così uno
punto e se valutiamo questo ci dà
tutti i numeri naturali mentre il sonaglio
è abbastanza intelligente da non darci
tutti i numeri naturali ma a causa del pigro
valutazione possiamo effettivamente limitare questo
okay comunque questo automatico mentre ci serve
quelli da quando vogliamo stamparlo non come
il numero ma come la stringa così siamo
nel prendere questo e noi stiamo mappando tutti
singolo elemento nella sua stringa
rappresentazione che stai mappando questo e
poi su Vega e haskell si chiama
mostra invece di due string e siamo
prendendo questo un tuffo vediamo questa aria
le stringhe in modo visibile dal set posteriore
si, va bene così e gli diamo un nome questo
i numeri vanno bene torniamo
controllare i numeri è un elenco di stringhe buone
i numeri sono questo ora abbiamo bisogno di un qualche tipo di
nozione in cui diciamo che ogni terzo è un
Fizz okay come possiamo fare questo bene noi
avere una lista è una stringa vuota in un
la stringa vuota interferisce bene e poi se
vogliamo avere una ripetizione infinita in
ripetizione infinita di ciò che possiamo dire
beh, per favore passa il ciclo ci dà il
la storia definitiva visitata senza fine
ritmo freddo diamo un nome al
Fizzes
ci hmm che ne dici di ronzare bene tu
sai già che il trucco rende lo stesso per
ronza questo ismo Potrei usare una ripetizione
qui ma comunque rendono questo molto più facile
ronza così quali sono i ronzii
deliverables meglio il meglio sminuire
migliore fattura e ronzio bene ma il
i requisiti dicono che dobbiamo tipo
combinare fizzes e puzzle è questo è
regole di business giuste e se arrivano
insieme i fizzes devono venire prima e
poi ronza come se ci fosse una specie di
si sovrappongono quindi ci facciamo uno schema
da questo dobbiamo infinito
produzioni di archi e noi combiniamo
loro elemento vice the pops up in squadra
zip come una cerniera sui pantaloni proprio così
questo è il nostro theta equivale al suo nome zip
e lo stiamo immergendo con una funzione
la loro colpa scivola con e la funzione
che usiamo è la concatenazione di stringhe
che sembra che viene indicato con
plus plus e stiamo usando le fasi e
i ronzi per farlo, quindi qual è il
modello ci ronzio ronzio visibile ronzio
e il numero 50 15 è fizzbuzz finora
bene ma non ora sui numeri che noi
devono portare i numeri e ci va bene
può anche comprimere i numeri ma qual è il
funzione che possiamo comprimere i numeri
con bene arriva un piccolo trucco
Non l’ho fatto nella versione iniziale di
questo ma che è stato contribuito da Kevlin
gallina a e ha una bella osservazione e
sono le stringhe hanno un ordinamento e il
la stringa vuota è sempre considerata la
il più piccolo e poi vengono le stringhe che solo
sono composti da cifre e se hai
qualunque
cosa che inizia con una non cifra
carattere alfanumerico questo è
considerato superiore a quelli giusto così
puoi usare le funzioni massime che è
un po ‘interessante per il vero effetto effervescente
buzz è la zip con il massimo
funzione dei numeri e del modello
capito che sembra che tu sappia affari
elaborare qualcosa che viene elaborato
modellazione o così va bene quindi cos’è fizzbuzz
qui abbiamo i primi così tanti ma
poiché la dichiarazione originale era noi
devo stampare i numeri così ma quello che noi
ho qui sembra una lista infinita
ma ovviamente non esiste una lista infinita
non c’è niente che occupa tutto o a
memoria o così non è così
in realtà più simile a un iteratore come a
sequenza pigra come un flusso tutti quelli
le cose sono le stesse in lingue pigre quindi
quello che possiamo fare noi possiamo effettivamente iterare
su quel lungo fiume e ora ciò che è
il nome della funzione che prende un infinito
produzione di cose in iterazione finita
cose e applicare una logica ad esso come è
quella mappa del nome della funzione si applicherebbe ciascuna
elemento saggio e voglio produrre un
effetto proprio fuori linea di stampa che voglio io
voglio stampare qualcosa fuori la piega
potrebbe essere 14 perché è in realtà il
stessa cosa come un ciclo for per fizzbuzz
linea di stampa
okay vedi che mi viene la pelle d’oca quando
scrivi quanto è bello così in realtà
quindi fizzbuzz sarebbe carino ma sarebbe così
essere una produzione senza fine di stampa Lance
dobbiamo limitare questo diritto così abbiamo
per limitarlo diciamo che prendiamo solo il
la prima storia prende 100 di quei fizzbuzz
e le voci mantengono la calma. Mantieni la calma
in realtà sta finendo il tempo, quindi sono io
prendi un po ‘di libertà e dal
l’organizzatore mi ha concesso in ulteriori 10
minuti Lo farò bene finché
nessuno se ne va presto, quindi mi piacerebbe
interpretare questo risultato un po ‘così se
lo troverai nel download
così è in questo giorno di luce così ma se
esaminiamo queste sì due operazioni
vedrai che l’imperativo
soluzioni ha quattro condizionali dddddd
per condizionali che dobbiamo pensare
attraverso mentre quello logico ha 0
condizionali abbiamo avuto due pacchetti insinuarsi
in condizionale particolarmente in nidificato
condizionali e il livello di annidamento è
a causa del se-else e quattro nel
la complessità ciclomatica è tre e qui
è zero il numero di apparecchi è
sette e la maggior parte delle implementazioni in realtà
avere un po ‘di più perché lo fanno
Anna deuce il 15 ma fanno 3 e 5
e così via, in realtà è più e qui
abbiamo il plus + sulle stringhe che noi
effettivamente utilizzare come una funzione e non come un
operatore ma ti do quello ok come
in 11 per discutere laggiù questo il
il sequenziamento qui è estremamente
sensibile al riordino
quasi ogni riordino di queste linee
farai una soluzione sbagliata che puoi
cambia i tre per i cinque qui
ma questo è l’ unico cambiamento che puoi
fare ogni altro riordino è sbagliato qui
puoi ogni permutazione di queste linee
è corretto e comunque hai visto
il seguente e quando noi quando lavoravamo
nella pace in nessun punto del tempo ho fatto io
torna indietro e cambia tutto ciò che ho avuto
scritto prima in nessun punto del tempo, io
Devo anche ricompilare quello che ho
scritto prima è incrementale
programmazione giusta se non stai cambiando
quello che hai scritto prima e te
non ricompilare nemmeno quello che hai
scritto prima di quello che non riesci a entrare
il vecchio codice nulla che è grande come fare
scriviamo il codice una riga alla volta
in modo incrementale e dobbiamo solo controllare
che questa linea è corretta quanto è figo
che nell’altro caso ogni singolo
cambia ogni singolo incremento che noi
voglio fare non possiamo fare questo non
dovremmo intrusivamente intrusivamente
dobbiamo cambiare il vecchio codice che possiamo
forse rompere qualcosa e questo non lo è
una cosa che mi sono inventata perché io
puoi scegliere esattamente questo esempio
come se fosse venuto da un incidente totale, ma cosa
Ti ho mostrato che era interattivo esattamente
i passaggi che ho attraversato quando l’ho fatto
è la prima volta che è solo naturale
cosa da fare e si scopre di avere
tutte queste belle caratteristiche e ora
viene mantenibilità in modo che il cliente arrivi
mentre lei cammina lì, così è
l’esperto su quello così arriva il cliente
e dice bene tu sai cosa ogni
il settimo numero dovrebbe andare a
conferenza oh dio
ora devo occuparmi dei multipli di
tre e multipli di cinque e il
multipli di 7 e multipli di
tre e cinque e sette e il
multipli di tre e cinque nel
ordine corretto oh no ho dimenticato il
multipli di cinque e sette perché questo
era troppo complicato cercare di ottenere questo
giusto ed è estremamente difficile e
devi toccare tutto ciò che tu
fatto prima di quello che faccio qui c’è andare
alla regola aziendale della conferenza che lo sono
anche zip-in fatto bene così
la manutenibilità è davvero pessima
codice imperativo e diventa naturale facile dentro
il paese logico quindi il campus
qualcosa per riassumere il lungo parlare cosa
arriviamo quando non abbiamo incarichi no
dichiarazioni non solo strutture di controllo
espressioni che otteniamo e questo è solo
possibile in un linguaggio puramente funzionale
o ciò che rende puramente funzionale
linguaggio allora otteniamo il tipo globale
inferenza possiamo rilevare purezza e uso
a nostro vantaggio possiamo usare la pigrizia
che non è possibile prima e tutto il
tipo di separazione di generare il
flusso di inferenza e uso di internet
lo streaming è possibile solo a causa di
pigrizia altrimenti questo tipo di soluzione
approccio non funzionerebbe e noi siamo il
garantisce che ci siamo persino estesi
corso java giusto non ci arrendiamo
la nostra lingua garantisce che ci rende
robusto e l’esecuzione parallela robusta
sotto la composizione ci ha guidati e il
incrementa robusto e il refactoring
ed è il miglior modo di imparare
programmazione funzionale sai se tu
voglio imparare l’inglese andare in Inghilterra
parla inglese da
è buio-all’alba per tutto il giorno
e non andare nella lingua madre
più lo sai da qualche tempo almeno
questo è il modo migliore per impararlo
ti costringe a un nuovo modo di pensare
imparerai molto di più e poi lo sarà
solo un piacere lavorare con quello che so
tutti lo dicono sulla sua lingua
lo sai ma è vero se vuoi
impara che puoi solo prendere qualsiasi
risorsa haskell ci sono migliaia di
tutorial e in cosa hai dei video
tutte le forme possibili che si possono raccogliere quelle up
o e poi ci sono anche libri o
qualunque sia anche un ebook gratuito speciale
per le specifiche di Vega che puoi
controlla che ci sia al momento e in modo massiccio
corso online gestito da Eric Maya per
programmazione funzionale 101 Immagino sia
un po ‘troppo tardi per saltare sul
treno ma forse poi l’anno prossimo è un
molto buono di corso online non è facile
ma insegna il tuo funzionale
programmazione che è dalla mia parte che sono
molto felice di fare altre domande
e ne abbiamo alcuni mentre vedo cosa succede
quando siamo forti quando annotiamo erroneamente
il metodo java come puro ok che decide
chi decide se è puro puro
nativo te come uno sviluppatore decidere ma il
vega type checker farà alcuni
verifiche di plausibilità su ciò che dici tu
se annoti qualcosa di puro ma
non prende argomenti, non importa
cosa fa davvero alla fine se
non ha restituito valore o no se lo è
non prende argomenti è molto
improbabile che sia ben puro
se non restituisce nulla è
ovviamente non puro non lo permetterà
quello ti darà avvertimenti e
errori in questi casi se dici che sono
usando Java util time e io no
annotare questo è così folle com’è
tipo saggio, lo sai che puoi cambiare il
tempo e così via, puoi dire prima di
Ottobre non è il secondo di ottobre
in tempo di utilizzo Java se non si annota
questo correttamente che erroneamente e così
succede che qualcuno in realtà cambia
il valore si può vedere un valore obsoleto
allora sai che qualcuno cambia il valore
ma reg lo ha incassato per non vedere il
valore aggiornato che sarà il
effetto
ok, questo è al cento per cento in questo
gruppo okay mi sta calibrando così
chi non era tutti gli altri
interessante quindi chi ha mai fatto niente
tipo di haskell me Rhonda o cammello mlss
00 secchio qualcosa così questo va bene a metà
del pubblico che è interessante
perché presumo che non ti piaccia questo
tipo di linguaggio con il
passione non saresti qui così io
Supponiamo che ti piaccia, che è buono
e tu presumo tu voglia vedere l’output
lavorare sulla JVM su cui può funzionare
forse la JVM e quando ho iniziato il mio
sforzarmi quando ho guardato dentro
Haskell la mia impressione è stata che io sono il
solo una delle piante del pianeta che
fa java e Haskell allo stesso tempo
e sono davvero in grado di essere sorpreso e lo sono
piacevolmente sorpreso di vedere che c’è
una sovrapposizione che ovviamente siamo
rivolgendosi a Vega siamo ma anche essere
rivolgendosi al secondo gruppo in modo che le persone
che non hanno ancora visto queste lingue
e saremo curiosi di sapere cos’è
diversi ci concentreremo anche sul
prima metà del discorso su ciò che è
diverso da quello che cronometro metro ho
ha lavorato per la canoa a Basilea in Svizzera a
iniziare con e in particolare per il
secondo gruppo che ha fatto principalmente
programmazione imperativa in passato lo farei
Mi piace leggere un programma e chiederò
tu quello che fa il programma va bene
una specie di sfida nel pomeriggio a
contiene cinque righe di codice
tre variabili a B e C
e quando dico uno uguale a quello che ha
semantica del valore che significa che il valore
uno viene assegnato alla variabile ay ay
è uguale a uno scritto come lo sai
ok va bene per tutti così
ecco una sfida cinque righe di codice a
equivale a 1 ottenuto B è uguale a C è uguale a bb
equivale aa uguale a vedere qual è quel codice
facendo un po ‘di aggiustamenti a modo mio
sta peggiorando, sai quando ci provi
per ottimizzare l’ipotesi, ciò che peggiora è
qualcuno ha un rasoio con loro così
comunque così idee che cosa il programma
stava facendo capovolgere due valori molto bene
c’era qualcuno nel pubblico così io
ora darti una lettura di quello che sei
la mente stava facendo quando cercava di seguire
questo programma così ora arriva il
parte di ingegneria di cui avrò bisogno
per la codifica sinistra comunque così hai
per farcela , ho paura di essere così alla pari
1 quindi c’è la posizione di memoria per il
variabile a che ora contiene 1 B uguale
2 ecco qua
c è uguale a B okay a e B rimangono uguali
ma poi il valore di B viene copiato
fino alla posizione C mm-hmm p è uguale a a
così a e C rimangono gli stessi ma poi i
valore nella posizione di un viene copiato
oltre hmm è uguale a C so B e Steve sale
è rimasto lo stesso ma quello che una volta è stato copiato
oltre a cui si aggiunge il valore
di B ora viene copiato in un così questo
sono i passi che dobbiamo seguire il
seguiamo nella nostra testa seguiamo questi
operazioni e come ingegneri su Java
piattaforma utilizzando principalmente il codice imperativo
questo è il tipo di ragionamento che noi
applica ogni giorno anche noi siamo un
gruppo auto-selezionato conosci persone che
hanno enormi difficoltà a fare questo
tipo di giocoleria mentale che non rimangono
anche in programmazione molto tempo fa
frustrante per loro ma immagino che tu
anche d’accordo che per questo piuttosto
operazione primitiva di flipping o
scambiando due valori il numero di
passi e la quantità di considerazioni
quello che dobbiamo fare è piuttosto alto
prezzo è piuttosto alto per un po ‘fuori
cap e questo perché non solo noi
devono interessare tre diversi
luoghi che il nostro cervello è piuttosto buono e
preoccuparsi dei posti ma il cervello no
molto bravo a prendersi cura di questi posti
in vari momenti e perché noi
avere il tempo a tutti in questa cosa si tratta
a causa di incarichi di incarichi
introdurre la nozione di tempo nel codice
tutto ciò che è accaduto prima del
incarico e tutto ciò che è successo
dietro dopo l’incarico questo è
dove prendi il tempo nell’equazione
qui e questo significa che anche per questo
operazione primitiva
dobbiamo preoccuparci di nove diversi
afferma come vedi qui quelli iniziali
qui è solo la definizione ma
allora abbiamo nove stati diversi i
memoria a breve termine dell’umano medio
e sono abbastanza sicuro che tu sia al di sopra di questo
il numero è nove puoi gestirne nove
pone la media è 7 più meno 2
meno 5 e se provi a ricordare cosa
è successo a te quando hai seguito le mie battute
di codice presumo che da qualche parte
qui o qui la tua mente ha rinunciato ora questo
è come puoi giudicarti che puoi
stimare quanto è grande la vostra c’è un sacco di
la memoria è perché è piuttosto difficile
per il cervello e solo alcuni coraggiosi
hanno seguito attraverso così stumped fino a
tu, Gesù, indovina anche che va bene
buona ipotesi, questo è e perché noi
devono seguire queste operazioni per
motivo per il codice questo è chiamato
ragionamento operativo hmm ora se questo
la piccola cosa è già piuttosto difficile
così difficile che la maggior parte di noi non può fare
nella testa abbiamo bisogno di alcuni strumenti
supporto per questo tu sai che abbiamo bisogno
supporto di strumenti che ci dà
informazioni a che punto nel tempo nostro
le locazioni di memoria avevano quel valore e questo
è chiamato il debugger il motivo principale
di gran lunga il motivo più importante
per un debugger è questa la nozione di
programmazione basata sull’ora e il
nozione di tempo combinato se non lo fai
è così drammaticamente meno
fare per un debugger e immagino che tu
già stato lì così tu ne fai un
guarda variabile su uno di quelli e poi
lo fai da solo per vedere cosa
si svolge nell’operazione buona che ho
recentemente ha spiegato questo ai miei genitori
mia mamma ha 75 anni, mio padre ha 80 anni
anni e non hanno alcun tecnico
allenamento qualunque e mi chiedono ragazzo
cosa stai facendo e ti ho detto bene
sai cos’è questa tazza di caffè qui
un a e questo bicchiere d’acqua è un B e
allora vogliamo scambiarlo con l’io
non posso semplicemente metterlo in quello che so
Inoltre non funziona così mio padre che hai
avere una conservazione temporanea sull’acido
come un programmatore sì e spostalo
finito e questo qui e poi controllare
fuori tutto questo e lo facciamo dentro
ho detto la nostra testa e i miei genitori hanno questo
la fase del povero ragazzo povero spiega questo
qualcosa e ma abbiamo capito qualcosa
fuori sono attualmente con questa nuova cosa
abbiamo una nuova idea che chiamiamo funzioni
e funziona come così abbiamo messo questo
Cattolici qui e abbiamo questo
bicchiere d’acqua qui e poi noi
lasciarlo così e non cambiarlo mai
di nuovo e chi guarda questa cosa
vede sempre un caso di stato coerente
chiuso sai per definizione e poi
mio padre ha detto sì grande ragazzo che hai detto a te
volevo vederlo scambiato proprio così
detto di sì vederlo scambiare è facile
ha preso le sue lezioni e ha detto solo
immagina che questi abbiano questi regali
classi dove io e tutti vediamo la sinistra
a destra e così giusto ci sono
quelle lezioni su internet se tu
voglio te e poi lo vedi così ma
questo interferisce con nessuno che tu possa avere
migliaia di persone stanno guardando questo
informazioni e tutti hanno differenti
gli occhiali si guarda solo al primo
versioni ed era un secondo valore e cosa
ha solo un filtro più e nessuno
interferisce con qualsiasi altra cosa con
chiunque altro e c’è sempre un
stato coerente che è molto più facile se io
ti avrei detto all’inizio a
la virgola P equivale alla B virgola a che avresti
ha indovinato più veloce quello che il ragazzo sta facendo
piuttosto sicuro
quindi abbiamo una nuova idea, la nuova idea siamo noi
sbarazzarsi di questi incarichi loro
sembra essere pericoloso e gli incarichi sono
solo una speciale incarnazione di affermazioni
quindi anche solo in una dichiarazione obiettivo
escluso ora se non hai
affermazioni nel linguaggio di programmazione voi
inoltre non hanno bisogno di strutture di controllo
più perché struttura di controllo
controlla il flusso delle operazioni e tu
non avere più operazioni no
dichiarazioni in modo da non aver bisogno di controllo
strutture così da domani mattina in poi
programmiamo diversamente no
incarichi senza dichiarazioni nessun controllo
strutture come sarebbe questo sarebbe
un po ‘sarebbe diverso, sai
la domanda è che possiamo fare
lo fai davvero e in realtà ce ne sono due
modi di farlo la pillola blu e il
pillola di ram la pillola blu è tutto
che mi piace molto questo controllo nel
la conferenza è stata una pista molto buona
contenuti interessanti molte intuizioni
sulla programmazione della maggior parte di esso funzionale
programmazione in questi giorni, ma la pillola blu
era la pillola blu che abbiamo visto
finora imponente sviluppare una disciplina
siamo stati nel primo a parlare di questo
la mattina in distrazione un po ‘sì, va bene
sfida io il continuo il
la dichiarazione ripetitiva era e poi noi
stabilì una convenzione di fare solo
questo lo sai e poi ci siamo accontentati del
convenzione di non farlo mai così e
questo ci ha tenuto in carreggiata per il funzionamento
programmazione sai che devi imporre
disciplina in un modo o nell’altro maybes
strumento di supporto o in una certa misura
lingua supportata in altre lingue
ma l’unico linguaggio che ti dà il
pillola rossa dove ti sbarazzi del vecchio
cosa metrica e inserisci la nuova parola
della realtà sta usando un puramente funzionale
linguaggio che non ha nemmeno un
notazione per un segno
non c’è niente per cui non c’è sintassi
compito che non puoi svolgere
perché non c’è sintassi per questo lì
non c’è sintassi per le affermazioni che non ci sono
strutture di controllo nella lingua così
questo tipo ti costringe in un modo nuovo
di pensare e usare una nuova programmazione
linguaggio sulla programmazione alternativa
la lingua ha senso solo se costringe
a pensare in modo diverso al tuo
soluzioni non si tratta di superficiale
differenze sintattiche il superficiale
differenze sintattiche che vedremo
oggi sono lì solo per ricordare
le fondamentali differenze sottostanti
ed ecco la nostra idea per puramente
linguaggio funzionale che mostrerò
un po ‘di codice se vuoi puoi seguirlo
gli esempi di codice in linea c’è un
ripple online leggere eval print loop dove
puoi provare quel codice che mostrerò un po ‘
un po ‘di codice qui non in ritardo, vivrò
con la codifica dal vivo per darti la gioia di
vedendomi fallire così um e dal
modo per i madrelingua non tedeschi
la parola fig è un po ‘diversa
difficile da pronunciare così sei
Ho il diritto di chiamare quello strano, se vuoi
così qui viene um con cui stiamo lavorando
funzioni da cui è stato creato tutto il nostro codice
Frank brilla per costruire l’intero linguaggio
dalle funzioni nessuna sorpresa c’è molto
del supporto linguistico per le funzioni
perché è tutto ciò che fa ed ecco come
tu ne definisci uno così e lo sarà nel Revel
diciamo che definiamo una funzione chiamata
volte richiede due parametri a e B
e restituisce una volta B questo è come noi
definire una funzione sembra un po ‘
prima non familiare da Java
prospettiva prima non vediamo alcun tipo
è un tipo non tipizzato o dinamico
digitato che cosa è tipo solo JavaScript
II cosa no come vedremo come facciamo noi
applica bene una funzione che possiamo semplicemente dare
i parametri come così nel più
moda silenziosa che puoi pensare al
l’operatore per l’applicazione della funzione è
spazio e questo è in realtà il tema di
questa conferenza sta andando a nuovi spazi
o qualcosa va bene così che siamo noi
usando lo spazio qui vai nello spazio che mi piace
il keynote così tanto il ki migliore sa
che io abbia mai visto così stiamo usando
spazio qui, quindi questo spazio è qui
in realtà un operatore che prende questo
funzione e la applica a questo argomento
e poi al prossimo argomento vedremo
come sembra nello stesso modo io no
sorpresa che restituisce 6m e possiamo chiedere
il ribelle per il tipo di volte che io
ha detto che c’è un tipo che non è senza orario
e il tipo sembra un po ‘pazzo, lo faremo
vediamo cosa significa in un secondo
ottenere un aiuto, quindi non abbiamo avuto momenti
ha dichiarato i tempi in cui si trovano i tipi
terzo non abbiamo nemmeno dichiarato i tipi
dei parametri Vega e lo farà ancora
avere inferenza di tipo globale che significhi se
non vuoi quasi mai averlo
scrivere qualsiasi tipo e ma non importa
quanto piccola o grande è la tua
il linguaggio è sempre completamente
digitando per questo ho detto che questo spazio
qui è di un personaggio vuoto
denotando l’applicazione della funzione
Operatore bene sarebbe un pochino
più corretto dicendo che è il
giustapposizione di questi due li metti
accanto a ciascuno l’un l’altro quindi
più corretto dirlo ma puoi anche farlo
puoi già dedurre tutto il resto
che ho intenzione di dirglielo nel
i prossimi cinque minuti da quella informazione
e questo significa che è vero questo
significa che questa espressione qui e da
il modo in cui l’applicazione della funzione viene lasciata
associativo come operatore, quindi non c’è
implicitamente come le parentesi qui così
significa che x è una funzione è quale
è applicato al numero due che cos’è
questa espressione sta valutando troppo bene
poiché è giustapposto ai tre
deve valutare una funzione ok così questo
deve essere una funzione che applichiamo in seguito
a tre ehi tutti i tuoi liceali
fricassee fresco quindi se chiediamo il momento
in realtà ci dice questo dice questo
freccia significa che abbiamo una funzione da qui
a qui e le funzioni hanno sempre solo
un argomento e esattamente un argomento
dice bene x due x scusa x ecco a
funzione che prende una discussione questa
e ritorna come abbiamo visto restituisce a
funzione che prende in un altro un che
è il numero tre e ne restituisce sei, quindi questo
è come lo leggi e sulla mano sinistra
lato questo è chiamato un vincolo che puoi
leggi questo come interfaccia Java da allora
usiamo x qui che funziona solo per
valori numerici cosiddetti di tipo classe
qui, ma salta un po ‘
quello così se guardiamo in questi tempi
2 poiché lo sappiamo già
espressione denota una funzione grazie
possiamo fare riferimento a questo, possiamo usare x 2 e
dargli un nome ora cosa posso fare
quel nome bene possiamo applicarlo ad alcuni
numero dandoci 6 hmm se chiediamo il
tipo di due volte quello che sarà
mm-hmm c’è un numero di opzioni che cosa
potrebbe succedere che ci tenga in int è a
funzione da intero a intero perché perché
non intorpidito o qualcosa perché noi
l’ho già specializzato in un
intero non può più essere tre a
doppio o un galleggiante o qualsiasi cosa perché noi
l’ho già specializzato e questi
i tipi devono essere esattamente gli stessi tipi
sono stati acquistati entrambi di tipo alfa a destra
lì per ora potresti notare questo spazio
qui in questo spazio c’è per a
motivo se pensi in termini java da
Prospettiva Java se confrontata
questo in un modo in cui fai i metodi
Java ti aspetteresti che ci sia un
parametro formale per cui si chiama giusto
questo argomento ti piacerebbe vedere un
parametro formale nel braccio in
il tuo tipo giusto hmm puoi effettivamente
pensa a un parametro del genere che puoi
immagina un tale parametro se vuoi te
diciamo che ci sarebbe una X allora per
chiamando x 2 avremmo anche bisogno di fornire
la X destra è che va bene così
in realtà come in matematica puoi farlo
questo è come un’equazione in matematica
puoi estendere un’equazione ma la tua
l’autunno può annullare i termini di un
equazione quindi se sei come in Germania
si dice tenda a destra è possibile annullare
la X di te è hesco valido
compresi quelli grigi ma è possibile
cancella la X che puoi dividere
X se tu quella è l’analogia di
in realtà la moltiplicazione sta applicando a
funzione lineare in matematica così è
questa è l’analogia in cui viene
da te puoi cancellare la X che è la
tipo di operazioni che puoi fare
equazioni in tutto il tuo storico Joe
La corrente di Haskell diventa hasta la Vega
il codice diventa una serie di equazioni che
tu risolvi e puoi lavorare con esso come
un’algebra che ovviamente non è
possibile in qualsiasi lingua che abbia
dichiarazioni o incarichi sempre
questi questi annullamento di questi termini
Direi che a volte viene chiamato currying
buone ragioni a volte presto rugose
da Mosè a e ruga che ha fatto il
lavoro teorico su questo ma in realtà
questo tipo di concetto di avere funzioni
che sono usati come argomenti ad altri
funzioni o funzioni che sono
restituito dalle funzioni è il primo
descritto da God la Vega nel pomeriggio
1891 in quello che è successo lo ha fatto
molte pubblicazioni possono uscire dal pane
pan correttamente sul concetto di numeri
o qualcosa non era sul concetto
notazione Devo cercarlo, ho dimenticato
che comunque forse non è così semplice in quattro
volte più specifico e quindi siamo in grado di
facciamo anche la composizione delle funzioni così abbiamo
definire una funzione usando una funzione
applicare una funzione utilizzando parti di a
funzione e ora combinando le funzioni così
diciamo che facciamo qualcosa come due volte
di tre volte due bene come un Java
programmatore presumo che questo ora
fa quanto segue si applicherebbe tre
valuterà tre volte per dare sei
e poi applicando a x 26 ci piace il
Modo Java di fare le cose che si chiama
valutazione rigorosa si sempre prima
valuta i tuoi parametri in un determinato
ordine per lo più da sinistra a destra nella maggior parte
le lingue
e poi lo applicate questo non è il
caso in flag e Haskell perché a
sono stati troppo pigri per il liceo
lee valutano solo questo se necessario
e c’è una buona ragione per questo
bene così che comunque questa regione ha 12 anni
ci aspettiamo ma possiamo scrivere questo in a
anche in modo diverso quindi le due volte
e tre volte le nostre funzioni e possiamo
componga queste funzioni in esso sei
volte hmm con questi punti nel mezzo
e questo punto è prendiamone un po ‘
aiuto per questo e sei volte possiamo
applica questo e ottieni il tipo di sei volte
che è alla fine, naturalmente, prendiamo
un po ‘difficile per questo ora questo qui è
come una funzione f applicata al risultato
di una funzione G applicata ad alcuni X a destra
la posizione matematica che puoi
ricordalo dal liceo e dal tuo
l’insegnante di scuola superiore potrebbe aver menzionato
che puoi scrivere questo come F
composto G è corretto vero sì
e si applica a X, quindi questo è il termine qui
è un nuovo funzionale questo è il nostro sei
volte giusto puoi fare lo stesso
trucco che abbiamo fatto prima di poter mettere il
uova di nuovo puoi mettere le uova sopra
qui sei volte x due x + 3 x messo dentro
parentesi nei sei qui ancora
lo stesso codice funzionerebbe ancora, ma noi
lo hai già cancellato così puoi
comporre funzioni perché il primo
i cittadini di classe nella tua lingua sono chiari
domande lontane finora bene così
tutto questo funziona solo perché abbiamo puro
funzioni e dal momento che abbiamo un sacco di
liceali nella stanza che conosci noi
come due mesi fa abbiamo avuto il giorno della bandiera
in canoa a Basilea e abbiamo fatto un sacco di
interviste in ogni intervista ad alcuni
punto aspetta che io chiedo perché sei qui
ciò che è speciale e hanno detto in alcuni
punti ho detto che sai di cosa si tratta
puro e si poteva sentire il colpo
endorfina che attraversa il corpo quando
dicono puro e come un liceale I
direi che non è endorfine che sono
un colpo di endomorfismi così buono così
perché ci preoccupiamo molto della purezza se noi
avere un metodo java sotto qualsiasi nome e noi
vedere la firma del tipo in n
implementazione e non ci fidiamo di
commenta cosa potremmo dire di qualsiasi
metodo dal suo pozzetto di firma del tipo
diciamo tecnico dice solo che prendo un
un paio di te e te quando torno
qualcosa di tipo T che cosa sono
facendo bene molto probabilmente restituisce il
il primo elemento della coppia ha dato un ritorno
nullo sì certo che potrebbe essere gettato su
l’eccezione sì, naturalmente, stampa codificata
per standard fuori sì, naturalmente mettere un lucchetto
sì, certo, è andato nel database
sì, certo, vai a leggere dal
il database sì forse non poteva fermare il
missili e fermare la terza guerra mondiale di
Certo, a destra chi se ne frega hmm gonfiandone uno
liceo se hai questo tipo di
tipo di firma dicendo che ne prendo un paio
alpha beta Ritorna alfa per ogni
calcolo che finalmente lo detiene
la restituzione finale è l’unica possibile
l’implementazione di ciò sta restituendo il
Alpha nient’altro può mai accadere
prima non c’è null che significa
non c’è anche la notte in cui il
eccezioni
se ci fosse qualche tipo di lato
effetto come leggere cose scritte e così via
sarebbe visibile nel tempo così a lungo
Per farla breve, tutto può succedere qui
sai esattamente cosa succede qui
è un tipo di firma del tipo in cui
in realtà lo strumento può dedurre quello
possibile implementazione del metodo
ci sono in realtà strumenti che lo fanno se tu
voglio che non sia possibile
per ogni funzione per farlo va bene
una pura funzione una volta che abbiamo
ci siamo convinti che abbiamo un puro
funzione di negozio ed è ovviamente
possibile scrivere funzioni pure in
in tutte le lingue puoi farlo
assemblatore se vuoi bene è il tuo
disciplina dello sviluppatore di farlo in gioco
go Haskell abbiamo il tipo di sistema di
dicendoci se è puro o no e
perché il sistema di tipi lo rivela
informazioni qualsiasi strumento in particolare il
il compilatore può usare quell’informazione se noi
chiamare la funzione coseno con un punto o
restituisce uno zero non so qualcosa
ok se lo chiamiamo di nuovo con lo stesso
valore restituirà lo stesso valore di te
sai che puoi memorizzare questo in contanti
è possibile poiché non vi è alcuna nozione di
tempo comunque in una pura funzione che puoi
valutalo in qualsiasi momento prima che lo faccia
usato puoi farlo pigramente puoi farlo
in anticipo speculativamente quando il
i computer sono comunque in buone condizioni, lasciaci andare
valuta alcune espressioni puoi farlo
contemporaneamente quale è la grande cosa
sulla programmazione simultanea e
programmazione parallela senza alcun timore di
tronchi morti e condizioni di gara e
qualunque cosa se hai codice come x 2 3
volte 2 3 volte 2 3 volte 2 3 il
compilatore o forse il tuo ID può dire bene
lasciamolo rimuoverlo e refactarlo dentro
un termine che abbiamo all’inizio
questo è ciò che puoi fare solo con puro
funziona se hai una funzione impura
con un effetto collaterale diciamo
system.currenttimemillis qui qui qui
qui qui non vorresti refactoring
quello giusto giusto per una ragione
che tu trovi il tempo che è in un certo
punto di valutazione in modo da poter eliminare
espressioni secondarie comuni e tutto questo è
un problema di ottimizzazione hmm e in realtà
questo si apre in una vasta gamma di possibili
refactoring che le ides potrebbero ora
applicare in modo sicuro la maggior parte dei rifacimenti dal
l’idea è che si ottiene dal tuo IDE a
il momento in cui uno sviluppatore non è davvero
sicuro che è più come proposta è se
ti suggerirei di poterlo refactoring
in un metodo di estrazione o qualcosa di te
sappi che non è molto sicuro finché tu
non può garantire la purezza ma ora potrebbe essere
sicuro che potrebbe essere contrassegnato come umano qui
uno sicuro per te per favore chiedi al tuo IDE
fornitore per sostenere questo è
ottimizzazione che gli strumenti possono fare
ma anche che lo sviluppatore può fare ora
potresti esserti trovato in questo
posizione dove eri ne hai un po ‘
metodo potrebbe contenere un back in UNIX
leggi attentamente da dove proviene la parte posteriore
qualche cambiamento di stato che non dovrebbe essere
lì o si considera dov’è quel palcoscenico
effettivamente cambiato o posso refactoring
o posso chiamarlo questo è il thread sicuro
posso chiamarlo in Kerala e tu no
semplicemente non lo sai, quindi cosa fai?
si guarda l’implementazione e il
l’implementazione dice che coinvolgere ae B
e C e poi vai nel
implementazione di ae quindi ispezionare
questo e poi in B & B chiama ABC BD
diesel e alla fine si finisce così
questo è da un vero progetto così tu
devo ispezionare un percorso e questo è solo
in realtà è un ramo dell’albero
rifiuti in realtà così e dopo una settimana di
ispezionando il codice che hai convinto
tu sai che è sicuro che posso chiamare
esso
e tu lo fai e poi il giorno dopo alcuni
il programma della tua squadra arriva e cambia
diciamo qui e il sistema stampa
linea perché ne ha bisogno che dal
modo totalmente mina tutto il tuo parallelo
ISM perché si sincronizza su
altro estremo e così via così
qualunque sia l’effetto di quello forse forse
solo calo delle prestazioni o qualsiasi altra cosa
nessuna possibilità di sapere che l’ hai fatto
ipotesi silenziosa non hai possibilità di
sapendo che ha rotto il tuo silenzio
Assunzione è tutto pieno di silenzio
ipotesi e questa è la causa di
borse come fai a girare questo manuale
l’ispezione non funziona così l’unica
cosa è che possiamo chiedere al sistema di tipo se
il sistema di tipo ci dice e lo tiene dentro
posto che tutto questo è puro allora noi
non dobbiamo più ispezionarlo
chiedo bene al sistema di tipo devo andare
uno indietro nella già esistente ora praticamente
ogni lingua sul jet arriva ora
nei prossimi cinque minuti arriva il grande
differenza di Vega tra tutti gli altri jvn
lingue e punto unico di Vega che
Non ho visto in nessun altro linguaggio così
lontano e viene da questo punto qui
Diciamo che ho una lingua super duper
assicura purezza attraverso il tipo
sistema qui in questo in questo codice bene
con il sistema di tipi, ma qui sotto o
in qualche modo intendo un po ‘di più il
la catena della bobina è una chiamata in Java che chiamo
in Java Oh system.out.println attuale
Sono Millie, qualunque sia il metodo java
praticamente tutte le lingue JVM va a
la radice di dire bene non appena tu
chiama in Java tutte le scommesse sono corrette
è colpa tua se non ha così tanto ragione
fai clic su di esso per un’altra strada Vega
dice bene
non ci uniamo a quel livello che facciamo
una netta distinzione tra la nostra
mondo puramente funzionale e l’oggetto
orientato bene è un imperativo stabilito
java volt lo rendiamo estremamente chiaro
distinzione possiamo chiamare entrambi i modi
noi non mescoliamo noi non mescoliamo i due
paradigmi manteniamo la nostra squadra pulita se tu
voglio chiamare da una figura in una scusa
da Java a Frager è facile
parte perché Vega si compila in java
codice sorgente che genera sorgente java
codice e quindi utilizza Java Sea per compilare
in codice bytec in modo da avere sorgente java
codice che gira intorno bene questo è possibile
chiama da qualsiasi modulo java comunque così è
java a java va bene, se vuoi
per vedere che tipo di codice Java genera
puoi anche chiedere alla pace di perdonarmi
la versione java di questo codice figura
da Vega a Java è interessante
parte bene ora dobbiamo distinguere noi
devo dichiarare e dobbiamo farlo non lo è
facoltativo dobbiamo dichiarare il nostro silenzio
ipotesi su cosa sia il codice java
farlo potrebbe essere nascosto nel
implementazione o forse nel farmaco API
o qualunque siano le nostre ipotesi
esplicito dobbiamo dichiarare esplicitamente
cosa pensiamo del tipo di java
il metodo sarebbe in tre termini quindi per
esempio Java net il tuo codificatore L L
è una funzione statica si potrebbe sapere che
ed è una stringa da stringa a cui dargli un
stringa e restituisce la stringa stringa è
immutabile non fa solo effetti collaterali
funziona sui parametri è puro che posso
chiamalo ora da Vega come codifica questo è
il metodo che gli assegno dice caro
cronico e poi sostituisce vuoto con
Non so inviare 20 o qualcosa del genere
bene tutto bello e ordinato proprio tutto
è ancora puro
quando uso questo metodo quando lo uso
funzione il mio codice è ancora puro che abbiamo
altri metodi e in realtà molti metodi
sono impuri diciamo che il poster è figlio
l’ora corrente Millie ci vuole proprio come
un maledetto parametro se vuoi e
ritorna bene questo è un lungo in Java ma
diciamo bene che non è solo tanto è un
I / o lungo e questo perché ora il
a lungo è in qualche modo macchiato, sai che è così
sporco sai se sei il tipo di sistema
ora sa che questo è sporco e io
lungo è in realtà più simile all’inazione
non è il tempo stesso è l’azione
che ti daresti il lungo e io
può chiamare il Medio Oriente ma solo dare
è l’unità ma se mi piacerebbe se io
voglio chiamarlo devo essere che lo fa
me stesso sporco ma soprattutto se voglio
tipo di fare aritmetica con esso questo fa
non compilare dice quando il mio contratto di locazione non è
un lungo che non puoi calcolare con un IO
tanto prima tu stesso devi diventare
sporco devi cambiarti con
IO e poi ti darei il tempo
e poi può fare tutto ciò che vuoi
fare, ma che vi farà in modo che il sporco
il chiamante si sporca e tutti quelli che
mi chiama ma anche sporcarsi e lui e
lui e lui fino a quando il main main è, naturalmente
sporco fa qualcosa senza riscaldamento
la CPU è che sta facendo qualcosa così
questa è la distinzione chiave tra l’autunno
attraverso a tutte le altre lingue sul
JVM in realtà era questo il punto
mi ha venduto sul progetto quando ho visto questo ho
sentivo come se tu sapessi che c’è qualcuno che
sa cosa sta facendo una lunga storia
In breve puoi pompare una chiamata fasulla in
Offerta Java è una specie di cosa intima
non farlo senza protezione quindi un secondo
la seconda cosa che ora indovinate è quella
hai un’inferenza di tipo globale da allora
non hai dichiarazioni in merito
il silenzio non è privo di strutture di controllo
questo e questo è difficile da rivelare in
questi 50 minuti da questo ottieni un
quantità di sicurezza strutturale sul tuo
codice il codice è in realtà come lo era
sapendo cosa stai facendo non lasciarlo
tu esci e riusci le cose dentro
contesto incerto e così via quindi lo sa
strutturalmente molto bene quello che stai facendo
e ti guida ad una soluzione corretta così
se molto più sicurezza e per pochissimo
prova per un prezzo molto piccolo, quindi se non lo fai
vuoi pagare qualsiasi prezzo per te
non fare nulla nel sistema di tipi
hai ancora il tipo di sicurezza e
ecco come lo userai
sono tutti i tuoi calcoli puri
isole in un mare di codice imperativo in
il mare del codice sporco hai cose
che sono mutabili anche nel tuo lavoro
applicazione basata su java e che faccio io
oh e mutevole I oh e database e
ma non dentro di te ci sono isole di
calcoli puri in questo modo possono ragionare
sull’equazione, questa è l’idea e
il sistema di tipi assicura che una volta quello
qualcuno è sporco che non può sfuggire
più è come un contesto che tu
non può scappare e nella prima parte
quelli sono thread sicuro per costruzione
e se hai qualche errore nel tuo
il tuo multi threading in parallelo
qualunque soluzione tu possa escludere un enorme
numero di possibili errori che non hai
guardare dentro quelli perché non possono
fallire e poi come tecnicamente questi
le cose qui sono chiamate monadi
comunque finita è solo un nome e
Ti mostrerò alcuni codici live I
Immagino che forse faremo un pochino io
potrebbe essere necessario qualche minuto in più rispetto a
50 e questo è il problema di fizzbuzz chi
ha mai sentito parlare di fizzbuzz quasi
tutti quindi non puoi numeri per
ogni terzo numero tu dici tasse e per
ogni quinto numero che dici che buzz e
quindi contando da uno a 100 come
questo è un molto spesso è un’intervista
domande e colloqui di lavoro alcune persone
Diciamo che sono giochi per bambini alcune persone
lo uso comunque come gioco bevente
se chiedi su Internet per
possibili implementazioni di questo qui
colpisci il numero uno, questo capita di essere un
codice imperativo ed è in realtà lo è
Java ma è il punto non è questo
è Java ci sono soluzioni molto migliori in
Java come bene, ma questo è una specie di
modo convenzionale di scriverlo in Java
e il punto è che questo è tipico
imperativo si può scrivere questo in C è
la soluzione guarita sarebbe anche così
hai un ciclo for e molti cambiamenti
stato e poi devi pensare
conosci il punto in cui tre e cinque
si riunisce questo è s a 15 e noi
devi prima coprire questo caso e poi
arriva gli altri due casi speciali
casi e poi arriva con Kaiser generale
okay, facciamo una specie di codice tipico chi
avrebbe scritto questo tipo di codice a
risolvi il problema Oh almeno due o
tre ottime volte l’ultima volta che l’ho chiesto
i loro non erano nessuno e quello era un
mentire, ovviamente va bene così è un po ‘
il modo convenzionale e come un pensiero
l’idea di una nuova lingua è questa
dovrebbe farti pensare in modo diverso
il problema in una possibile soluzione così
diciamo se chiamiamo la fregata Apple
questo è javafx oh mio Chris piccolo
comando un po ‘più grande P è scritto in
la figura sta usando javafx tre
componenti comunque così la prima cosa è
non abbiamo per ciclo sì
okay, non possiamo farlo andare a casa, okay
quello che possiamo fare è usare la gamba
di un estremo una sequenza infinita di
numeri questo è qualcosa che abbiamo
disponibile ed è indicata ama così uno
punto e se valutiamo questo ci dà
tutti i numeri naturali mentre il sonaglio
è abbastanza intelligente da non darci
tutti i numeri naturali ma a causa del pigro
valutazione possiamo effettivamente limitare questo
okay comunque questo automatico mentre ci serve
quelli da quando vogliamo stamparlo non come
il numero ma come la stringa così siamo
nel prendere questo e noi stiamo mappando tutti
singolo elemento nella sua stringa
rappresentazione che stai mappando questo e
poi su Vega e haskell si chiama
mostra invece di due string e siamo
prendendo questo un tuffo vediamo questa aria
le stringhe in modo visibile dal set posteriore
si, va bene così e gli diamo un nome questo
i numeri vanno bene torniamo
controllare i numeri è un elenco di stringhe buone
i numeri sono questo ora abbiamo bisogno di un qualche tipo di
nozione in cui diciamo che ogni terzo è un
Fizz okay come possiamo fare questo bene noi
avere una lista è una stringa vuota in un
la stringa vuota interferisce bene e poi se
vogliamo avere una ripetizione infinita in
ripetizione infinita di ciò che possiamo dire
beh, per favore passa il ciclo ci dà il
la storia definitiva visitata senza fine
ritmo freddo diamo un nome al
Fizzes
ci hmm che ne dici di ronzare bene tu
sai già che il trucco rende lo stesso per
ronza questo ismo Potrei usare una ripetizione
qui ma comunque rendono questo molto più facile
ronza così quali sono i ronzii
deliverables meglio il meglio sminuire
migliore fattura e ronzio bene ma il
i requisiti dicono che dobbiamo tipo
combinare fizzes e puzzle è questo è
regole di business giuste e se arrivano
insieme i fizzes devono venire prima e
poi ronza come se ci fosse una specie di
si sovrappongono quindi ci facciamo uno schema
da questo dobbiamo infinito
produzioni di archi e noi combiniamo
loro elemento vice the pops up in squadra
zip come una cerniera sui pantaloni proprio così
questo è il nostro theta equivale al suo nome zip
e lo stiamo immergendo con una funzione
la loro colpa scivola con e la funzione
che usiamo è la concatenazione di stringhe
che sembra che viene indicato con
plus plus e stiamo usando le fasi e
i ronzi per farlo, quindi qual è il
modello ci ronzio ronzio visibile ronzio
e il numero 50 15 è fizzbuzz finora
bene ma non ora sui numeri che noi
devono portare i numeri e ci va bene
può anche comprimere i numeri ma qual è il
funzione che possiamo comprimere i numeri
con bene arriva un piccolo trucco
Non l’ho fatto nella versione iniziale di
questo ma che è stato contribuito da Kevlin
gallina a e ha una bella osservazione e
sono le stringhe hanno un ordinamento e il
la stringa vuota è sempre considerata la
il più piccolo e poi vengono le stringhe che solo
sono composti da cifre e se hai
qualunque
cosa che inizia con una non cifra
carattere alfanumerico questo è
considerato superiore a quelli giusto così
puoi usare le funzioni massime che è
un po ‘interessante per il vero effetto effervescente
buzz è la zip con il massimo
funzione dei numeri e del modello
capito che sembra che tu sappia affari
elaborare qualcosa che viene elaborato
modellazione o così va bene quindi cos’è fizzbuzz
qui abbiamo i primi così tanti ma
poiché la dichiarazione originale era noi
devo stampare i numeri così ma quello che noi
ho qui sembra una lista infinita
ma ovviamente non esiste una lista infinita
non c’è niente che occupa tutto o a
memoria o così non è così
in realtà più simile a un iteratore come a
sequenza pigra come un flusso tutti quelli
le cose sono le stesse in lingue pigre quindi
quello che possiamo fare noi possiamo effettivamente iterare
su quel lungo fiume e ora ciò che è
il nome della funzione che prende un infinito
produzione di cose in iterazione finita
cose e applicare una logica ad esso come è
quella mappa del nome della funzione si applicherebbe ciascuna
elemento saggio e voglio produrre un
effetto proprio fuori linea di stampa che voglio io
voglio stampare qualcosa fuori la piega
potrebbe essere 14 perché è in realtà il
stessa cosa come un ciclo for per fizzbuzz
linea di stampa
okay vedi che mi viene la pelle d’oca quando
scrivi quanto è bello così in realtà
quindi fizzbuzz sarebbe carino ma sarebbe così
essere una produzione senza fine di stampa Lance
dobbiamo limitare questo diritto così abbiamo
per limitarlo diciamo che prendiamo solo il
la prima storia prende 100 di quei fizzbuzz
e le voci mantengono la calma. Mantieni la calma
in realtà sta finendo il tempo, quindi sono io
prendi un po ‘di libertà e dal
l’organizzatore mi ha concesso in ulteriori 10
minuti Lo farò bene finché
nessuno se ne va presto, quindi mi piacerebbe
interpretare questo risultato un po ‘così se
lo troverai nel download
così è in questo giorno di luce così ma se
esaminiamo queste sì due operazioni
vedrai che l’imperativo
soluzioni ha quattro condizionali dddddd
per condizionali che dobbiamo pensare
attraverso mentre quello logico ha 0
condizionali abbiamo avuto due pacchetti insinuarsi
in condizionale particolarmente in nidificato
condizionali e il livello di annidamento è
a causa del se-else e quattro nel
la complessità ciclomatica è tre e qui
è zero il numero di apparecchi è
sette e la maggior parte delle implementazioni in realtà
avere un po ‘di più perché lo fanno
Anna deuce il 15 ma fanno 3 e 5
e così via, in realtà è più e qui
abbiamo il plus + sulle stringhe che noi
effettivamente utilizzare come una funzione e non come un
operatore ma ti do quello ok come
in 11 per discutere laggiù questo il
il sequenziamento qui è estremamente
sensibile al riordino
quasi ogni riordino di queste linee
farai una soluzione sbagliata che puoi
cambia i tre per i cinque qui
ma questo è l’ unico cambiamento che puoi
fare ogni altro riordino è sbagliato qui
puoi ogni permutazione di queste linee
è corretto e comunque hai visto
il seguente e quando noi quando lavoravamo
nella pace in nessun punto del tempo ho fatto io
torna indietro e cambia tutto ciò che ho avuto
scritto prima in nessun punto del tempo, io
Devo anche ricompilare quello che ho
scritto prima è incrementale
programmazione giusta se non stai cambiando
quello che hai scritto prima e te
non ricompilare nemmeno quello che hai
scritto prima di quello che non riesci a entrare
il vecchio codice nulla che è grande come fare
scriviamo il codice una riga alla volta
in modo incrementale e dobbiamo solo controllare
che questa linea è corretta quanto è figo
che nell’altro caso ogni singolo
cambia ogni singolo incremento che noi
voglio fare non possiamo fare questo non
dovremmo intrusivamente intrusivamente
dobbiamo cambiare il vecchio codice che possiamo
forse rompere qualcosa e questo non lo è
una cosa che mi sono inventata perché io
puoi scegliere esattamente questo esempio
come se fosse venuto da un incidente totale, ma cosa
Ti ho mostrato che era interattivo esattamente
i passaggi che ho attraversato quando l’ho fatto
è la prima volta che è solo naturale
cosa da fare e si scopre di avere
tutte queste belle caratteristiche e ora
viene mantenibilità in modo che il cliente arrivi
mentre lei cammina lì, così è
l’esperto su quello così arriva il cliente
e dice bene tu sai cosa ogni
il settimo numero dovrebbe andare a
conferenza oh dio
ora devo occuparmi dei multipli di
tre e multipli di cinque e il
multipli di 7 e multipli di
tre e cinque e sette e il
multipli di tre e cinque nel
ordine corretto oh no ho dimenticato il
multipli di cinque e sette perché questo
era troppo complicato cercare di ottenere questo
giusto ed è estremamente difficile e
devi toccare tutto ciò che tu
fatto prima di quello che faccio qui c’è andare
alla regola aziendale della conferenza che lo sono
anche zip-in fatto bene così
la manutenibilità è davvero pessima
codice imperativo e diventa naturale facile dentro
il paese logico quindi il campus
qualcosa per riassumere il lungo parlare cosa
arriviamo quando non abbiamo incarichi no
dichiarazioni non solo strutture di controllo
espressioni che otteniamo e questo è solo
possibile in un linguaggio puramente funzionale
o ciò che rende puramente funzionale
linguaggio allora otteniamo il tipo globale
inferenza possiamo rilevare purezza e uso
a nostro vantaggio possiamo usare la pigrizia
che non è possibile prima e tutto il
tipo di separazione di generare il
flusso di inferenza e uso di internet
lo streaming è possibile solo a causa di
pigrizia altrimenti questo tipo di soluzione
approccio non funzionerebbe e noi siamo il
garantisce che ci siamo persino estesi
corso java giusto non ci arrendiamo
la nostra lingua garantisce che ci rende
robusto e l’esecuzione parallela robusta
sotto la composizione ci ha guidati e il
incrementa robusto e il refactoring
ed è il miglior modo di imparare
programmazione funzionale sai se tu
voglio imparare l’inglese andare in Inghilterra
parla inglese da
è buio-all’alba per tutto il giorno
e non andare nella lingua madre
più lo sai da qualche tempo almeno
questo è il modo migliore per impararlo
ti costringe a un nuovo modo di pensare
imparerai molto di più e poi lo sarà
solo un piacere lavorare con quello che so
tutti lo dicono sulla sua lingua
lo sai ma è vero se vuoi
impara che puoi solo prendere qualsiasi
risorsa haskell ci sono migliaia di
tutorial e in cosa hai dei video
tutte le forme possibili che si possono raccogliere quelle up
o e poi ci sono anche libri o
qualunque sia anche un ebook gratuito speciale
per le specifiche di Vega che puoi
controlla che ci sia al momento e in modo massiccio
corso online gestito da Eric Maya per
programmazione funzionale 101 Immagino sia
un po ‘troppo tardi per saltare sul
treno ma forse poi l’anno prossimo è un
molto buono di corso online non è facile
ma insegna il tuo funzionale
programmazione che è dalla mia parte che sono
molto felice di fare altre domande
e ne abbiamo alcuni mentre vedo cosa succede
quando siamo forti quando annotiamo erroneamente
il metodo java come puro ok che decide
chi decide se è puro puro
nativo te come uno sviluppatore decidere ma il
vega type checker farà alcuni
verifiche di plausibilità su ciò che dici tu
se annoti qualcosa di puro ma
non prende argomenti, non importa
cosa fa davvero alla fine se
non ha restituito valore o no se lo è
non prende argomenti è molto
improbabile che sia ben puro
se non restituisce nulla è
ovviamente non puro non lo permetterà
quello ti darà avvertimenti e
errori in questi casi se dici che sono
usando Java util time e io no
annotare questo è così folle com’è
tipo saggio, lo sai che puoi cambiare il
tempo e così via, puoi dire prima di
Ottobre non è il secondo di ottobre
in tempo di utilizzo Java se non si annota
questo correttamente che erroneamente e così
succede che qualcuno in realtà cambia
il valore si può vedere un valore obsoleto
allora sai che qualcuno cambia il valore
ma reg lo ha incassato per non vedere il
valore aggiornato che sarà il
effetto
Please follow and like us: