Press "Enter" to skip to content

GOTO 2017 • Make Web Apps Fun to Build and Easy to Refactor with Elm • Daniel Bachler


[Musica]
okay, questa è la mia conversazione, lavoro a
compagnia chiamata Douglas Connect che è
una piccola piccola azienda in Svizzera
che funziona in tossicologia e abbiamo costruito
due dei nostri prodotti in Elm e io voglio
parlaci un po ‘ del mio viaggio
mi ha portato ad Al e quello che mi piace
e su questo tipo di lingue così
una domenica oziosa questo quest’anno questo
estate
Ho portato questo ho fatto questa piccola mappa di
come i linguaggi di programmazione che io conosco
e mi piace e ho vissuto in alcuni
punto nella mia vita così ho iniziato nel
deserti non immondizia raccolti in C e
C ++ e poi ho lavorato lì per un po ‘
e poi ho iniziato ad andare di più al
montagne orientate agli oggetti a c-sharp
per lo più ho fatto anche un po ‘di Java
significa che penso per la maggior parte degli intenti e
scopi sono molto simili ci sono stati
un paio di cose che ho portato un po ‘
desktop Windows multi-thread
applicazioni per le statistiche fondamentalmente
e c’erano un paio di cose che io
mi è piaciuto molto ma poi nel tempo
c’erano anche queste cose
iniziato a infastidirmi davvero a doppio senso
il binding dei dati è stato molto bello nel modo simile
teoria, ma in pratica ha portato a molto
grandi problemi nel codice complesso
i modelli di progettazione orientati agli oggetti sono fantastici
e ti permettono di pensare un certo
modo ma ho trovato spesso che sono a
una sorta di distrazione, poi sono andato
nelle paludi dinamicamente tipizzate
Li chiamo paludi perché penso che sia
un po ‘difficile costruire grandi progetti in loro
in un modo solido che piace sopportare per a
molto tempo in grandi squadre ho fatto un po ‘di Python
lavoro sto ancora usando quello al momento
un po ‘ JavaScript ho iniziato a
creare front-end Web in JavaScript e I
ha avuto questo problema che i refactoring sono
davvero incline all’errore penso che sia stato uno
dei miei principali punti dolenti ogni volta che mi
cambiato qualcosa in JavaScript che hai
essere veramente diligente per essere sicuro
catturi tutti gli usi e assicurati
che le strutture dati modificate vengono catturate
dappertutto e poi ho avuto un amico che
mi stava parlando di Haskell che è
parte di questo gruppo di funzionale
foreste li ho chiamati così abbiamo
linguaggio come Scala che è come un
linguaggio ibrido e f-sharp come sono
un po ‘orientato agli oggetti in qualche modo
funzionale e quindi abbiamo puro script
e Haskell e F scrittura acuta e pura
in Haskell e mi dispiace e in questi
tipi di lingue e poi abbiamo Elm
lassù nella foresta e penso che
Elm è una lingua molto carina perché è
da questa intera famiglia di lingue
sono tutti molto forti e potenti
pensa e una cosa molto buona da imparare come
un programmatore Credo che Elm è il
più accessibile ed è molto utile
per la costruzione di applicazioni web e questo è
per questo che voglio parlare con te su di esso facciamo
salta a dare un’occhiata a ciò che l’altro
il modo di lanciare sarebbe quindi quello che è L forse
una rapida dimostrazione di mani quanti di voi
hanno fatto almeno un po ‘di Elm
codifica come un tutorial o qualcosa del genere
quello va bene alcuni intendo se ti piace avere
ho sentito molto parlare di Elm o di come è stato
salire sul loro radar ok, fico, quindi a
molti di voi probabilmente già
come questa idea, quello che voglio dire è che è un
linguaggio tipizzato staticamente è puramente
funzionale quindi non è orientato agli oggetti
non è obbligatorio compilarlo
JavaScript è fatto per costruire web
app con esso la grande cosa che ero
pensando di far lampeggiare o
qualcosa di simile a destra è non c’è
errori di runtime se hai mai scritto
applicazioni web in JavaScript penso questo
sarebbe immediatamente attraente per te
giusto così nessun errore di runtime mai ed è
molto facile da imparare è davvero molto
linguaggio accessibile e avere un
semplicità il creatore di fatto a
priorità che penso che abbiamo ascoltato nel
parla prima qui nella programmazione
la lingua è traccia di dove si parlava
ruggine che i messaggi di errore dal
il compilatore di Elm è stato fonte d’ispirazione per
fare meglio i messaggi di errore della ruggine
penso che sia vero per un sacco di
lingue al giorno d’oggi quindi messaggi di errore Elm
sono come il gold standard Credo che entro
ora per quanto bene può dire un compilatore
tu su cosa va storto
la sintassi così qui abbiamo JavaScript
cindex javascript è uno dei
lingue che amano un sacco di linguaggio
è venuto dalla c famiglia di lingue
la sintassi è saggia quindi ha queste parentesi graffe
e come punto e virgola alla fine del
linee e cose del genere e l’ olmo è
dalla famiglia di linguaggi ML entrambi
sintatticamente e anche dai concetti
utilizza e inizialmente appare la sintassi
strano ma se lo sistemate nel giusto
modo, allora si vede che solo si sbarazza
del disordine quindi questo è Elm, così io
tornare indietro praticamente tutti questi strani
le cose a posto abbiamo appena li portano via con
le parentesi graffe i punti e virgola sì era
bello negli anni ’70 per avere quei due brillanti
parti c’è un po ‘più facile ma noi
non ne hanno davvero bisogno, quindi di solito
lo allinei di più in questo modo tu
avere una dichiarazione di funzione che è
chiaramente questa è una funzione perché lì
sono altri token prima del segno di uguale
al livello più alto e poi valuta
a questa cosa non abbiamo bisogno di tornare
dichiarazioni e poi sotto hai
applicazione della funzione quindi abbiamo un valore
chiamato risultato e assegniamo il risultato
di usare la funzione moltiplica i numeri
con questi due operandi ed è
controllo tipizzato staticamente invece di
sentire qualche strano tipo di coercizione che accade
quando chiami questa funzione con un
intero nella stringa qui sarebbe
un errore di compilazione del compilatore del compilatore
direi di no questo non funziona di cui hai bisogno
utilizzare due numeri quando si tenta di utilizzare
moltiplicazioni va bene se puoi
usa l’annotazione del tipo quindi questo è un modo di
specificando quali sono questi argomenti
sono un po ‘strani se non lo hai mai fatto
visto un linguaggio familiare di lingua ml così
il modo in cui funziona è l’ultima cosa in
queste annotazioni di tipo sono il ritorno
tipo della funzione quindi in questo caso
moltiplicare i numeri è una funzione che
prende due interi il primo argomento è
un intero il secondo argomento è un
intero la cosa che ritorna è un
intero e sotto di te diamo anche un
scrivi annotazione sul singolo valore
risultato giusto è anche un va bene che è
abbastanza facile ma è bello saperlo
tipo di annotazioni in elm non sono io
opzionale così non puoi mai nel tuo
programma scrivere qualsiasi tipo di notazione e
sarà esattamente così fortemente scritto come
se scrivi molte annotazioni di tipo
ai programmatori piace usare le annotazioni di tipo
perché è una specie di documentazione e
il compilatore può dirti quando fai
un errore proprio nel primo punto in cui
fai l’errore e non poi a
qualche punto dopo nel programma quando
è forse un po ‘ più oscuro di cosa si tratta
andare avanti qui è un po ‘più simile
che linguaggio sembra questo è un
semplice alias di tipo per definire un tipo
chiamato persona e poi definiamo a
la funzione calcola l’ età che richiede un
intero e quindi questo record personale o
struttura e restituisce un numero intero di
calcolando la differenza tra il
anno in corso e quando la persona era
nato ok parliamo un po ‘di dolore
Indica gli indirizzi di Elm perché penso
questo è un buon modo per farlo
pensa soprattutto alla lingua
perché compila in JavaScript e a
molti dei casi d’ uso che useresti
è per sostituire JavaScript
fondamentalmente una delle cose che io
sempre trovato è che ho detto che prima di a
il codice in lingue dinamiche è difficile
refactor correttamente giusto e perché
è difficile da refactoring che abbiamo
fare davvero attenzione che non facciamo
qualsiasi errore stupido come se aggiungessimo un
argomento a una funzione che tutti i
luoghi in cui chiamiamo quella funzione noi
assicurati di passare questa discussione e
roba del genere se abbiamo questi
problemi e dobbiamo fare in modo che
pensiamo che ci prendiamo cura di fare
questo correttamente lo facciamo meno perché
abbiamo paura di cambiarlo e noi no
voglio affrontarlo adesso e quale
porta ad abbassare la qualità del codice, quindi se questo
è un grande progetto che molte persone sono
lavorando su nel tempo questo può portare a a
molto simile è solo un sacco di refactoring
Non fatto un sacco di minore come il codice
la qualità diventa più bassa e quindi il
la velocità di sviluppo va giù perché tu
avere tutti questi cruft che si accumulano
e tu non hai mai avuto a che fare con te e quando tu
fare refactoring spesso introducono bug
e si blocca ora in L tutto è completamente
digitato così anche se si dà come ho detto di no
scrivi annotazioni nel tuo progetto
l’intero progetto sarà completamente
digitato e il compilatore controlla tutto
i tipi corrispondono anche tra i moduli e
le femmine e tutto ciò che c’è
anche nessun tipo quindi se lo sai
dattiloscritto o flusso hanno questo tipo
del portello di fuga di qualsiasi Ellen no
averlo e non ce l’ha
non ha anche perché non è un
linguaggio orientato agli oggetti quindi non c’è
scrivi gerarchia dove tutto piace
deriva da oggetto o qualcosa di simile
che c’è solo una fondamentale
differenza tra tipi e compilatore
farà in modo che non si attraversi
questi va bene così i record che abbiamo mostrato brevemente
quelli prima che troviamo uno di quelli chiamati
programmatore ha due due campi uno è
chiamato che è una stringa e preferito
linguaggio che è una stringa e poi noi
crea un nuovo valore con quel tipo o off
quel tipo ha chiamato la lingua preferita di Daniel
È bello e facile, ma poi ha Elm
una caratteristica molto bella che si chiama unione
tipi o alcuni tipi questo è qualcosa
che desidero fondamentalmente ogni moderno
il linguaggio aveva e io sono davvero triste
manca questo in lingue come Java e
c-sharp se lo guardi così
è spesso usato per casi come il tuo
avere qualcosa come uno stato giusto così
è come due possibili valori questo
lo stato può averlo può essere in attesa
la parola può essere completata e poi forse noi
avere un record chiamato task ha un nome
e quindi un valore di questo tipo fino ad ora
Bene bene finora questo è questo aspetto
come un enum forse di cui sai
Java o C sharp ok ok
quindi cosa c’è di così speciale in questo
cosa speciale di questo o forse prima
rapidamente come lo usiamo quindi se mai
voglio usare un valore di questo tipo tu
deve fare la corrispondenza del modello e l’elm fa
controlli di esaurimento quindi controllerà fatto
tu ad ogni uso di un pozzo una variabile di
questo tipo hai coperto tutti i casi quindi se
vuoi usare un valore di questo tipo di
questo tipo quindi non si può semplicemente afferrare
in modo simile a quello che hai da dire
c’è un valore di questo tipo che ti do
tutti i casi che questo può eventualmente
avere se ho appena scrivere lo stato in sospeso
qui allora il compilatore si lamenterà e
dirà hey che non hai coperto tutti i casi
quindi se gli do lo stato completato come
bene in questa funzione che trasforma questo
valore di stato in una stringa, quindi questo è
come lo faresti tu dici caso che è
fuori e poi dai tutto il possibile
casi che questo stato lì
potremmo avere la cosa dove arriva
interessante con i tipi di unione è cosa se
alcuni stati hanno dati allegati
giusto così forse per esempio avremmo
una relazione sullo stato di avanzamento giusto per cui presentiamo
un nuovo stato che sta scappando mi dispiace
dimenticato che lo stato di esecuzione qui così
tra l’attesa dovrebbe esserci a
stato di esecuzione e completato e
fallito e quindi abbiamo l’ oggetto attuale
e il numero di oggetti e poi forse
vorremmo aggiungere questi campi al
compito giusto quindi abbiamo fondamentalmente il nostro enum
come la cosa chiamata status e poi noi
avremmo archiviato queste informazioni
in qualche modo ora nel compito e abbiamo anche
questo non è riuscito giusto stato così quando siamo
nello stato fallito forse vogliamo
memorizzare un elenco di messaggi di errore che
si è verificato durante l’attività e di nuovo noi
avrebbe bisogno di memorizzarli nell’attività
di per sé il problema con questo è quello e
questo genere di cose nella modellazione dei dati I
penso che arrivino tutto il tempo giusto
dove abbiamo diversi Stati e alcuni
di loro hanno un ulteriore carico utile simile
dati di cui dobbiamo occuparci ma in
la maggior parte delle lingue è tutto ciò che puoi fare
hai una specie di enum che dice
Mi piace o mi piace questo tipo di stato che dice
ok, in quale stato sei attualmente
e poi hai un sacco di ulteriori
dati quindi si desidera tenere traccia di e
devi metterli in alcuni
altra struttura dati che hai mantenuto
intorno al problema sono gli errori come
variabile per esempio solo in realtà
ha senso quando siamo nel fallito
stato giusto intendo che non possiamo avere
il campo vuoto che circonda sdraiato lì
ma in realtà non ha molto senso
e c’è anche questa grande cosa
è stato menzionato nel discorso sulla fetta biscottata
questo è un design davvero importante
filosofia penso che se tu possa fare
Uniti non validi presentabili nel codice
questa è una cosa molto utile per farlo
cosa significa questo se puoi scrivere il tuo
tipi in modo che uno stato non valido non possa
anche essere espresso nel programma allora
non devi testarlo per questo
non può accadere e può scivolare
il tuo codice in pratica e non potrà mai
finire in un secchio in produzione quindi qui
vediamo il vero potere dei tipi dell’Unione
fondamentalmente ognuno di questi enum piace
cose giuste di questi diversi casi
che lo stato del tipo può avere
sei in attesa di poter avere
dati di carico utile allegati
e così correre ad esempio deve intz
che porta con sé e ha fallito ha a
lista di stringhe che porta con sé
e così se vogliamo creare ad esempio
un valore come qui nel mezzo della valvola
uno dove creiamo il valore di questo
esecuzione di questo tipo di stato ma in questo
caso vogliamo usare il valore corrente
costruttore allora dobbiamo sempre
specificare questi due numeri interi in questo caso
giusto perché dice la definizione del tipo
che ci sono quattro diversi tipi di
cose che un valore di questo tipo può
avere e se è in esecuzione, allora ha bisogno
devi darmi due interi e
questo significa che il nostro tipo di struttura delle attività o
un tipo di record dell’attività richiede solo attenzione
stesso con il nome dello status giusto
e lo stato dipende da quale di
questi valori avrà effettivamente
diversi dati di carico utile allegati così
ecco come modelliamo la corrispondenza quando
abbiamo dati di payload, quindi di nuovo questo è quello
ottenere la funzione I stringa richiede un
lo stato vorrebbe trasformarlo in a
stringa che possiamo mostrare all’utente
interfaccia il primo caso e il
il caso completato è lo stesso di prima
ma ora abbiamo questa corsa dove noi
dì okay, quindi vogliamo dare questi due
interi che passiamo in esecuzione
stato vogliamo nominare questi attuali e
totale e quindi giriamo l’intera stringa
in una cosa intera in una stringa
che in pratica dice che questo è il numero 1 di
10 o qualcosa del genere e nel
caso fallito vogliamo dare un errore
messaggio che unisce l’ intera lista
di messaggi di errore e lo inserisce nel file
stringa e questo è davvero potente
costruire insieme questi tipi
queste cose sono chiamate spesso algebriche
tipi di dati quando un sistema di tipi ne ha alcuni
tipi e penso che questo da solo sia un
caratteristica molto bella che ci permette di
modella un sacco di casi che sono davvero
utile questo abbinamento di pattern è l’unico
modo in cui siamo in grado di ottenere i dati di carico utile di
per esempio, questi tipi di valore lo sono
se volessimo accedere alla lista di
errori che dobbiamo fare per abbinare il modello
e dì nel caso di errore, allora ottengo un
elenco degli errori in tutti questi altri
casi non ho nemmeno quei dati
disponibile e non posso accidentalmente
accedervi o usarlo in modo sbagliato
brevemente per dirlo per qualche motivo il mio
l’evidenziazione della sintassi ha rotto su questo
scivolo e penso uno o due
puoi avere dei tipi polimorfi aka
generici quindi questo è come si definisce a
tipo di albero binario in pratica hai un
scrivi una variabile ora chiamata tipo di elemento
e anche questo è un tipo di unione
è una foglia quindi ha qualunque tipo
tu installi questo con o hai un
tipo di nodo e quindi hai due payload
i pezzi di dati di entrambi sono di nuovo
alberi binari e abbiamo bisogno delle parentesi
qui per indicare a Elm che questi sono
come fondamentalmente argomenti posizionali e
c’è come due di loro altrimenti
l’analizzerei diversamente va bene
in fondo è così e c’è un campione
di come creare solo una foglia o come
fare un piccolo albero binario da questo
altri punti di dolore non sono definiti correttamente
una funzione o un’eccezione di riferimento null
quando ero programmato in C sharp, penso
circa la metà degli errori principali come noi
non sono state eccezioni di riferimento e
spesso questo è solo un caso
la base del codice ti fa crescere un codice
questo aveva questa supposizione che questa parte
non può mai essere nullo e quindi il codice
cambiamenti e cresce e cresce e cresce
e qualche volta dopo questa ipotesi è no
più valido e si finisce con null
eccezioni di riferimento nel codice di produzione
Elm non ha quel Sole che non ha
il concetto di null o non definito e
questo uccide un’intera famiglia di bug ma
allora se non hai il diritto nullo come
puoi rappresentare bene i valori mancanti
usa tipi di unione per questo, quindi c’è questo
tipo di taglio chiamato forse così se lo sai
Scala questa è l’ opzione in Scala
in fondo non è niente ora noi
non ho alcun payload o solo e poi
ci piace un valore di qualunque cosa sia
definito per essere e quindi c’è qui noi
definire nuovamente due valori diversi
uno è usato un costruttore di niente e
bene due usi solo e poi abbiamo bisogno di
dargli il contenuto effettivo e
allora è un forse di int il primo
cosa in cui non usiamo nulla del tipo che
Ho portato qui è in realtà più
specifico di quanto sarebbe davvero così
perché olmo se lo lasci
solo dirà okay questo è un
forse di un perché
niente può essere tutto ciò che è
filosoficamente sei stato strano ma
qualunque cosa, ma fondamentalmente si potrebbe dedurre
che il tipo può essere anche più generico
e puoi sempre dargli un altro
tipo specifico se ti piace cosa succede se noi
bisogno di informazioni sull’errore, quindi abbiamo visto questo in
se tu andassi a quello nel nel nel
precedenti parlano il linguaggio della ruggine
preso lo stesso concetto di un risultato
digitare per rappresentare operazioni che possono
o riescono con alcuni tipi di dati a o
fallire con altri tipi di segnale acustico
molto spesso il tipo di errore è forse giusto
una stringa o un elenco di stringhe come qui
che usano una singola stringa e nel
okay case negli esempi qui sotto
usa un numero intero ma ovviamente questi possono
essere arbitrariamente complessi tipi di dati corretti
questa è una cosa molto bella perché di nuovo
ogni volta che usi un valore di questo tipo
devi dire cosa voglio fare se
Questo è il caso va bene e cosa devo
fare se questo è il caso dell’errore un altro
la cosa interessante di Olmo è tutto
i valori sono immutabili in modo opposto a
ruggine dove questo è come una specie di
opt-in per rendere variabili le variabili
nell’album tutto è mutevole così tu
non posso assegnare alla stessa variabile un nuovo
valore in modo che siano più simili ai valori denominati
piuttosto che quello che penseresti di
variabili nei linguaggi di programmazione e
non ti piace punto in lunghezza in
valori come per esempio qui definiamo a
valore di questo tipo di programmatore non c’è
modo in cui puoi semplicemente modificare una proprietà o a
campo di questo disco ora forse pensi
di come diavolo hai mai fatto
programma se non ci sono valori mutabili
giusto che è una domanda giusta la cosa
è quello che fai è che hai creato
nuovi valori proprio così per esempio qui
quando vogliamo creare un nuovo programma o
B che ha tutti i valori di tutti i campi
impostato sullo stesso valore del programmatore a
solo il nome deve essere diverso da questo
come lo fai c’è questo speciale
sintassi quando si utilizza il record ricci
di nuovo le parentesi e poi usi una verticale
barra prima di specificare qual è il valore
che vuoi basarlo e poi tu
dai i campi che vuoi cambiare
e dare i nuovi valori per quello che farò
venire
come scrivere effettivamente programmi utili
con un linguaggio immutabile in un secondo
giusto, quindi tieni questo pensiero se lo hai
Voglio solo finire un altro
cose sulla lingua prima di
gli effetti collaterali di questo a proposito
non possiamo fare Loops sai bene così
cicli richiedono una variabile contatore
proprio in altre lingue non possiamo fare
che tu sai perché non abbiamo mutabile
valuta la soluzione per questo particolare
la cosa è usare una mappa o una piega che
la maggior parte di voi probabilmente ne sa di più sotto il
il nome riduce o usa la ricorsione invece ma
si, questo è un po ‘strano nel
all’inizio ma puoi usarlo ok, lo siamo
quasi attraverso un linguaggio simile
caratteristiche in modo che possiamo guardare un po ‘di codice in
pratica e come tutto questo si gioca ma
una cosa che devi sapere è ancora
quell’olmo è completamente puro, quindi questo significa
che tutte le funzioni sono pure e nessuna
delle funzioni può avere effetti collaterali
ci sono due piccoli avvertimenti che è il debug
registra quale scrive sulla console e
debug crash che blocca solo il tuo
applicazione per scopi di debug ma
a parte questo è come ogni funzione
è idempotente quindi questo significa che se tu
chiama di nuovo la stessa funzione con il
stessi argomenti arriverà la stessa cosa
fuori di esso giusto così come si ottiene il lavoro
fatto in un linguaggio che è immutabile e
tutte le funzioni sono pure suona strano
Allan viene fornito con un piccolo runtime e
non c’è anche JavaScript diretto
interfaccia di funzione straniera, quindi non è possibile
basta chiamare in JavaScript ma il
cosa questo come funziona è il braccio
architettura a cui daremo uno sguardo
in un secondo ma solo per spiegare un po ‘
più in dettaglio, forse, come era questa cosa
il puro cosa significa questo ogni
la funzione è pura in elm perché c’è
nessun modo per eseguire semplicemente arbitrario
JavaScript o eseguire effetti collaterali
in realtà questa funzione che ho qui
ai numeri D sarà sempre valutare in
lo stesso valore in JavaScript come
vedi sotto potresti fare cose strane
potresti avere una variabile globale
che usa questo in questo caso per
esempio è un contatore che aumentiamo
e quindi chiamando di nuovo la stessa funzione
con
argomenti diversi in realtà porta a
risultati diversi a destra o se si dispone di un
libreria e tu chiami questa funzione
potrebbe effettivamente fare semplicemente una chiamata HTTP
e come trasmettere i tuoi dati da qualche parte
altrimenti o qualsiasi altra cosa in Al hai questo
garantire che questo non possa accadere
senza effetti collaterali e puoi esibirti
il linguaggio stesso più le marche
testare funzioni superbe che sono
idempotente che restituisce sempre lo stesso
valori quando gli dai lo stesso
argomenti sono super piacevoli da testare e
non hai bisogno di questo tipo di bussare
che a volte hai bisogno di altro
lingue e grazie alla digitazione statica
la maggior parte dei test di unità può effettivamente
concentrarsi sulla logica come in JavaScript
si prova molto bene, ma cosa succede se
Passo qui null e cosa succede se passo
qualche altro e intero invece di a
stringa e questo tipo di cose questi
sono una specie di proprietà noiose che il
anche il sistema di tipo si prende cura di esso
il refactoring del refactoring è molto di più
sicuro e divertente perché il compilatore può
controlla tutte queste cose per te e poi
posso dirti se qualcosa va storto così
ora come scrivere programmi reali in questo
c’è qualcosa chiamato Elm
architettura e questo è fondamentalmente il
il senso di come funziona tu dai la AL
programma iniziale di avvio che sei tu
utilizzato per creare un’applicazione olmo tre
funzioni ti danno la funzione di init
la funzione di intervista della funzione di aggiornamento
la funzione init fondamentalmente crea il
modello iniziale questo è fondamentalmente un singolo
grande record di solito che contiene il
dall’intero stato della tua applicazione
questo è quindi passato nella vista
come vedi qui la firma del modello di
quella funzione è il modello va a HTML di
messaggio e quindi cosa fa questo è tutto
usa questo tipo di modello che hai creato
prima di questo valore e trasforma qualunque cosa
questa rappresentazione di stato sei tu
avere della vostra applicazione in qualcosa
che possono essere visualizzati per l’utente che
è molto simile a reagire se tu
lo so, quindi ha un tipo Dom virtuale
di biblioteca e si costruisce fondamentalmente a
Dom virtuale su runtime fa il
immergendo a voi e poi cambia il Dom
rappresentazione mostrata nel
browser per l’ utente Ciao l’utente fa
qualcosa e ogni volta che l’utente fa clic
qualcosa, ad esempio , viene inviato un messaggio
torna alla funzione di aggiornamento l’aggiornamento
la funzione ottiene questo
nuovo messaggio che è appena successo
il modello com’è attualmente e it
emette il nuovo modello come dovrebbe essere
e un paio di comandi se vuoi
così i comandi sono queste cose che vanno
il giovane runtime e ci sono il
cose a cui in realtà è permesso
eseguire effetti collaterali quindi è un comando
fondamentalmente solo un modo di descrivere
per favore fai questa richiesta HTTP per me e
poi quando hai finito come tornare a
la mia funzione di aggiornamento mi ha inviato per richiedere
il risultato di quella richiesta come messaggio
questo è fondamentalmente tutto quello che c’è da fare
giusto quindi questa è l’ architettura di messaggistica unificata e
è questo ciclo unidirezionale del fare
interfacce utente che sono state molto
popolare anche nel mondo della reazione con
la libreria Redux ha preso la libreria Redux
le sue idee nella sua ispirazione esattamente
dall’attacco senza contrassegno , sicuro della cosa
questo sembra forse un po ‘strano se tu
usa altri due paradigmi UI ma il
la cosa veramente bella di questo è quello
è super facile da testare e tu ce l’hai
tutto disposto perché l’ unico posto
dove può partecipare una parte della tua domanda
mai modificato è nell’aggiornamento
funzione quindi penso che questo sia un
modello davvero potente il modello che tu
creare in questo intento iniziale e aggiornamento
è costantemente nella tua funzione di aggiornamento
un’unica fonte di verità quindi in molti
Applicazioni JavaScript quando si è vecchi
modo giusto anche se jQuery dove eravate
ripristinarlo ripristinerà i dati nel Dom
stesso hai avuto questo tipo di gara
condizioni misericordia per diversi componenti
magari provare ad aggiornare lo stesso valore in
il Dom in momenti diversi questo non può
capita con l’ architettura ARM perché
c’è solo un posto dove arriva
aggiornato che è la funzione di aggiornamento e
questo valore che esce dall’aggiornamento
funzione il nuovo modello è il singolo
fonte di verità per l’intero utente
gli elementi visivi dell’interfaccia sono quindi
creato da questo modello attuale proprio come
abbiamo visto con questo tutto con questo nuovo
funzionano le app sono sempre
ben strutturato perché tutti seguono
lo stesso paradigma e puoi facilmente
ripeti le sessioni dell’interfaccia utente perché hai appena fatto
per registrare praticamente tutti i messaggi che
sono stati inviati alla funzione di aggiornamento e
allora puoi andare avanti e indietro e tu
può serializzarli e fare un annulla rifare
e cose del genere ok prima di guardare
in realtà qualche demo dal vivo di come tutto questo
lavori
un veloce
spiegazione di come funzionano le nuove funzioni
perché altrimenti passerai tutto il
tempo alla prossima demo guardando a cosa
diamine questa strana cosa nuova funzione
è fondamentalmente quello che hai qui è come
questo è molto simile a molti reattori
con qualsiasi cosa faccia con questi diff
funzioni che creano download virtuali
e roba del genere in olmo non lo è
questa non è una sintassi speciale, quindi questo
non è come JSX o così c’era
patchato a javascript questo è solo
normale codice olmo e tutti questi
funzioni hai visto qui come div e
pulsante e così via ci sono funzioni
che creano una singola rappresentazione Dom
nodo e prendono sempre due liste a
vivi la prima lista è la lista di
attributi così come vedi nel primo
esempio con il div esterno si ottiene a
prendere la prima lista ha esattamente uno
elemento che è qualunque cosa succeda quando
chiami la classe della funzione con il
argomento sulla stringa di contatore e
allora hai tre elementi figlio
questo è il secondo argomento del div
la funzione è un’altra lista dei bambini
i bambini elementi figli e in
questo caso abbiamo un pulsante che se acceso
il pulsante e corrisponde a questo
HTML che vedi sotto di nuovo di nuovo in
all’inizio questo sembra un po ‘strano
ci vuole un po ‘di tempo forse per il tuo
occhi per acclimatarsi a questo particolare
sintassi ma una volta che ci si mette dentro solo
come con la sintassi ML diventa
davvero molto ovvio in un molto
modo semplice di codificare questo e
in realtà puoi leggerlo molto velocemente
va bene il tempo della demo quindi passiamo qui
Ho una app in diretta che è stata
creato con creare un’app che è
forse molto simile a creare l’app di reazione
se lo sai e qui ho il
atom editor con il plug-in elm
installato una delle cose belle che
vedi subito spero che tu possa forse
Non so se puoi leggere questo ma
hai questo tipo di annotazioni
qui al passaggio del mouse proprio lì un po ‘troppo piccolo
forse dovrei farlo
si può leggere questo nella parte posteriore è che
okay dovrei renderlo più grande va bene
okay, passiamo a questo fondamentalmente
quello che abbiamo qui è qui definiamo il nostro
modello giusto questo è un disco che ha
una variabile chiamata contatore ed è di
digita int right è una semplice app demo
allora abbiamo la funzione init e questo
crea una tupla quindi non ho coperto il
la sintassi della tupla ma fondamentalmente è giusta
come all’interno di parentesi separate da
virgola puoi avere valori di tupla 2 2 questo
è una tupla di 2 il primo valore è di tipo
contatore modello e il secondo tipo è di
digitare il comando del modello di contatore , quindi questo è
in pratica se vuoi dire al
runtime per fare qualcosa per te come un
Richiesta HTTP questo è fondamentalmente come cosa
useresti per quello in questo caso il
account e la cosa che vogliamo fare
inizialmente per il modello siamo noi
vuoi creare un nuovo record con un campo
contatore impostato su 0 e per il comando noi
voglio solo non fare nulla per ora poi noi
avere un contronotifica questo è il messaggio
tipo e il tipo di messaggio è davvero
piacevole uso di tipi dell’Unione in quanto
elenca tutte le cose possibili che
può succedere nella tua intera applicazione così
se io se un collega mi consegna un’elica
progetto per me ho solo bisogno di guardare il
tipo di messaggio e so subito tutto
le cose che possono accadere in questo
applicazione e poi guardo il
aggiorni la versione quindi vedo tutto lo stato
trasformazioni che hanno effettivamente
è successo in questo in questa applicazione così
qui quello che facciamo è ottenere il messaggio
che è stato inviato al
applicazione alla funzione di aggiornamento noi
prendi il modello attuale e poi noi
corrispondenza del modello sul messaggio che noi
ricevuto e se il messaggio è incrementato
allora quello che facciamo è creare una nuova tupla
e per il valore modello della tupla noi
usiamo questa sintassi di aggiornamento del record
che ho mostrato prima, quindi aggiorniamo il
corrente usiamo il modello attuale come esso
la base e poi ci opponiamo a
fila di conteggi modello più 1 proprio così noi
incrementare il campo contatore in
record per comando, non usiamo ancora nessuno di noi
non voglio fare richieste HTTP o
qualcosa del genere e poi per
il decremento è fondamentalmente la stessa cosa
ma con meno 1 qui e poi qui noi
avere questa funzione vista che abbiamo appena visto
prima di ciò
prende solo questo modello e lo rende
quindi qui hai il testo dove
esegue il rendering della stringa come nodo figlio di
questo secondo div di questo div nested e
ciò che è forse interessante è questa cosa
qui il decremento di onclick è così evidente
una funzione che renderizza un attributo
e ma quello che si passa in questo su
cricca non è una funzione che è forse
cosa ti aspetteresti da un funzionale
linguaggio di programmazione ma è il reale
valore del messaggio che vogliamo ricevere
quando succede così quando l’utente
clic su questo pulsante ciò che vorremmo
ricevere nella nostra funzione di aggiornamento è il
messaggio che è stato dichiarato decrementa qui
giusto e qui se l’utente fa clic sul
pulsante più vogliamo ricevere il
messaggio di incremento e quindi qui nel
in basso lo colleghiamo tutti insieme
usa questo programma HTML che è definito
in una delle librerie standard di Elm è
ottiene prende un record e vuole un
visualizza funzione una funzione di inizializzazione e un
funzione di aggiornamento che è ciò che diamo
e vuole anche che questa cosa venga chiamata
abbonamenti che non voglio andare
in ora ma che è fondamentalmente per
ricevere eventi regolari da JavaScript
ok vediamo come si comporta in pratica
tutto ecco e vede abbiamo una cultura ormai
se clicco qui un paio di volte uno
delle cose che voglio mostrarti
ecco che questo è in esecuzione in debug
modalità così quaggiù hai questo esplorare
storia cosa spero che tu possa vederlo tutti
Posso spostarli, sappiamo un po ‘ più in su
su forse e ciò che è è fondamentalmente
solo il registro di ciò che è successo nel
applicazione tutti i messaggi che abbiamo ottenuto
che qui è un po ‘ noioso perché
ci sono solo due possibili messaggi e
non hanno alcun carico utile, ma è possibile
basta cliccare su questi e puoi vederlo
il contatore reagisce a questo forse
facciamo il contatore un po ‘più grande così
si può vedere che se torno questo è
la prima volta ho ricevuto un messaggio
abbiamo un altro incremento e
decrementa il decremento del decremento
e questo è veramente bello per il debug
e puoi anche importarli o esportarli
così tu se hai i tester e loro lo fanno
Domande e risposte e loro dicono oh, questi sono i tuoi numeri
può diventare negativo se non fosse previsto
per succedere sei come oh non lo so
come potrebbe accadere per favore mandami il
log e possono solo vedere rendono conto che
ti mando a cacciarti, lo sai
ingerito nella tua applicazione ed è
super ovvio cosa è successo e puoi
giocare con questo e sistemarlo bene
ma qual è il comportamento effettivo di o
l’esperienza di svilupparlo ora
partiamo e diciamo business deriva
indietro e dicono che va bene questo è come –
e i pulsanti più sono davvero fantastici ma
per i nostri clienti vogliamo un doppio +
tasto giusto ok quindi diciamo che facciamo un
doppio + pulsante quindi facciamo il doppio
incremento corretto ok ora fammi risparmiare
questo e fammi dire così perchè
quello che vedrai è proprio come se
funziona sì proprio come te
avviso da parte di una ONG o qualcosa del genere
c’è un formato auto che si forma appena
il suo codice sempre allo stesso modo proprio così
forse notate da JavaScript ora
sta diventando popolare con più carina o andare
format in go fa questo che è davvero
bella cosa perché posso solo leggere ogni
Codice Elm perché ognuno usa proprio
formato ed è quindi sempre formattato
allo stesso modo, okay, quello che è successo qui
ricevi un messaggio di errore e di nuovo il
la sovrapposizione è un po ‘piccola, non credo
può facilmente renderlo più grande ma
fondamentalmente il compilatore qui mi dice
aspetta un secondo che l’Unione ti digiti
definito qui ha tre casi ma
non stai gestendo un doppio incremento
allora è super bello perché sì
Ho dimenticato di fare così, andiamo qui
e aggiungere un caso per questo doppio incremento
e in questo caso cosa vogliamo fare
beh fondamentalmente come con
incremento ma in questo caso si si, vai
via ma in questo caso voglio aggiungere due
Va bene, va bene, adesso è andato tutto bene
è fantastico ma non lo vediamo
ovunque ancora non lo rendiamo
okay, quindi duplichiamo questo pulsante qui
che abbiamo lì e facciamo un plus positivo
e salvarlo di nuovo e qui abbiamo meno
plus e plus plus so ora se clicchiamo
plus plus whoa cosa succede qui sì
inviato il messaggio sbagliato , quindi è necessario
invia doppio incremento ovviamente risparmi e
ora se facciamo clic su più e poi diventa
incrementato di 2 se aumentiamo
incrementato di 1 ok fantastico
ora gli affari tornano e dicono
si questa è fantastica questa tua caratteristica
implementato super ma ora vogliamo triplo
incrementare a destra e tu sei come andare
lo sai davvero ma pensi che questo sia ok
sta diventando un po ‘stupido facendo proprio un
singolo messaggio ogni volta per questi
le cose lasciamo solo un carico utile al
valore di sezione incrementato, quindi andiamo
diciamo che l’incremento porta sempre con sé un
intero che è da quanto vogliamo
incrementalo okay clicchiamo su Salva e
kaboom giusto qualcosa non va, quindi cosa?
è sbagliato clicchiamo qui e Elm ci dice
non riesco a trovare il modello doppio
incremento Sì, voglio dire, abbiamo rimosso
quindi rimuoviamo tutto ciò che è sicuro
succede ora ancora rosso okay dice
l’incremento principale del pattern è troppo scarso
argomenti ora anche questo è corretto
Ora ho detto che l’incremento deve sempre
avere un carico utile di un intero okay
quindi diamo una X e poi ovviamente
noi non vogliamo incrementare sempre di un
ora vogliamo aumentare di questo valore X
Va bene di nuovo sicuro e ancora qualcosa è
sbagliato ok doppio incremento no
esiste sì corretto
ok, rimuoviamo questo pulsante e
duplicare l’incremento e ora abbiamo bisogno
per passare in due proprio ora ho detto ancora
questo prima
a volte in Elm devi usare
parentesi come questa anche in questo caso
abbiamo bisogno che sia un argomento posizionale
è necessario dirlo con un clic una volta esattamente
un argomento quindi è necessario utilizzare l’incremento
qui con parentesi intorno a loro e
quindi facciamo clic su Salva e ancora c’è un
problema giusto incremento qui in
posto prima non ha il numero
collegato ad esso da quanto dovremmo
incrementalo quindi facciamo questo e salviamo
e ora siamo di nuovo buoni abbiamo meno
più e più due a destra ed è un molto
semplice esempio ovviamente ma questo
esperienza di sviluppo, naturalmente,
funziona su tutti i moduli in cui funziona
come gli altri pacchetti, è davvero così
bello e ti aiuta a sviluppare con
fiducia che il codice tende a fare
lavoro quando compila funziona e
a volte ci vuole un po ‘per farlo
compilare di nuovo perché come quando tu
refactoring come tutti i tipi di roba tutti
all’improvviso sembra diverso ma il
il compilatore ti rallenta solo fino a tutto
risolve di nuovo e questo è davvero
cosa davvero carina che lascia
dormi molto più calmo c’è anche a
caratteristica davvero bella in quell’olmo
controlla i tipi di pacchetti che sono
generato e quindi può far rispettare
correggere la versione semantica in modo sostanziale
quando fai un aggiornamento ad un pacchetto e
si cambia qualcosa perché si rinomina
una variabile o una funzione di rinomina quindi il
Il compilatore Elm dirà hey i tipi sono
diverso questo è un cambio di rottura voi
hanno a che fare la versione più aggiornata del
piccolo avvertimento è, naturalmente, che se tu
fai come se avessi un booleano e
poi lo tratti diversamente o roba
così così questo tipo di cose è così
non posso controllare per te ma un sacco di
come le solite rotture della versione semantica
ciò accade in pacchetti JavaScript simili
può prendere questi perché il compilatore
lo so solo così tanto tempo per andare
per arrivare lentamente alla fine cosa fanno
avere il mio canto qui a posto in fretta ho appena
passato come menzionato questi comandi in
passando solo per mostrarti rapidamente come
funziona perché forse tu sei ancora
chiedendo come fare gli effetti collaterali così per
cose come richieste HTTP o generare
numeri casuali e cose come queste noi
è necessario utilizzare i comandi e il modo base
che questo funziona è come vedi qui così
invia comando
fondamentalmente costruisce uno di questi
valori di comando che usa la libreria HTTP
dire ok quando questo comando dovrebbe essere
fatto come il tempo di esecuzione chiaro per favore andare e
fare una stringa HTTP GET a questo particolare
URL ed e questo è il secondo
parametro per inviare http nella riga nove quando
questo torna come se avesse successo
o in mancanza si prega di inviare il caricato
messaggio di nuovo alla mia funzione di aggiornamento a destra
e poi nella funzione di aggiornamento che hai
un caso e poi si gestisce caricato sia
va bene se è andato bene con il testo
che vuoi che abbia o che tu gestisca
caricato con l’errore e poi qualunque cosa
Timeout dell’errore HTTP o qualunque cosa sia
catturato in quell’errore HTTP okay ports
ok vedo che sto andando un po ‘in ritardo
quindi ho intenzione di andare rapidamente oltre
queste porte sono fondamentalmente simili a
comandi ma invece di parlare con
su runtime e facendo cose del genere
sono più o meno pre-infornati nelle porte
sono abituati ad avere così il tuo luminoso
il tuo javascript accanto al tuo elm
codice e quindi è possibile comunicare con
messaggi avanti e indietro questo è utile
se ad esempio si desidera riprodurre l’audio
che la biblioteca luce olmo non lo fa
supporto ma poi scrivi un po ‘di
JavaScript che utilizza D Web Audio SDK e
quindi si invia un messaggio attraverso le porte a
Gli script Chaves iniziano JavaScript
giocando e poi se ti piace puoi
inviare nuovamente i messaggi nel complesso
esperienza di costruzione dell’olmo di produzione
le app con Alain sono state super belle davvero
mai avuto eccezioni di runtime che io
pensare è davvero uno sviluppo fantastico
sperimentare il compilatore aiuta tutti voi
il tempo e tu hai questo meraviglioso
fiducia nel tuo codice che non sei come
Ho bisogno di premere questo pulsante oh mio dio
forse si romperà per iscritto
produzione in questo genere di cose
proprio così leggendo grandi ostacoli alcuni di
le cose che non sono così ideali
a volte è necessario utilizzare le porte per
cose che sembrano un po ‘banali per
esempio per spostare l’attenzione tra diversi
elementi di input che sono un po ‘ fastidiosi
perché in JavaScript è come non è nemmeno un
in una sola riga fondamentalmente e in olmo hai
per poi configurare porte e cose del genere
al momento non puoi pubblicare nativi
moduli in modo sostanzialmente tutti i moduli che
anche JavaScript lo accompagna ma
puoi farlo solo con la condivisione di github
codice e c’è una cosa quando usi
porti e ti piace affare come inviare
messaggi avanti e indietro non solo
devono definire i tipi di queste cose
che ottiene il settore spedito avanti e indietro ma
devi scrivere quello che si chiama Chase
e decodificatori queste cose sono un po ‘
tedioso da scrivere, in teoria, per la maggior parte delle
i casi per i quali il compilatore poteva farlo
ma per ora non va bene, penso di sì
era assolutamente pronto per essere utilizzato in
la produzione riduce drasticamente la parte
conta la velocità di sviluppo come ho detto
prima che non rallenti come il
il progetto diventa più grande e realistico
probabilmente dovrai mantenerne alcuni
JavaScript sul lato, ma penso che
guadagni ancora molto se riesci a spostare il
maggior parte della tua logica in L se tu
vuoi saperne di più ci prova
l9 org che è un editor online che
puoi usare per giocare con Allen
Lang dot orc puoi ottenere il compilatore
e tutti i link ai plugin dell’editor
e cose del genere all’inizio
magari provalo per uno strumento del sito o interno
strumento e andare sul braccio lento e chiedere
domande molto amichevole per i principianti
sì con quello grazie per essere venuti
e sono Daniel Butler Sono Danny x-23 e
Twitter e per favore fai domande e
vota il discorso grazie, sì, abbiamo
alcune domande una di queste sono lì
qualsiasi M non-banale open source
applicazioni che potrebbero essere utilizzate per imparare
un pneumatico silenzioso e roba
sì, quindi se andate a Allen Langer org
c’è un paio di progetti collegati
e loro ce ne sono almeno alcuni
quelli che ne hanno un paio di migliaia
linee di codice o così non so se c’è
qualsiasi come decine di migliaia o giù di lì
progetti open-source ancora ma c’è
sicuramente alcune e due domande su
valori predefiniti su modelli o parametri
o sugli attributi sì è possibile sì
questo è qualcosa che non ho avuto il
il tempo di andare in esso c’è qualcosa
chiamato applicazione funzione parziale che
puoi fare in L dove puoi fondamentalmente
avere una funzione con diciamo sette
parametri e se la maggior parte del tempo tu
ne servono solo due , quindi puoi farlo
una nuova funzione basata su questa funzione
con sette parametri che ha cinque di
questi parametri sono applicati in modo predefinito
così è così che lo faresti
altre due domande davvero su come
struttura o dividi un’applicazione?
che è un po ‘più complesso, quindi questo è
un punto interessante sono molte persone
proveniente da reagire o altra interfaccia utente simile
quadri che pensano nei componenti
giusto quindi c’è una componente visiva e
pensano che dovrebbe andare bene
il suo aggiornamento e il suo punto di vista e il suo
la propria unità fondamentalmente che si può fare in L
così puoi fare questo tipo di strutturazione
ma di solito è più idiomatico se tu
prova solo a creare diverse funzioni
e quindi forse hai questa cosa
che rende come un abstract
di una persona come il cognome
con qualsiasi repository github o
qualunque cosa e poi forse hai solo un
funzione che rende questo dato a
un certo tipo di dati ma non li ma
non avresti necessariamente il suo
propria funzione di aggiornamento e questi tipi di
di nuovo questo è un po ‘più grande
argomento così perché è un po ‘una mente
spostamento ma si può assolutamente strutturare
le tue applicazioni in modo simile ma
di solito è più bello se ci pensi
funziona prima come usare l’altro
quadri come Ember x GS e qualcosa
come quello in L non puoi farlo così il
Elm è davvero legato al suo
implementazione del Dom virtuale così
funziona fondamentalmente simile a ciò che reagisce
fa e questo è l’unico modo che puoi
scrivi il codice e in pratica adesso
vivi nella tua piccola bolla personale
quindi non c’è alcun chiamando direttamente fuori per
JavaScript in qualsiasi forma che sia cosa
ti permette di darti tutto questo
garanzie d’altro canto un altro
domanda Ho appena letto che è stato un
mentre dopo l’ultima major release di
elm quando sarà la prossima uscita e
supporterà il rendering lato server attivo
nodejs Sì, non lo so, intendo che lo è
decisamente sviluppato attivamente evan non lo è
il creatore della lingua era come il
lo sviluppatore principale su di esso non è molto appassionato
pubblicizzando le scadenze che conosciamo
ci sta lavorando ed è stato per a
l’anno sarà probabilmente presto ish
se sarà quest’anno o bene
come umano nessuno conosce il lato server
il rendering è stato impostato per essere nel suo simile
concentrati se sarà una buona lingua
di sviluppare per il nodo io non sono così sicuro per
ora, perché è proprio come molto
fatto per la creazione di applicazioni browser in
momento sì, ma ce ne sono alcuni
supporto suggerito per come almeno simile
rendere l’iniziale come fondamentalmente
HTML che potresti servire a un non
Client abilitato JavaScript e quindi anche
uno sì uno questa traccia, almeno uno qualsiasi
questione vitale può essere una domanda di confronto
lo confronti un po ‘ad Alex qui sì
questo è molto diverso da loro
spesso usato fianco a fianco perché Alex
qui ovviamente c’è un linguaggio lato server
giusto e ha una grande concorrenza
modello mentre Alan non ne ha
fondamentalmente voglio dire che ha effetto
come il modello di concorrenza attraverso questo
ciclo di aggiornamento ma l’ allume è molto simile
incentrato sulla scrittura di interfacce utente come
fondamentalmente in
il browser giusto mentre l’elisir è
qualcosa che gira sul server e
è molto bravo a gestire come un
molti processi con cui comunicare
punti finali diversi e cose del genere
ma come ho detto sono spesso usati
insieme così in compagnia nessun inchiostro rosso
dove Evan lavora chi sviluppa il
linguaggio che usano entrambi
lingue insieme
bene gli altri hanno probabilmente
ha risposto già alla fine del tuo discorso
tutte le altre domande nella stanza qui
okay basta sostituire qualsiasi java
domanda per esempio o sì così
praticamente tutto ciò che funziona nel
JavaScript che viene eseguito nel browser e
non ha come dipendenze esterne
che devi portare dentro è un bene
candidato a sostituire in modo sostanziale il
maggior parte delle applicazioni web se tu
inizia a costruirli ora o se tu
riscrivi qualcosa che hai penso
sarebbe un buon candidato il caveat è
se hai molto di sperimentale
API Web che utilizzi come WebGL e Web
Audio e così via a un certo punto forse
hai speso la maggior parte del tuo tempo come
inviare messaggi attraverso le porte a
il tuo JavaScript che devi anche
mantenere e quindi devi farlo
il trade-off ha senso, ma per a
molto simile al normale tipo di attività
basta visualizzare un paio di forum come
fare convalide questo tipo di cose io
pensa che Elm sia un linguaggio fantastico, okay
ultima domanda Grazie in realtà è la mia
seconda domanda va bene chiedere tutta la notte
molto bello parlare di una cosa che voglio chiedere
e trovo difficile così come dire in come
lavori con il team front-end come
devono imparare questi strani
viste definitive che c’è
qualcosa ti attenua in qualche modo così noi
abbiamo questo abbiamo avuto questa esperienza quando noi
ha fatto la nostra produzione se ne abbiamo uno
sviluppatore per lo più responsabile
styling e design lei ne ha alcuni
Esperienza Python quindi forse no
il tuo tipico come intero solo persona CSS
ma lei era davvero lei era dentro e
le è piaciuto e mi piace come ho detto
ci vogliono alcuni giorni per il tuo
per adattarsi a questo tipo di
scrivere di nuovo come HTML, ma
è del tutto possibile e penso che
se li inviti e come prova a
spiega queste cose come possiamo scrivere
torna software libero con se lo facciamo
modo in cui potrebbero essere ben aperti
adattandosi a diversi tipi di farlo
scrivere di nuovo software libero, quindi molto buono
ok grazie mille grazie
[Applausi]

Please follow and like us: