- Notifications
You must be signed in to change notification settings - Fork111
Polyfills and transpilers#215
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
nazarepiedady merged 6 commits intojavascript-tutorial:masterfromodsantos:polyfills--transpilersDec 23, 2023
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
6 commits Select commitHold shift + click to select a range
6ff2283
Translate article
odsantosc1862e6
Merge branch 'master' into polyfills--transpilers
odsantos09dc9c0
Merge branch 'master' into polyfills--transpilers
odsantose906868
Merge branch 'master' into polyfills--transpilers
odsantose362f46
refactor: adds refactor (simplifying) of some words and fix broken links
jonnathan-ls29903ed
Merge branch 'master' into polyfills--transpilers
odsantosFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
82 changes: 40 additions & 42 deletions1-js/03-code-quality/06-polyfills/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,92 +1,90 @@ | ||
# Polyfillse transpilers | ||
A linguagemJavaScriptevolui constantemente. Novas propostas para a linguagem aparecem regularmente, elas são analisadas e, se consideradas válidas, são anexadas à lista em<https://tc39.github.io/ecma262/>e depois progridem para a [especificação (en)](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/). | ||
Grupos por detrás dos interpretadores de JavaScript têm as suas próprias ideias sobre o que implementar primeiro. Eles podem decidir implementar propostas que estão em esboço e adiar coisas que já estão naspec,por serem menos interessantes ou apenas mais difíceis de fazer. | ||
Assim, é muito comum que um interpretador implemente apenas parte de um padrão. | ||
Uma boa página para se ver o estágio atual de suporte de funcionalidades da linguagem é<https://compat-table.github.io/compat-table/es6/> (é extensa, nós ainda temos muito que estudar). | ||
Como programadores, nós gostaríamos de usar as funcionalidades mais recentes. Quantas mais forem as coisas boas - melhor! | ||
Por outro lado, como fazer o nosso código moderno funcionar em interpretadores antigos que ainda não compreendam as funcionalidades recentes? | ||
Existem duas ferramentas para isso: | ||
1. Transpilers. | ||
2. Polyfills. | ||
Aqui, neste capítulo, o nosso propósito é obter o essencial de como elas funcionam, e o seu lugar no desenvolvimento para a web. | ||
## Transpilers | ||
Um [transpiler (transpilador em português)](https://en.wikipedia.org/wiki/Source-to-source_compiler)é uma peça especial de softwareque traduz um código-fonte para outro código-fonte. Ele pode analisar ("ler e compreender")código moderno, e o reescrever usando construções sintáticas antigas, de tal forma que também funcione em interpretadores desatualizados. | ||
Por exemplo, oJavaScriptantes de 2020não tinha o "operador de coalescência nula" `??`.Assim, se um visitante usar um navegador desatualizado, este não conseguirá compreender código como `height = height ?? 100`. | ||
Um transpileriria analisar o nosso código e reescrever`height ?? 100`para `(height !== undefined && height !== null) ? height : 100`. | ||
```js | ||
//antes de correr o transpiler | ||
height = height ?? 100; | ||
//depois de correr o transpiler | ||
height = (height !== undefined && height !== null) ? height : 100; | ||
``` | ||
Agora, o código reescrito está adequado a interpretadores deJavaScriptantigos. | ||
Geralmente, um desenvolvedor executa o transpilerna sua própria máquina, e depois coloca o código transpilado no servidor. | ||
Falando em nomes, o[Babel](https://babeljs.io)é um dos mais prominentestranspilerspor aí. | ||
Sistemas para a construção de projetos modernos, tais como o[webpack](https://webpack.js.org/),fornecem meios para automaticamente correr o transpilerem cada alteração do código, e assim é muito fácil o integrar no processo de desenvolvimento. | ||
## Polyfills | ||
Novas funcionalidades da linguagem podem incluir não só construções sintáticas e operadores, mas também funções incorporadas. | ||
Por exemplo, `Math.trunc(n)`é uma função que "corta" a partedecimalde um número, ex. `Math.trunc(1.23) = 1` retorna 1. | ||
Em alguns (muito desatualizados) interpretadores de JavaScript, não existe `Math.trunc`,por isto esse código irá falhar. | ||
Como estamos falando de novas funções, e não de alterações sintáticas, não é necessário transpilar nada aqui. Nós, apenas precisamos de declarar a função em falta. | ||
Um scriptque atualize/adicione novas funções é chamado de"polyfill".Ele "preenche" o intervalo e adiciona implementações que faltem. | ||
Para o caso em particular, o polyfillpara `Math.trunc`é um scriptque o implementa, como aqui: | ||
```js | ||
if (!Math.trunc) { //se a função não existir | ||
//implemente-a | ||
Math.trunc = function(number) { | ||
// Math.ceile Math.floorexistem mesmo em interpretadores deJavaScriptantigos | ||
//elas são estudadas mais adiante neste tutorial | ||
return number < 0 ? Math.ceil(number) : Math.floor(number); | ||
}; | ||
} | ||
``` | ||
OJavaScripté uma linguagem altamente dinâmica. Scriptspodem adicionar/modificar quaisquer funções, incluindo até incorporadas. | ||
Duas interessantes bibliotecas de polyfills são: | ||
- [core js](https://github.com/zloirock/core-js)que suporta muitas funcionalidades, e permite apenas incluir aquelas necessárias. | ||
- [polyfill.io](http://polyfill.io) um serviço que fornece umscriptcom polyfills,dependendo das funcionalidades e do navegador do utilizador. | ||
## Resumo | ||
Neste capítulo, gostaríamos de o motivar a estudar funcionalidades modernas ou até em esboço da linguagem, mesmo que elas ainda não tenham um bom suporte pelos interpretadores de JavaScript. | ||
Apenas não se esqueça de usar um transpiler (se empregar sintaxe ou operadores modernos) e polyfills (para adicionar funções que possam estar ausentes). E eles irão garantir que o código funcione. | ||
Por exemplo, mais adiante quando estiver familiarizado com o JavaScript, você pode configurar um sistema para a construção de código com base no [webpack](https://webpack.js.org/) e com o plugin [babel-loader](https://github.com/babel/babel-loader). | ||
Bons recursos que mostram o estágio atual do suporte para várias funcionalidades: | ||
- <https://compat-table.github.io/compat-table/es6/> - para puro JavaScript. | ||
- <https://caniuse.com/> - para funções com relação ao navegador. | ||
P.S. O Google Chrome, geralmente é o mais atualizado relativamente a funcionalidades da linguagem, experimente-o se um exemplo no tutorial falhar. Contudo, a maioria dos exemplos no tutorial funcionam com qualquer navegador moderno. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.