Press "Enter" to skip to content

GOTO 2012 • Functional Programming from First Principles • Erik Meijer


grazie mille per essere venuto , spero
hai una grande notte e ottieni un
idea che questo è un assaggio di yow solo immaginare
ci sono 40 oratori come questi ragazzi
e ti senti come se fosse
quindi grazie mille per essere venuti Eric e
ora quando ero quando Dave mi ha chiesto di farlo
parlo ho detto che tu sai che il discorso più divertente
Ho mai fatto questo negozio chiamato
conosci il funzionamento fondamentalista
la programmazione perché un sacco di gente parla
sulla programmazione funzionale, ma lo sono
non sto facendo davvero una programmazione funzionale
la programmazione funzionale è davvero facile
cos’è che sai, lasciami dire
per prima cosa questo orientato agli oggetti
programmazione con programmazione in
oggetti ma quello che è un oggetto non lo faccio
so che è come se sapessi qualcosa che
rappresenta un amore dell’entità del mondo reale
ora stiamo già arrivando
falso ma se chiedi che cosa funziona
programmare bene questo programma con
funziona bene mio figlio ha appena finito in alto
scuola e indovina cosa Ronnie ha fatto il SAT
prova c’è a pagina 35 del libro
c’è una definizione che cos’è una funzione
quindi ogni studente di scuola superiore sa cosa
cos’è una funzione ok ma quando noi
iniziare a programmare ci dimentichiamo di cosa
la funzione è e quindi siamo un po ‘
programmazione e diciamo che stiamo facendo
programmazione funzionale come dire dove
sono le funzioni che conosci non sono
funzioni e così via ma dal momento che la parola a
la programmazione funzionale era già stata presa
sai che dovevo chiamarlo fondamentalista
programmazione funzionale e ora qualcosa
successo nel frattempo da qualche parte
effetto accaduto e uno degli esempi
quello che ho detto in questa conversazione riguarda la miscelazione
effetti collaterali e recinti e e il
esempio che ho usato tu sai ha ora
stato risolto in c-sharp così non c’è stato
un cambio di rottura in c-sharp v oh e
ora il mio esempio non funziona più così io
dovevo dargli un discorso completamente nuovo così
lascia che ti spieghi cosa
quello che sta succedendo qui in modo da Eric Lippert un
ragazzo molto interessante se non leggi
questo blog di nuovo questo blog è una specie di
super interessante per qualsiasi programmatore no
solo un programmatore Microsoft
ha una specie di te che sai che proviene da
2009 sai chiudere il ciclo
variabili considerate dannose che conosci
uno dei 1500 tipi di documenti chiamati
qualcosa considerato dannoso e quindi
c’è un piccolo aggiornamento lì che ti dice
sappiamo che abbiamo un cambio di rottura e puf
ci fu il mio discorso perché il mio discorso era
riguardo a questo, diamo un’occhiata a
questo esempio e vedere cosa sta succedendo
Qui
va bene quindi c’è una sorta di più semplice
programma e che puoi immaginare che sia un
loop per ogni variabile in questo lo sai
in questo array e ho pensato che tu
so che tutti possono leggerlo anche se
sei un programmatore Java o un JavaScript
programmatore in modo da iterare semplicemente su
valori da 0 a 4 e poi li stampo ora
il fatto è che c’è una variabile
essere dichiarato lì ok e se tu
hai seguito un corso per compilatore che conosci
che dichiarare una variabile non è solo
dichiarando una variabile che sai di avere
per allocare uno spazio che conosci
da qualche parte nello stack e tu conosci il
dopo di che sai dopo che esci dal
ambito devi rimuovere la cosa così
c’è quella variabile lì, ma dove
è davvero dichiarato dove si trova
allocati bene quindi eseguiamo alcuni test
quindi prima vediamo che lo sai
dichiarato fuori dal giro così e io
non posso cambiare il ciclo, quindi non posso
tu dichiaro la variabile all’esterno e
poi assegno è un po ‘come il tuo dentro
qui per simulare sai che il
variabili dichiarate all’esterno o l’altra
cosa è dichiarata dentro così per tutti
l’iterazione è una nuova variabile allocata così
ora cosa ne pensi è fuori o
dentro e o importa che dici
Eric sei un tale teorico a cui importa
sapere se è al di fuori o all’interno dello stesso
funziona bene così e se non lo hai
chiusure davvero non importa voi
non posso dire la differenza okay se
tu esegui questi programmi che ti danno
esattamente la stessa risposta che ti interessa
può
non osservare la differenza forse se tu
mettere il debugger si guarda si può vedere
ma normalmente non puoi osservare il
differenza dove la variabile è
assegnato prima del ciclo o dopo il
loop ora la cosa è che è questo è
una cosa interessante sembra un
cosa banale ma se guardi
JavaScript ad esempio in JavaScript se
scrivi se dichiari variabile
da qualche parte questo non significa niente
perché tutte le variabili sono dichiarate
all’inizio della funzione così uniforme
in JavaScript se scrivi questo è
comunque sai che sai comportarsi così
e così ogni lingua è leggermente
diverso a questo riguardo e tu puoi
sempre un po ‘come scoprire una volta
avere chiusure diventa più facile che puoi
trovare un po ‘ di sottili differenze così tu
sai che ti tolgono i capelli perché tu
avere un libro e poi si scopre che
c’è qualche effetto collaterale che puoi
osservare perché una variabile può fare
assegnato ogni volta nel ciclo o no
ok ma in questo caso e se li eseguo
tre programmi ottengo l’output atteso
Immagino che questo sia l’output atteso
Voglio solo scorrere l’array
e ottenere quattro valori ok
ora questo codice sembra già un po ‘
pescoso quindi diamo un’occhiata in modo più dettagliato
quindi il primo ciclo è lo stesso
come ho fatto prima, tranne quello che sto per
fare è invece di stampare quel valore
direttamente sto catturando quel ciclo
involucro variabile che mette quella chiusura
nella lista e poi sto solo correndo
attraverso l’elenco e lo ha chiamato
funziona bene quindi sto solo rimandando
stampando la variabile il valore del
variabile e inserendolo in questa lista
di funzioni e di nuovo in JavaScript
sai che vorresti solo scrivere la funzione
apri paren dovrebbe essere un molto
simile in Java mi dispiace che tu debba
aspetta fino a Java non so quando loro
avrà chiusure alle 20:20 forse e
comunque questa è la prima cosa quindi ora
e ho riscritto l’esterno e
l’interno in un modo simile, quindi non farlo
capisci questo è un suicidio qui e
non arrivare a una specie di sai confuso
qui perché il codice è esattamente il
così ho creato l’elenco delle funzioni
qui lo faccio per ogni ciclo e poi
quello che faccio è copiare la variabile del ciclo
in questa variabile locale e questo è il
uno che catturo e in questo caso io
dichiarare la variabile prima del ciclo e
poi catturo e ho usato un qualche tipo
di voi conoscete la suggestiva notazione così
la sottolineatura e l’esterno significano che è
legato all’esterno e qui significa che è
circa legato sull’interno va bene
quindi ora sei tutto un po ‘come sei
più intelligente di me quindi probabilmente già
sapere cosa verrà stampato correttamente, quindi quale
uno stamperà quattro quattro quattro ho fatto questo
una volta con nove nove nove o qualsiasi altra cosa
si, ci sarebbe voluto troppo tempo
Steve solco affilato questo sarebbe stampato
quattro e così davvero la semantica era
che le variabili dichiarate al di fuori del
loop okay e poi se si voleva ottenere
piace o il comportamento previsto voi
dovrebbe tipo di vostra dichiarazione
variabile qui e devo dire che devo
ammetto che ho avuto questo libro diverse volte
posso ancora ricordare che io ero questo
era come una sessione di programmazione della maratona
con uno dei miei sviluppatori e semplicemente no
lavoro e così il mio dev iniziato a tipo di andare
e D compilare in il e tipo di look
al codice della macchina e ho detto hohoho
ridzik diamo un’occhiata qui che cosa abbiamo
fare e poi si è scoperto che noi
tipo di sai catturato una variabile
come quello in una chiusura e invece di
facendoti sapere zero uno due quattro noi
ottenuto quattro quattro quattro così in c-sharp e
questo era il mio esempio nel mio precedente discorso
per mostrare che quando hai mutabile
variabili e chiusure si ottengono otto
Questo è veramente molto pericoloso
ma poi in do diesis cinque e abbiamo dis era
cambiato e ora si comporta così
e ora il problema è che è fantastico
Penso che questo come tu possa vedere come ogni
giorno sul forum e non ne sono sicuro
giorno ma come questo è il più richiesto
domande sul forum è come quello che è
andando lì perché questo non funziona o
sai che la gente tipo scuote la testa
contro il muro e quindi penso che sia così
una buona correzione e ora ovviamente e se questo
è il comportamento che vuoi così se per
qualche ragione per cui vuoi essere gentile
ne conosci quattro per quattro
puoi ancora cambiare la tua
codice per allocare il tipo di variabile di
fuori dal giro quindi niente ha perso due
puoi ancora esprimere ciò che vuoi e
ma sai che il default è adesso
si comporta come se fosse una nuova variabile
assegnato all’interno del ciclo ora questo è
non è naturale come potresti pensare
perché e c’è anche il ciclo for
e il ciclo for è invariato quindi se tu
se fai il ciclo for e questo è ancora
qui come se la variabile fosse assegnata
fuori e il ragionamento è che le persone
aspetto quando scrivono un ciclo for da allora
c’è qualche effetto collaterale sul
variabile lì comunque così si aspettano
che c’è solo una singola variabile
fai effetto collaterale così e di nuovo a
un po ‘ uno svantaggio perché ora
a volte devi passare da una all’altra
per loop e per ogni loop e ora tu
avere un po ‘di mal di testa
per fortuna abbiamo l’ibuprofene o
qualunque cosa o birra e che prenderà
cura di quello va bene
quindi questo è davvero un po ‘piccolo
amo queste cose come minuscole
programmi che fanno cose che tu non fai
aspettati o lasciati andare a fare qualcosa di interessante
comportamento ora la domanda è chi ottiene
la colpa
va bene
a perché alcune persone potrebbero dire il
Fondamentale quando ero un giovane Eric quando io
era un funzionalista fondamentalista
programmatore Direi che naturalmente
sai che stai usando lo stato mutabile tu
non dovrebbe farlo usare ESCO o un reale
lingua e questo non accadrà e ma
d’altra parte ora che sono gentile da parte tua
conoscere il codice di scrittura per vivere io tipo di
come la programmazione imperativa che puoi ottenere
roba fatta sì
quindi non sono più sicuro di come vorresti
colpa quindi diamo un’occhiata a questo guardiamo
a questo qui penso che sia il mondo
okay, il vero mondo è imperativo
imperativo e perché lo dico bene, um
a sapere se si dispone di due programmi qui
che stanno eseguendo e quel programma qui
a destra guardi allo stato di
il programma sulla sinistra e si sa
è qualcosa come lo sai
Logo Microsoft e poi si guarda di nuovo
ed è qualcosa di diverso e allora
questa mattina ti svegli e guardi
e il logo è cambiato di nuovo bene così
il mondo reale è imperativo questo logo
non sì, davvero cambia e e
quindi penso che dobbiamo abbracciare
effetti collaterali sono gli effetti collaterali
buoni effetti collaterali sono ciò che rende il
segno di spunta mondiale
okay, non facciamo un po ‘pazzo
le cose con te conoscono pure funzioni e
così su quello è libri di grande formato che è
buono per i libri SAT che è buono da dimenticare
circa una volta che lasci la scuola superiore dimentichi
sulle funzioni una volta che vai
università o il vero lavoro
facciamo programmazione imperativa perché
il mondo reale è imperativo ora
non credermi , tu pensi Oh, oh
scherza e ho bisogno di tre
volontari per dimostrare che il mondo reale
è un imperativo
un volontario là viene a
volontari e poi qui sei gentile
di te sei come ogni scout volontario
guardando lontano sperando che non capisca
personaggio quindi veniamo qui e tu
tira su questa gamba, tira su quel Lac
tu tira su quella gamba e ora stiamo andando
per tipo sai come strappi questa cosa
si si per
okay guarda bene, così ora abbiamo prima noi
Avevo una specie di simpatico giocattolo che puoi sederti
grazie mille questo è esattamente il
Effetto che volevo che avessimo un giocattolo carino
e ora abbiamo eseguito un distruttivo
aggiornamento su questo giocattolo
non c’è nessuna transazione, non c’è modo
potrei mai rimetterlo indietro e anche se io
avrebbe citare in giudizio di nuovo non sarebbe
lo stesso giocattolo va bene così se non lo fai
credo che il mondo sia imperativo
pensa a questo povero piccolo che conosci
buon giocattolo il mondo è super imperativo
ci sono aggiornamenti distruttivi che non possono
non essere riuscito a copiare questa cosa
e poi sai mutare la copia di questo
la cosa è mutata e questa cosa è morta
okay allora se sai che puoi dimenticare
tutto ciò che dico oggi se tu solo
ricorda che il mondo è imperativo il
il mondo prende gli effetti collaterali buono tutto
giusto e ora possiamo andare tutti e bere
birra ma proprio la stessa cosa che apri
la birra la bevi è vuota, non c’è parte
di tutti gli effetti collaterali va bene così ora se noi se
ora diciamo che tutta questa mutazione è come
il mondo dovrebbe essere a posto allora chi è
colpevole non è sicuramente il ciclo
Ecco che tipo di aggiornamenti ci sono
variabile non è questo ragazzo qui che è
sempre fare anche un po ‘di brutto cose
aveva una lista ed è tipo da te aggiunto
elementi alla lista che lo catturano
variabile anche in un certo senso, ma noi ancora
devo assegnare la colpa quindi l’unica cosa
che possiamo incolpare è il protocollo
tra i due l’interazione tra
il produttore e il consumatore che devono
sii sbagliato perché le azioni imperative
sono perfetti quindi deve essere la cosa che
incolla queste diverse azioni imperative
insieme quindi diamo un’occhiata così bene
ma questa è la cosa principale che sono
andando a fare c’è un bel po ‘di genere
di sangue qui sul pavimento da
piccolo animale comunque e quindi quello che abbiamo
fare è riconoscere il
presenza di effetto okay non dovremmo
prova a trovarlo o qualsiasi altra cosa dovremmo
trattare con esso e dovremmo pensare
e renderlo esplicito, così ci sono
molte cose che possiamo fare se guardiamo
a questo consumatore produttore qui così
era la cosa da guardare e questo era il
elenco di azioni in cui sai che sono solo
accumulato la variabile così c’è
diverse cose che posso fare bene prima di tutto
tutto ciò che noto è ciò che sta realmente accadendo
è che c’è una sequenza di valori
che sono comunicati tra il
produttore e il consumatore ogni volta che
andare in giro per il ciclo c’era un po ‘
succede la mutazione e qualcosa
è successo così che è il primo indizio è
che c’è un flusso di cose
succede a posto e posso fare con questo
sempre leggendo quel valore ma
poi qualcosa va storto, ecco cosa
abbiamo visto è come se lo leggessi di nuovo
bene a seconda di come l’ho letto potrei
ottieni solo l’ultimo valore o potrei memorizzare
valore precedente, quindi questo è stato sicuramente
la cosa più pericolosa quindi facciamo
è più esplicita una cosa che potrei
fare invece di guardarlo
variabile potrei dire se il produttore
vorrei darmi una funzione e ora ho
per dire Eric questa non è una funzione questo
non puoi mai sapere che questo è un po ‘
la cosa più strana se si guarda a
qualcosa che diventa vuoto e restituisce a
valore
non ci sono molti interessanti
funzioni matematiche che possono avere
quella cosa giusta perché è una funzione
qualcosa in cui lo dai la stessa cosa
argomento che dà lo stesso risultato così
questa cosa è davvero isomorfica a solo
T così se tu, ma come tutti, c’è
così tante funzioni in Haskell o no
in Haskell in Do diesis o Java che
prendere il nulla e fanno cose utili okay
quindi, ma non sono funzioni, ma è così
perché hanno chiamato funks, sai che sono un
funzione amputata un po ‘e ma
comunque, quello che posso fare è poterti dire
sapere che il produttore può darmi il
consumatore un funk e
tempo voglio vedere un valore che chiamerò
quel funk e mi darà il valore
così ora ho codificato che effetto collaterale in
questo sai funzionare questo piccolo thunk
che tu sai che io condivido e ora posso
rendere esplicito il fatto che voglio
leggi quella cosa ora se guardi dentro
c-sharp almeno come funzionano le proprietà
le proprietà hanno getter e setter e
poveri programmatori Java devi dire
sai, vai a mangiare e metti a punto e c-sharp
dici solo che foo foo è uguale a cinque ma
davvero quello che succede è che chiami o
quando dico che x è uguale a foo o foo
significa davvero che chiami a prendere cibo così
chiami il getter in modo che sia questo ragazzo
Va bene che è un modo per farlo
l’altro è l’ inversione del controllo
dove io come consumatore posso dare un
funzione o conosci uno di questi altri
cose posteriori perché questo è anche strano
giusto qualcosa che lo prende T e
restituisce nulla se lo guardi da a
punto di vista puramente matematico che
è un’assurdità completa perché è l’unica
la cosa che può fare è restituire l’unità semplicemente
getta via il suo argomento restituisce sempre
unità super super utile funzione a destra
ma ci sono molte funzioni che ritornano
vuoto di fare grandi cose
gonzo la linea giusta si non dovrebbe fare
qualsiasi cosa perché c’è il vuoto ma ancora
conosci la mia funzione più usata, va bene
ma qui il trucco qui è che io come a
il consumatore dà al produttore una funzione
che può chiamare per avvisarmi ogni volta
il nuovo valore è disponibile ok, quindi c’è
questi due modi per tipo di comunicare così
o il produttore mi dà una funzione
o io come il consumatore dare al produttore a
funzione e lì vedi che vanno
e direzioni opposte e indovina cosa
anche qui le firme vanno di segno opposto
indicazioni whoo qualcosa di bello
iniziando lì e ok quindi diamo un’occhiata a
un po ‘di più in questo ah
lì c’è una freccia mancante qui oh
che potrebbe essere che il PowerPoint si è esaurito
di frecce o cos’è che conosci
a corto di frecce
ma la cosa è che tu lo sai e
questo è quello che sto cercando di dire qui
come se ci fosse una bella matematica
teoria ma quando scrivi il codice che hai
pensare ai dettagli operativi
e lo stesso qui, quindi lo sono già
agitò la mano così poi ho passato una funzione
a te e tu passi una funzione a me bla
bla bla bla ma c’è di più giusto
prima di tutto ci deve essere un po ‘di iniziale
stretta di mano dove sei il produttore e
il consumatore e stabilire il fatto che
sai che vogliono comunicare valori
tra l’un l’altro quindi forse il
il consumatore può dire di sapere cosa ho visto
0 1 2 3 Sono un fisico, lo so
sarà 4 5 6 e così via, quindi non farlo nemmeno
dimmi altri valori in modo che il consumatore
vuole dire al produttore che è abbastanza
Non ho intenzione di non essere interessato
più valori e d’altra parte il
il produttore, proprio come qui, potrebbe finire
valore quindi deve dire al consumatore
scusa ragazzo o ragazza o qualunque programma
non ci saranno più valori ok così là
c’è c’è di più oltre che
funzioni semplici, quindi sommiamo e facciamo
questo e per i programmatori Java loro
riconoscerà qui l’iterabile
i programmatori c-sharp dell’interfaccia lo chiamano
enumerabile e e la chiusura
i programmatori diranno oh sì, certo
questa rivelazione questo è il semantico
dominio di chiusura giusto che sia
sequenze e così sequenze sì loro
sono ovunque c’è Haskell the
scrivi solo tu usi i nostri elenchi di altri tipi
non hai mai nemmeno capito II non solo io
scrivi elenchi o addirittura vieni qui
hanno ragione nella sintassi
ovunque ma comunque così questo è il
iniziale stretta di mano il consumatore chiede il
produttore, dammi questa cosa che posso
chiama se voglio il valore successivo e ora in
per ottenere il prossimo
ti dico che posso ottenere il valore o il
il produttore può dire che ho finito o Depew
qualcosa può andare storto con il produttore
o puoi lanciare un’eccezione così
davvero quella funzione che ti ho mostrato
dovrebbe essere qualcosa di simile così è
qualcosa che prende unità e lettori
o un valore o niente
ciò significa terminazione o un’eccezione
genera un’eccezione qualcosa è andato storto
bene questo è il modo maldestro che sai se
non hai tipi di unione devi
lo codifico in modo maldestro, mi dispiace
e ci sono programmatori f-sharp qui
nessun programmatore F preciso va bene allora
questo è bello se questo è questo
una codifica così elegante di tipi di unione
e poi l’altra cosa qui è quella
quando il consumatore chiede il
l’enumeratore il produttore gli dà un
enumeratore ma anche quell’enumeratore
usa e getta che significa che il consumatore
posso dire di essermi liberato di ciò di cui non ho bisogno
più valori così così è così
funziona bene , non ho gli occhiali
Dave quindi questo non aiuterà e
ma sto bene, quindi dov’è lei?
dove dovrei sopportarli qui oh?
quello è oh pensavo che dovrei guardare
Compresi allora devo andare a vedere
Charles e guarda il secondo Oh troppi
effetti collaterali su di me tutto bene
bene così ora giriamo questa cosa
quindi abbiamo detto che sapevate che un modo era
che il produttore potrebbe darmi come
la disfunzione del consumatore che potevo
chiama per ottenere i valori successivi, ma facciamolo
giralo intorno voglio avere il controllo
se sono il consumatore, lo dirò
il produttore qui è una funzione e tu
mi può richiamare
ecco il mio numero di telefono, richiamami
quando si ha qualcosa di interessante da
dire che non ho intenzione di andare, ho il controllo
quindi questo è quello che fai qui
sei iscritto e il produttore si iscrive
al consumatore dandogli una funzione
o interfaccia e in questo caso codifichiamo
di nuovo il tipo di unione avendo tre
diverse funzioni qua e ancora
c’è modo di dire che ho finito così quando
dai al produttore il tuo osservatore
torna indietro, usa e getta quindi puoi
non sono più interessato, okay
quindi qui vedi che ci sono due modi per
per comunicare sequenze di valori in
il primo caso è stato il produttore che
era responsabile perché lo avrebbe fatto il produttore
tipo di sai e sai di avere questo
funzione e in questo caso è il
il consumatore che è responsabile perché il
il consumatore consegna semplicemente questa funzione
al produttore e sarà gentile da parte tua
sapere avvisare ogni volta che un valore è pronto
ma la cosa interessante qui e lascia
vedo se riesco a vederlo okay
questa cosa qui così ho dovuto codificare che
strano tipo Unione qui ma guarda sembra
esattamente il contrario e ciò riflette
la differenza nel protocollo in cui tu
sapere che i protocolli funzionano in a
direzione diversa va bene così questo è
i due modi in cui puoi comunicare
sequenze di valori e così il reale
il trucco è che quando guardi un programma
non dovresti dire oh lo sai
la mutabilità è male dovresti davvero guardare
a quali sono gli effetti che stanno andando
su e come vuoi comunicare
questi effetti tra voi conoscono il
diverse parti del tuo programma e in
questo caso devi scegliere lo sai
se vuoi quella sequenza di valori
se vuoi saperlo lo sai
esponilo come un enumerabile in quanto a
sequenza basata su pool o come osservabile
come una sequenza basata su spinta ora il
cosa interessante non tornerò su tutti
le diapositive ma puoi chiedertelo Eric
quel codice che hai scritto è stato
orribile stai iterando su un array
mettendo tutti questi valori in te lo sai
all’interno della chiusura all’interno della lista e
allora il tuo
affittandolo perché non hai appena
catturare quell’array direttamente bene
sarebbe stato così giusto così
un po ‘strano per quello che stavo facendo lì
ma comunque forse voglio fare un po ‘di fare
in questo altro modo va bene così la cosa
è che gli effetti collaterali sono un lato positivo
gli effetti sono buoni sai che non lo so
se se lui o lei è d’ accordo, ma devi
tipo di te pensi a come tu come
hai progettato il protocollo ora ho parlato
qui su più valori ora puoi
dì oh, ma Eric non sto facendo un po ‘
La mutazione riguarda solo le costanti
c’è solo un valore ma anche tu
può avere effetti collaterali se sei un
Haskell, stai dicendo bene, lo sai
Non sto mai calcolando nulla fino a quando tu
chiedilo perché forse non l’hai mai chiesto
per questo e poi avrò fatto qualcosa
sai che non era necessario, io sono un
persona pigra e così sai
qualche senso un modo in cui il consumatore e
il produttore comunica correttamente
il produttore è pigro , non farà nulla
a meno che il consumatore non abbia chiesto esplicitamente
e quindi ottieni solo un valore e
se lo chiedi una seconda volta lo sei
garantito per ottenere lo stesso valore ma il
la cosa è pigra, quindi questa è un’altra cosa
che devi stare attento e se
Ho una funzione che restituisce un int
beh è diverso da una funzione
che restituisce qualcosa che quando chiedo
perché restituirà la fine proprio così
c’è questa sottile differenza lì così
di nuovo devi stare molto attento
quali sono gli effetti del tuo
computazione quindi in questo caso se c’è
anche uno possiamo usare il tipo pigro di T
e il pigro di T ha una sola operazione
cioè dammi il valore che a quello
il punto calcolerà il valore
restituito e la prossima volta che chiedi
per esso ritornerà esattamente lo stesso
valore che almeno conosci
non c’è nulla che tu sappia ancora
dato che siamo qui nell’imperativo
lingua lì
niente qui se chiedi il valore
ancora una volta che vi darà un altro
giusto e quale è la bellezza pure
in realtà così e ora hai chiesto cinque
volte per questo valore e ora vado
per darti qualcos’altro, vediamo come
buona voi quattro andate là siete e
questo è il tipo di ciò che faccio di solito
il mio codice e poi ecco l’ altro mio
compito tipo preferito di T non perché io sia
una persona così orientata al compito più
persona caotica creativa ma questa ha
un look così bello e originale
quindi qual è un’attività un’attività è qualcosa
che ha un metodo di larghezza continua e
guarda che che prende una funzione che
prende un compito ogni c’è un valore
e quindi restituisce un’attività
Wow è C questa cosa sembra essere dentro
il posto sbagliato perché perché se ho un
compito sai perché dovresti sapere
dare questa funzione perché vorresti dare
il compito ora per fortuna lo è anche lui
questo ragazzo qui, dove può che posso usare
per afferrare il risultato e comunque
uno è un como net okay se um se si
sei se sei annoiato ora
e tu dici che cosa sta succedendo qui
scrivi qui questo è il legame di una como net
così c-sharp in realtà ora ha il supporto per
entrambe le monadi e le comole reti nel
lingua Penso che sia abbastanza tipo di
sai che non è carino per uno strano
linguaggio imperativo che ha ora
nota e questo mi rende davvero triste
più triste che uccidere quel poco
animale c’è quel pigro di T e compito
di T non sono interfaccia quindi l’ enumerabile
e osservabile o interfacce ma
certamente queste cose qui sono concrete
tipi ed è per questo che intendo
se sei un programmatore, penso che
la ragione è che i linguaggi come Java e
c-sharp sono troppo confusi con le classi
e interfacce e tipi astratti
e qualunque cosa sia come ah e così c’è
troppa scelta e poi bene è solo
come il
Principio del pigeonhole, se hai
troppa scelta ad un certo punto lo farai
fare la scelta sbagliata e quindi penso
questa è una scelta sbagliata, ma facciamolo
guardare dal lato positivo quello che abbiamo
ho visto è che abbiamo iniziato con uno
digita quindi questo è il produttore che aggiunge un
variabile mutabile di tipo int e let’s
generalizzarlo per digitare T e poi abbiamo visto
che in realtà c’erano altre quattro scelte
che erano nascosti dietro a quello semplice
programma giusto quindi sembrava un
programma banale che solo tu sai era
comunicare interi tra produttore
e il consumatore, ma tu lo sai davvero
potresti dire bene che sai se questa cosa è
produce molti valori posso interagire con
lo sai in una piscina base o spinta
modo basato o se produce solo un I
può farlo o pigro o in un
modo asincrono okay quindi ce ne sono cinque
le cose qui e ora mi piace il cibo cinese
e indovina se tu non puoi fare
Cibo cinese senza polvere a cinque spezie
non puoi fare il cappotto senza cinque
effetti okay
quindi questi cinque effetti sono le cose
che rendono il tuo cappotto un po ‘gustoso e
bellissimo okay e poi l’altra cosa
e in cui credo davvero che questi
le spezie o questi effetti creano un equilibrio
quindi questa è la cosa che è quando scrivi
il tuo cappotto
devi avere questo equilibrio che hai
di pensare l’equilibrio sai che è
i tuoi codici sono basati su push o sono i
unica piscina based è sua capacità di bloccare tutte le
tempo o così è tutto come te
sai che sei come lo chef e hai
per cucinare il tuo programma e puoi cucinare
altre cose forse sai che puoi fare
più soldi con questo, ma penso che tu
conoscere il codice di cottura è un po ‘più divertente
Tutto ok
quindi mettiamo questo tipo di giovane giovane
cosa quassù e io sono hippie, no
sai cosa succede sai che ho avuto
come evidenziato questa cosa qui
conoscere gli opposti costringe a trascinare questo e
quello e sembra questo giovane giovane
va bene ma
se guardi indietro agli esempi che ho dato
c’era questo yin-yang che c’era
questa cosa io vi do una funzione che
puoi richiamarmi o darmi
una funzione che posso mostrare c’è questo
c’erano questi opposti quindi c’è
qualcosa di profondo lì che sai
quando stai codificando a cui pensi
questo tipo di opposti sai che posso
fallo in questo modo o posso farlo in a
in modo completamente opposto e da questo
è Chicago e ci sono molte persone da
settore finanziario un altro modo per dirlo
è come se ogni moneta avesse due lati e tu
lo sai che sai che devi sempre guardare
da entrambe le parti, ma l’altra cosa è
inoltre devi trovare dove è il
valore reale posso lanciare una moneta ma tu
so che ho bisogno di fare soldi, io
bisogno di dover fare più monete oh e
dov’è il valore esaminiamolo
beh, penso che il vero valore sia nel creare
una distinzione
oh ora poveri ragazzi in Australia sono stato gentile
di saltare in giro, sono ancora qui
non sono scomparsi, quindi la cosa è questa
tu che devi vedere che è
un’altra cosa che penso sia super
essenziale nella programmazione funzionale è
che separi i concetti di
interfaccia da implementazioni in questo
caso in cui ti ho dato questa interfaccia
comunicazione basata su boo che era un
interfaccia e ci sono molti concreti
tipi che implementano tale interfaccia ok
ma se componi i tuoi programmi, se tu
incollare il codice insieme in cui lo fai
termini dell’interfaccia e penso che se
qualsiasi cosa tu sappia, penso che sia funzionale
la programmazione ha più a che fare con questo
concetto e con effetti collaterali
la programmazione funzionale è tutto
essere a conoscenza di ipotesi nascoste e
quindi rendendoli azione realizzandoli
esplicita o ignorarli
ma sai conoscendoli consapevolmente
ogni volta che non importa davvero okay
quindi guardiamo un po ‘di più
questo e come ho detto
in programmazione oo penso questo
la distinzione è spesso sfocata perché
ci sono troppi modi per farlo
metà se hai una classe base astratta
beh, è ​​un’interfaccia o ha detto a
Classe bene è che sta per essere o qualche
tipo zombie a metà strada okay così
e penso che se guardi vai o vecchio
chiamata moderna più moderna vieni
la differenza tra interfaccia e
l’implementazione era super super nitida e
chiara e in programmazione funzionale che
la separazione è anche chiara e chiara se io
darti una funzione l’ unica cosa che tu
può assumere è la sua firma va bene che è
l’interfaccia e poi posso darti
qualsiasi implementazione di tale funzione ma
non c’è nient’altro che puoi fare al riguardo
l’unica cosa che puoi sapere è
la sua interfaccia quindi penso che sia uno di
i punti di forza sul funzionale
la programmazione è che questo tipo di forze
questa stretta separazione tra interfaccia
e implementazione mentre tu conosci me
non so nemmeno che qui c’è un protetto
virtuale parziale Bligh è di nuovo la mia testa
cominciando a girare devo sempre ammettere
questo ogni volta che devo usare tutto questo
conosci i quantificatori che devo andare e
guarda nel manuale cosa significa questo
Oh proteggilo oh è quel qualcosa
diverso dal tuo tipo di nuovo
JavaScript è tutto pubblico, quindi perché
fallo così chiunque può dirmi perché Java
e c-sharp hanno questo tipo di pazzo
roba in cui è come il linguaggio che
ognuno usa ha solo un tipo di pubblico
cose che non conosco, quindi faccio tutto
pubblico non mi piace privato quindi
diamo un’occhiata ad alcuni Haskell ora
okay e ancora non sto cercando di insegnare
si chiede oh Sto cercando di insegnare la
pensiero
che penso sia il valore dietro
programmazione funzionale quindi diamo un’occhiata
questa cosa qui piega la nostra che è
qualcosa che prende una lista e lasciami fare
assicurati di estendere qui qualcosa
che prende una lista e la piega a
valore di tipo B quindi prendi una lista di a e
è passato a un valore di tipo B e
cosa dice quando hai il
lista vuota che è il primo parametro
c’è B e poi quando hai un
stich composto da voi conoscete un
elemento a e quindi il risultato del piegamento
meno è necessario applicare il
prima operazione quindi questa è una specie di a
funzione superiore di solito è come
piega sono um
vedi già qui questa cosa
prende due funzioni o in un lungo
funzione e una B e in questo senso è
buono perché è strettamente separato
l’interfaccia dall’implementazione essa
dice se mi dai B e questa funzione
Ora posso ridurre questa lista a
valore ma se sei un vero Haskell
programmatore vedi che c’è ancora un
tipo concreto c’è ancora quella lista
queste parentesi angolari prima di tutto questo
è una specie di uno dei pochi tipi che
usa questo tipo di notazioni dist regolate
come noi ghiaccio o non voglio vederlo
e anche io perché non potrei piegare
qualsiasi altra cosa, perché posso piegare solo le liste
così in Haskell puoi dire anche tu
come ci sono alcune operazioni qui
e ti mostrerò nella prossima slide
di cosa sono posso piegare qualcosa
Digita T di a a B se mi dai questi
due funzioni è abbastanza notevole
così bene se lo sei se stai usando
chiusura non ci sono tipi quindi questo
questo probabilmente non ha alcun senso
tu in primo luogo se il tuo
Programmatore JavaScript sai che non lo fai
usa tipi per niente non sai cosa
questo significa sia e, ma se sei un
programmatore f-sharp o un programmatore Java
o un programmatore c-sharp o un VB
programmatore, noi tutti amiamo VB, ovviamente
è davvero strano perché questo è un
funzione generica dove il tipo
parametro è un costruttore di tipi e questo
è la cosa che mi manca di più in C sharp
e F sharp e, qualunque cosa sia funzionale
lingue che non hanno questi
tipo di voi conoscete tipi più elevati di tipi
Penso che Scala li abbia e ormai
questo è super potente perché non lo faccio
voglio avere qualcosa che funzioni solo
per le liste voglio farlo funzionare
strutture dati arbitrarie ok e
questo è quello che fa questa cosa
ti permette di fare e poi puoi scrivere
funzioni come questa che ti dicono che io
puoi trovare qualcosa in un contenitore di A’s
se mi dai un predicato e poi questo
la cosa deve essere pieghevole e puoi vedere
questo è probabilmente implementato in termini di
colpa quindi ora questo tipo ti dà molto
di informazioni perché questo tipo di racconta
esattamente quali sono le ipotesi su
i tipi di cui hai bisogno per fare
questa implementazione funziona ma dice
niente di più e niente di meno così
Penso che la cosa importante dei tipi sia perché
Mi piace il tipo è perché dà
questo tipo di specifica di questo
problema in modo molto astratto che
questo mi dice semplicemente come sviluppatore
quello che devi fornire, io lo farò
puoi sapere come si trova questo elemento
per te ora in Haskell ci sono questi
le cose chiamate classi tipo non hanno nulla
fare con gli occhiali in c-sharp o Java
e ma la classe tipo è davvero te
conoscere solo una collezione di funzioni e
quindi ecco come un monoide qualcosa che
potresti sapere se vai a
cocktail party o forse sai
dopo comunque la birra si oggi io
tipo di definire tre Menards yeah whoo
ma ho definito cinque monadi aperte, non l’ho fatto
andare monadi qui quindi è come sì, ma
cos’è una mano è solo qualcosa
sai che ha un operatore binario che
può incollarsi a due di loro insieme
e poi c’è un elemento neutro
questo è tutto ciò che i moloidi non sono tuoi
Morto speciale così quando questo Haskell persone
amo avere questo tipo di cose per
Manos qualunque cosa provino a impressionarti
non crederli
va bene ma ecco la cosa va bene e
questo è il posto dove voglio arrivare
è che se stai usando questo tipo
classi e davvero se hai un
firma come quella che dice di sapere
colpa che sai presuppone che M sia amiloide
e poi conosci davvero U of M to M
è una scorciatoia per passare tre
funziona come argomento per questo
funzione tranne che il compilatore lo farà
iniettare quella roba per te così voglio
fai un’osservazione che conosci la dipendenza
l’iniezione è per le persone che non sanno
Matt e io ci crediamo ancora perché
quello che sta facendo davvero è gentile
di voi conoscete l’ iniezione di dipendenza è
iniezione di dipendenza controllata ma tua
esplicito al riguardo non voglio averlo
qualcosa in alcuni file XML una colla XML
e il tipo di ammaccatura cambia come la mia
il programma si comporta bene così l’intero punto
sulla programmazione funzionale sei tu
rendi tutto esplicito sei super
esplicito su di esso e poi quando si sa
quello che stai facendo ok ora sei un
un po ‘competente quindi puoi lasciarlo
il compilatore si prende cura di esso
ok ma mai e poi mai fingere che tu sia
più intelligente di chiunque sia come oh vabbè
semplicemente facendo il tuo file XML qui sul
lato e ora è davvero gentile da parte tua
scherzare con il mio codice no no no
Devo essere in grado di esprimere tutto dentro
termini di questa cosa super esplicita con
sai guarda cosa significa questo è questo
e così sai ogni volta che il compilatore
posso capire che ce n’è solo uno
scelta per quel monoide sì, allora può
espellilo ma non perché tu ti conosca
ha scritto che in un file XML va bene ora se
avresti guardato questo tipo e
sai ascoltami attentamente, hai detto
Eric, ma stai parlando di quello che c’è
ancora un tipo concreto vedo ancora che
freccia che non hai astratto al
estremo e sei così estremo
persona e ora verrai a guardare
quella
uno due tre quattro cinque frecce qui
come puoi farlo?
Voglio dire che ti sta fissando in faccia
va bene così se vai fino in fondo
anche questa freccia è qualcosa che è
non un tipo concreto che dovrebbe essere un
interfaccia quindi ottieni la teoria delle categorie
va bene così ancora una volta la teoria delle categorie
la gente ha paura per questo non è niente
sono solo i matematici che fanno l’interfaccia
programmazione basata va bene questo è tutto
quindi ora conosci la teoria delle categorie e e
così quello che stanno dicendo è che bene tutto
Mi serve ho bisogno di avere qualche funzione
da A a B cosa fanno cosa sono
operazioni sulla funzione e loro
non chiamarlo funzione, lo chiamano
morfismo che suona meglio
morpheus yeah un conto diretto va bene così io
andare da A a B o dovrebbe
essere come una freccia qui e se posso andare
da B a C c’era una freccia qui da
Da A a C quindi questa è la composizione
la freccia è scomparsa Penso che sia quando
vai da PowerPoint a keynote e
le frecce scompaiono e poi tu
devi andare in un certo modo sai che questo è ciò che
matematici come se fossero tipo
le cose per essere gentili sai che se
si dispone di una che si può andare a una e che
sai se puoi pubblicarlo in quel modo
cade fuori sì, certo
quindi davvero questo è come un Malloy – lo è
sarà un punto e virgola come il tuo
operatore di composizione ma dimenticati
Va bene
ma ora il trucco è che non dovresti
mi innamoro della teoria delle categorie che vedo
così tante persone e ho sbagliato
me stesso Oh teoria delle categorie che vai in a
buco nero vai in una tana di coniglio e
sai cosa c’è nella tana del coniglio
ok, che cosa ti ha fatto il coniglio
so che non si vuole uscire dalla
buco del coniglio tutti i tipi di emergenza
sul modo da non andare nella tana del coniglio di
teoria delle categorie va bene, dimostra che lo sei
competente e basta fare un passo indietro e dire
ok capisco cosa vogliono
solo tipo di per i matematici che
anche cercare di essere come programmatori okay I
Guardalo
buona mossa con la tua vita e ma di
i matematici del corso sono molto più intelligenti
di noi va bene
Sono come se fossi in te
tipo di industria finanziaria sei
scrivendo il codice o tutti quelli che conosci il tuo
amici matematici o il tuo tipo di
quelli che sono i tuoi amici fisici fisici
i cloni quelli sono ora sono gentili
di mangiare caviale da qualche parte, sai
dall’altra parte della strada va bene così dovremmo
impara dai matematici che dovremmo
rubare dalle loro idee quindi se guardi
teoria delle categorie che conoscono anche giovani
solo loro lo chiamano dualità e loro
non fare una specie di grande affare come caldo
e caldo, acuto e morbido ma ora loro
Dì solo che rovesci le frecce e
allora ottieni qualcosa di utile oh fantastico
quindi se ho tipo di invertire le frecce che ottengo
qualcosa di utile quindi è così che tipo di
inventato questa cosa conosci questi due
protocolli Ho appena visto uno e io
detto va bene sto facendo il giovane giovane
cosa e posso invertire le frecce e
ci deve essere qualcosa di utile anche lì
ottimo ma poi ovviamente non lo dico
ora sto insegnando tutti i miei trucchi
tu e ma questo è tutto ciò che fai bene
non entrare in quella tana del coniglio, guarda
in quel dire va bene che qualche idea che posso
rubare e uh sì monadi non è come
se ti senti mai dire la parola
monette vai a contatto con uno strizzacervelli okay
c’è qualcosa di profondamente sbagliato in te, okay
torniamo indietro è quasi l’ultima mia diapositiva
perché se guardassi quello che ero
cercando di fare stavo cercando di risolvere a
problema pratico ha davvero importanza
che questi ragazzi sono duali, non lo so
è un po ‘ usato come un trucco da fare
da uno all’altro, ma lo fa davvero
questione che non conosco importa
entrambi sono falciare reti e reti di Como che
sono auto-duali, importa
il tuo cervello è ora in questo tipo di nodo
dove si sa è una specie di tutti legati
e tu non so che ha risolto il mio
problema che ho avuto
stipendio quindi sono felice, va bene così il mondo
è imperativo non dimenticare mai che va bene
mai dimenticare che se qualcuno vuole
dimostrami che sono sbagliato sono felice
va bene la programmazione funzionale è un grande
strumento di pensiero ma imperativo
la programmazione è lo strumento per gli hacker
grazie mille ho perso completamente
traccia del tempo quindi non lo so bene
è grandioso, tutti hanno paura
loro erano lì loro finiranno sì
va bene ricco
ah, quello che intendo per valore non è nulla
speciale va bene così e so che cosa noi
vedrai da te che hai fatto la tua gentilezza
di te sai per te un valore è qualcosa
è una specie di te che ha una specie di magia
potenze
per me se il valore è tutto ciò che posso
assegnare a una variabile in c-sharp o Java
che posso schiaffeggiare e mutare e qualunque cosa
è solo qualcosa su cui posso aderire
che sai in quella posizione e così
non c’è niente di speciale in questo e
di nuovo perché le notizie di valore se si
importa che questa cosa ha un valore in
tipo di sai, nel senso che non lo so
so che non ho ancora visto i tuoi discorsi ma dentro
In quel caso, tu cosa diresti tu
devi rendere quell’effetto esplicito e così
se hai un numero di tè ma
quel tè stesso sai che vuoi
consideralo come un valore che potresti volere
farlo come un enumerabile di pigro di tè
e così ti stai spingendo da parte tua
rendere gli effetti di tipo esplicito fino al
il valore che la mutazione di esso non ha
importa più quindi questo è come
se lo sai che è come il
Essenzialmente, l’hai spinto fino in fondo
necessario ma non per questo più lontano e
a volte dici che lo cambierò come
è così è sì la risposta rapida qui
quindi sono un ragazzo super-pragmatico, intendo io
voglio solo fare il mio lavoro e lo sono
felice di aver ancora lasciato quella giusta ma
a volte devi solo tipo di voi
sapere uccidere il bambino
tu

Please follow and like us: