Escolar Documentos
Profissional Documentos
Cultura Documentos
Goste ou não, o JavaScript não vai desaparecer. Não importa qual framework ou lin-
guagem ou biblioteca “compila para JS” você use, bugs e problemas de desempenho
sempre serão um problema se a qualidade subjacente do seu JavaScript for ruim. As
reescritas, incluindo a portabilidade para a estrutura do mês, são terrivelmente caras
e imprevisíveis. Os bugs não desaparecerão magicamente e podem se reproduzir ale-
gremente em um novo contexto. Para complicar ainda mais as coisas, os recursos se-
rão descartados, pelo menos temporariamente.
Este livro fornece orientações claras sobre a melhor forma de evitar essas abordagens
patológicas para escrever JavaScript. Código ruim não precisa ficar assim. E torná-lo
melhor não precisa ser intimidante ou excessivamente caro.
Se você é um iniciante absoluto, talvez queira escrever algum código ruim por alguns
meses primeiro. Se você não estiver interessado em escrever um código melhor, tal-
vez não tenha paciência para este livro. Se nenhuma dessas situações descreve você,
estamos prontos.
Se você tiver problemas para testar, depurar ou confiar em sua base de código, este
livro deve ser útil.
Infelizmente não. No entanto , como este livro está sob uma licença Creative Commons, você
pode compartilhar links para a versão HTML e quaisquer outros arquivos disponíveis em
http://refactoringjs.com , por exemplo.
O Capítulo 8 expande nossa visão de arquitetura para aquelas que incluem (ou evi-
tam) hierarquias.
De certa forma, esses três últimos capítulos em particular rompem com nosso objetivo
inicial de refatoração, alterando os detalhes da implementação sem alterar a interface .
Por outro lado, essas interfaces são úteis e às vezes inevitáveis. Podemos facilmente
nos encontrar querendo escrever código que seja necessariamente assíncrono por
motivos de desempenho. Ou podemos nos encontrar “presos” em uma base de código
que investiu muito em coisas boas ou ruinstentativas de OOP ou programação funcio-
nal (FP). Portanto, seja por escolha ou código que herdamos, essas são partes do Ja-
vaScript que devemos prestar atenção e poder melhorar. Se você adotar um para-
digma completamente diferente de uma base de código, é improvável que você esteja
“refatorando” no sentido que queremos dizer na maior parte do livro.
Se quisermos ser rígidos sobre isso, esses capítulos ainda refatoram dentro de seus pa-
radigmas (OOP para melhor OOP, assíncrono para melhor assíncrono e FP para me-
lhor FP), e se quisermos pensar nos termos mais amplos sobre a execução do nosso
programa (por exemplo, “executando ” como entrada e “estar satisfeito com a forma
como funcionou” como saída ), então podemos estar refatorando mesmo pulando de
paradigma em paradigma. Eu encorajo você a trabalhar primeiro com mudanças me-
nores e incrementais que sejam fáceis de testar e nas quais você tenha
confiança. node myprogram.js
por exemplo, apenas parte de um corpo de função é efetivada quando uma cha-
mada de função específica contida nele é expandida em linha. Em ambos os casos,
a ideia-chave é que os resultados (incluindo os efeitos colaterais) das operações
invocadas e as referências feitas de fora do círculo não mudam, quando vistas de
fora do círculo. 1
Embora sejamos livres para desenhar “o círculo” tão grande quanto quisermos, é
muito comum que o termo refatoração seja usado como se significasse simplesmente
“alterar código”. Como discutimos no Capítulo 1 , não. Isso é mais fácil de ver em pe-
quena escala, como aquelas em que passamos mais páginas. Pense nos Capítulos 8 , 9
e 10 apresentando primeiro como opções de arquitetura e as segundas possibilidades
para criar um código melhor (com segurança e incrementalmente) dentro dessas op-
ções. Por exemplo, se alguém disser algo sobre “ refactoring para usar código assín-
crono”, provavelmente é um problema muito amplo para ser executado de maneira
segura e incremental. Mas se você quiser pensar no Capítulo 9como lhe dando o po-
der de fazê-lo, não posso impedi-lo. É o seu livro agora. Você pode desenhar o círculo
do tamanho que quiser.
Reestruturação
Teste
JavaScript
Refatorando e testando JavaScript
Alguns paradigmas JavaScript
Refatorando e testando dentro desses paradigmas JavaScript
Cordialidade
Protesto
Sacrifícios rituais de livros de tecnologia
Se você tiver algum problema, dúvida, reclamação ou elogio, sinta-se à vontade para
entrar em contato comigo através do meu site .
Algumas palavras neste livro são imprecisas. Aplicativo , aplicativo , programa e site
são intercambiáveis na maioria das vezes. Caso haja alguma confusão, este livro des-
creve princípios gerais para melhorar a qualidade do JavaScript, portanto, nenhum
desses termos deve ser tomado literalmente. Talvez seu código seja uma biblioteca ou
framework? De qualquer forma, as técnicas deste livro devem ser aplicadas
perfeitamente.
Além disso, estou percebendo (tarde demais) que minha confiança em diagramas, es-
pecialmente os do Capítulo 5, pode fazer um terrível desserviço aos leitores com defi-
ciência visual. Se você sentir que perdeu algum conteúdo por esse motivo, sinta-se à
vontade para entrar em contato comigo com qualquer dúvida.
Usuários
Há também uma palavra neste livro que eu realmente odeio, e isso é usuários . É im-
preciso e também cria certa distância entre os criadores (desenvolvedores/designers)
e os consumidores (usuários). Palavras mais precisas e caridosas geralmente são espe-
cíficas para o domínio do problema, ou então ficamos presos a termos como “pessoas”
ou “pessoas que usam o programa/site”. Se não houver um termo mais específico do
que pessoa ou usuário (inclusive customer ), pode ser uma dica de que o modelo de
negócios é baseado puramente na venda de pessoas como dados, mas isso é outra
discussão.
A questão é que o termo usuário é usado neste livro para transmitir um conceito fami-
liar: uma pessoa que usa o programa/site. Além disso, ainda não existem termos mag-
nânimos e precisos para suplantar os termos relacionados de experiência do usuário
(UX) ou interface do usuário (UI). Em vez de explicar isso em vários lugares ou usar
termos não padronizados ou específicos para conceitos frequentemente abstratos, op-
tei por economizar o esforço e apenas falar sobre isso aqui.
Existem apenas duas indústrias que se referem a seus clientes como usuários:
drogas ilegais e software houses.
Além disso, cada ferramenta, estrutura e biblioteca virá com alguma comunidade e
história. Assim como não acredito em nenhuma maneira verdadeira de ferramentas,
também não endosso a comunidade por trás de nenhum código ou projeto de tercei-
ros. Muitos projetos virão com um código de conduta que informará se participar de-
les será um uso agradável do seu tempo.
Isso fica um pouco obscuro, mas uma coisa que eu gostaria de destacar mais é a hie-
rarquia não em termos de objetos, mas na interface de uma base de código bem proje-
tada. Quando o código é um script simples, esperamos que ele seja executado de cima
para baixo, como um procedimento. À medida que uma base de código amadurece
(através do design, não da carnificina misturada com entropia), esperamos que ela se
desenvolva em três camadas principais (embora isso seja obviamente estendido em
bases de código mais complexas ).
Ao longo deste livro, estamos criando programas que começam muito desestruturados, e nosso
principal objetivo (independentemente de um paradigma como OOP ou FP) é fazer divisões en-
tre essas três camadas. Isso é o que permite que o código seja testável e portátil. Se você de-
pende principalmente de estruturas que fornecem sua própria organização, esse processo pode
não ser familiar.
Há duas coisas dignas de nota aqui. Primeiro, variáveis locais (ou constantes) criadas
dentro do escopo de uma função não são consideradas “entradas” para fins de diagra-
mação ou de outra forma. Segundo, embora o termo entrada não local seja usado
como um termo preciso neste texto, variável livre é um nome mais comum. No en-
tanto, é um pouco impreciso, uma vez que entradas não locais podem ser constantes
em vez de variáveis. Da mesma forma, alguns usam o termo variáveis vinculadas para
se referir ao que chamamos de entradas explícitas e, até certo ponto, também entra-
das implícitas .
itálico
Indica novos termos, URLs, endereços de e-mail, nomes de arquivo e extensões
de arquivo. Também usado ocasionalmente para ênfase e contraste.
Constant width
Usado para listagens de programas, bem como dentro de parágrafos para se re-
ferir a elementos de programa, como nomes de variáveis ou funções, bancos de
dados, tipos de dados, variáveis de ambiente, instruções e palavras-chave.
Constant width bold
Mostra comandos ou outro texto que deve ser digitado literalmente pelo
usuário.
DICA
O B S E RVA Ç Ã O
AV I S O
Este livro está aqui para ajudá-lo a fazer o seu trabalho. Em geral, se um código de
exemplo for oferecido com este livro, você poderá usá-lo em seus programas e docu-
mentação. Você não precisa entrar em contato conosco para obter permissão, a menos
que esteja reproduzindo uma parte significativa do código. Por exemplo, escrever um
programa que usa vários pedaços de código deste livro não requer permissão. Vender
ou distribuir um CD-ROM de exemplos dos livros da O'Reilly requer permissão. Res-
ponder a uma pergunta citando este livro e citando um código de exemplo não requer
permissão. Incorporar uma quantidade significativa de código de exemplo deste livro
na documentação do seu produto requer permissão.
Agradecemos, mas não exigimos, atribuição. Uma atribuição geralmente inclui o tí-
tulo, autor, editora e ISBN. Por exemplo: “ Refatorando JavaScript por Evan Burchard
(O'Reilly). Copyright 2017 O'Reilly Media, 978-1-491-96492-7.”
Se você achar que o uso de exemplos de código está fora do uso justo ou da permissão
dada acima, sinta-se à vontade para nos contatar em permissions@oreilly.com .
As ferramentas usadas no código deste livro podem ser encontradas no apêndice, jun-
tamente com recursos para mais informações sobre os tópicos abordados. Para refe-
rência, as ferramentas usadas neste livro junto com suas versões são:
nó 6.7.0
npm 3.10.3
desejo 0.1.2
mocha 3.2.0
profundo igual a 1.0.1
testdouble 1.10.0
fita 4.6.3
lodash 4.17.2
afirmar 1.4.1
sublinhado 1.8.3
ramda 0.22.1
santuário 0.11.1
O'Reilly Safari
Sebastopol, CA 95472
707-829-0104 (fax)
Temos uma página web para este livro, onde listamos erratas, exemplos e qualquer
informação adicional. Você pode acessar esta página em http://bit.ly/refactoring-js_1e .
Para comentar ou fazer perguntas técnicas sobre este livro, envie um e-mail para
bookquestions@oreilly.com .
Para obter mais informações sobre nossos livros, cursos, conferências e notícias, con-
sulte nosso site em http://www.oreilly.com .
Agradecimentos
Agradeço à minha família pelo apoio na realização deste livro: mamãe, papai, Amy,
Scott, Gretchen, Max e Jade.
Agradecimentos especiais às pessoas que ajudaram a dar o pontapé inicial: Zeke Tem-
plin, Steve Souders, Mary Treseler, Simon St. Laurent e Tyler Ortman.
E para aqueles que deram inspiração técnica e feedback: Jacob Barss-Bailey, Matt
Blake, Charles Baakel, Stefano De Vuono e Ryan Duchin.
E aos meus revisores técnicos: Steve Suering, Shelley Powers, Chris Deely, Darrell He-
ath e Jade Applegate.
E para aqueles cujo trabalho achei útil e inspirador: William F. Opdyke, Martin Fo-
wler, Kent Beck, John Brant, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissi-
des, Douglas Crockford, Tony Hoare, Alexis Deveria, Addy Osmani, Robert Nystrom,
Brian Lonsdorf, Reginald Braithwaite, Miran Lipovaca, Kyle Simpson, Tom Stuart, Mi-
chael Fogus, David Chambers, Michael Hurley, Scott Sauyet, Yehuda Katz, Jay Fields,
Shane Harvie, Russ Olsen, Joshua Kerievsky, James Halliday, TJ Holowaychuk, Justin
Searls, Eric Elliot, Jake Archibald, Arnau Sanchez , Alex Chaffee, Eric Hodel, Sean
Hussey, Brian Cardarella, Foy Savas e Katrina Owen e Bryan Liles.
Um agradecimento especial ao Dr. Axel Rauschmayer por seu incrível trabalho inter-
pretando especificações para nós, meros mortais, além de fornecer o prefácio deste
livro.
P S S . . . E I , L E I TO R !
Eu sei que parece apenas uma grande lista de nomes, mas as pessoas nesta seção são realmente
incríveis. Os recursos no apêndice são menos importantes do que esta lista. Muitas dessas pes-
soas fizeram essas coisas. E pesquisar seus nomes permitirá que você saiba sobre suas coisas
novas, o que provavelmente é melhor do que suas coisas antigas. Olhe para essas pessoas.
E ao meu cachorro por me levar para passear, mesmo quando eu estava no meio de
alguma coisa .
Para você também. Obrigado por apoiar o meu trabalho. Me chame se precisar de al-
guma coisa.
1
William Opdyke, “Refactoring Object-Oriented Frameworks” (tese de doutorado,
University of Illinois at Urbana-Champaign, 1992), 40.
Apoiar Sair