- Notifications
You must be signed in to change notification settings - Fork111
Translating polyfills and transpilers section.#407
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
Closed
kaellandrade wants to merge1 commit intojavascript-tutorial:masterfromkaellandrade:polyfills-transpilers-article
Uh oh!
There was an error while loading.Please reload this page.
Closed
Changes fromall commits
Commits
File 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
92 changes: 48 additions & 44 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,96 @@ | ||
# Polyfillse transpiladores | ||
A linguagemJavaScriptevolui constantemente. Novas propostas para a linguagem surgem regularmente, elas são analisadas e, se consideradas interessantes, serão adicionadas à lista<https://tc39.github.io/ecma262/>e depois progridem para a [especificação](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/). | ||
As equipes por trás dos mecanismos JavaScript têm suas próprias ideias sobre o que implementar primeiro. Eles podem decidir implementar propostas que estão em rascunho e adiar coisas que já estão dentro das especificações, porque são menos interessantes ou simplesmente mais difíceis de fazer. | ||
Portanto, é bastante comum que um mecanismo implemente apenas parte do padrão. | ||
Uma excelente página para ver o estado atual do suporte aos recursos da linguagem é<https://compat-table.github.io/compat-table/es6> (a lista é gigante, temos muito o que estudar pela frente!) | ||
Como programadores, gostaríamos de usar os recursos mais recentes. Quanto mais coisas boas – melhor! | ||
Por outro lado, como fazer nosso código moderno funcionar em motores (engines) mais antigos que ainda não entendem os recursos recentes? | ||
Existem duas ferramentas para contornar isso: | ||
1.Transpiladores (Transpilers). | ||
2.Scripts de Preenchimentos (Polyfills). | ||
Aqui, neste capítulo, nosso objetivo é entender a essência de como eles funcionam e seu lugar no mundo do desenvolvimento web. | ||
##Transpiladores | ||
Um [transpilador](https://en.wikipedia.org/wiki/Source-to-source_compiler)é umsoftwareespecial que traduz o código-fonte em outro código-fonte. Ele pode analisar ("ler e compreender")código moderno e reescrevê-lo usando construções de sintaxe mais antigas, para que também funcione em mecanismos desatualizados. | ||
Por exemplo,JavaScriptantes do ano2020não tinha o "operador de coalescência nulo" `??`.Portanto, se um usuário utilizar um navegador desatualizado, ele poderá não entender o código como `height = height ?? 100`. | ||
Um transpilador analisaria nosso código e reescreveria a `height ?? 100`em algo parecido com`(height !== undefined && height !== null) ? height : 100` | ||
```js | ||
//antes de executar o transpilador | ||
height = height ?? 100; | ||
//após executar o transpilador | ||
height = (height !== undefined && height !== null) ? height : 100; | ||
``` | ||
Agora, o código reescrito é adequado para mecanismos JavaScriptmais antigos. | ||
Normalmente, um desenvolvedor executa o transpilador em seu próprio computador e, em seguida, faz o deploy do código transpilado para o servidor. | ||
Falando em nomes, [Babel](https://babeljs.io)é um dos transpiladores mais populares que existe. | ||
Sistemas modernos de construção de projetos, como o [webpack](https://webpack.js.org/),fornecem um meio de executar um transpilador automaticamente em cada alteração de código, por isso é muito fácil integrá-lo ao processo de desenvolvimento. | ||
##Scripts de Preenchimentos (Polyfills) | ||
Novos recursos de linguagem podem incluir não apenas construções e operadores de sintaxe, mas também funções integradas (built-in functions). | ||
Por exemplo, `Math.trunc(n)`é uma função que "retira" a partedecimalde um número, por exemplo,`Math.trunc(1.23)`retorna `1`. | ||
Em alguns mecanismosJavaScript(muito desatualizados), não há `Math.trunc`,portanto, esse código falhará. | ||
Como estamos falando de novas funções, não de mudanças de sintaxe (como linguagem é escrita), não há necessidade de transpilar nada aqui. Precisamos apenas declarar a função que falta. | ||
Um scriptque atualiza/adiciona novas funções é chamado de"polyfill".Ele "preenche" a lacuna e adiciona implementações ausentes. | ||
Para este caso específico, o polyfillpara `Math.trunc`seria um scriptimplementado da seguinte forma: | ||
```js | ||
if (!Math.trunc) { //se não existir a função | ||
//Implementação da função | ||
Math.trunc = function(number) { | ||
// Math.ceil and Math.floorjá existem mesmo em mecanismos bem antigos | ||
//elas serão abordadas posteriormente | ||
return number < 0 ? Math.ceil(number) : Math.floor(number); | ||
}; | ||
} | ||
``` | ||
JavaScript é uma linguagem altamente dinâmica. Os scripts podem adicionar/modificar qualquer função, mesmo as integradas (built-in functions). | ||
Duas bibliotecas de polyfills interessantes são: | ||
- [core js](https://github.com/zloirock/core-js) que oferece suporte a muitas funcionalidades e permite incluir apenas as necessárias. | ||
- [polyfill.io](https://polyfill.io/) um serviço que fornece um script com polyfills, dependendo das funcionalidades e do navegador do usuário. | ||
## Resumo | ||
Neste capítulo, gostaríamos de motivá-lo aestudar recursos de linguagem modernos e até mesmo "de ponta", mesmo que ainda não sejam bem suportados por mecanismos JavaScript. | ||
Só não se esqueça de usar um transpilador (se estiver usando sintaxe ou operadores modernos) e polyfills (para preencher funções que possam estar faltando). Eles garantirão que o código funcione. | ||
Por exemplo, mais tarde, quando estiver familiarizado com JavaScript, você poderá configurar um sistema de construção de código baseado em [webpack](https://webpack.js.org/) com o plugin [babel-loader](https://github.com/babel/babel-loader). | ||
Sites que mostram o estado atual do suporte para vários recursos da linguagem: | ||
- <https://kangax.github.io/compat-table/es6/> - para JavaScript puro. | ||
- <https://caniuse.com/> - para funcionalidades relacionadas ao navegador. | ||
**Observação:** | ||
O Google Chrome geralmente é o mais atualizado em termos de recursos de linguagem. | ||
Experimente alguns recursos listado no [Caniuse](https://caniuse.com), veja se consegue encontrar algum recurso que falha na versão atual do Google Chrome, ou do seu navegador favorito. | ||
A maioria dos tutoriais de demonstrações apresentados aqui funcionam com qualquer navegador moderno. Fique à vontade para experimentá-los! |
4 changes: 2 additions & 2 deletions1-js/03-code-quality/index.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,3 +1,3 @@ | ||
#Qualidade do código | ||
Este capítulo ensina práticas de codificação que iremos utilizar posteriormente em nosso desenvolvimento. |
2 changes: 1 addition & 1 deletion1-js/04-object-basics/index.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 +1 @@ | ||
#Objetos: Básico |
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.