VAGAS DE EMPREGO

balta.io balta.io
  • Cursos
  • Carreiras
  • Para sua Empresa
  • Livros
    • Background Services
    • Blazor com .NET 8
    • Segurança em APIs
    • Futuro do C# 12
    • Nullable Types
    • Clean Code
  • Blog

Seja Premium
balta.io

  • Cursos
  • Carreiras
  • Para sua Empresa
  • Agenda
  • Livros
    • Background Services
    • Blazor com .NET 8
    • Segurança em APIs
    • Futuro do C# 12
    • Nullable Types
    • Clean Code
  • Blog
  • Player
Seja Premium

Entre ou Cadastre-se

  • Home
  • Artigos
  • Bem-vindo JavaScript Moderno


👉 Temos uma versão mais atualizada deste artigo no nosso novo Blog

Bem-vindo JavaScript Moderno

Durante o ASP.NET Cast do dia 16/10/2019 falamos muito sobre JavaScript, sua história e mudanças, e eu percebi que teve muita coisa que talvez tenha passado batido para muitos, inclusive para mim.

Eu sei que boa porcentagem dos alunos do site são pessoas buscando atualizações, então resolvi fazer este artigo para ajudar quem está desatualizado sobre JavaScript.

Let e Const

Anteriormente no JS utilizávamos sempre o var, tanto para constantes (Existia?) quanto para variáveis.

Uma das novas mudanças é a implementação do let para variáveis e const para constantes. Depois de criada uma constante, se você tentar passar um novo valor a ela, receberá um erro.

let minhaVariavel = "Algum valor";
const minhaConstante = "Algum valor";

Arrow Functions

As Arrow Functions são uma forma menos verbosa de escrever funções, removendo a keyword function.

Fora a estética, o uso das Arrow Functions elimina a necessidade da keyword this dentro da função. Desta forma, em determinadas situações é quase obrigatório o uso de Arrow Functions. Para ser sincero, utilize apenas Arrow Functions daqui para frente.

// Modelo antigo
function minhaFuncao() {
    return "Valor";
}

// Modelo novo
const minhaFuncao = () => {
    return "Valor";
}

Podemos receber parâmetros nas funções também, bastando informar seus nomes na assinatura da mesma.

// Recebendo parâmetros
const minhaFuncao = (meuParametro) => {
    return meuParametro;
}

// Recebendo N parâmetros
const minhaFuncao = (meuParametro, meuParametro2) => {
    return meuParametro + meuParametro2;
}

Para finalizar, se sua Arrow Function tem apenas uma linha de retorno, podemos utilizar a chamada “sem corpo -- bodyless”, e se existir apenas um parâmetro de entrada, também não é necessário uso dos parênteses.

// Bodyless com apenas um parâmetro
const minhaFuncao = meuParametro =>  meuParametro;

// Bodylless com N parâmetros
const minhaFuncao = (meuParametro, meuParametro2) =>  return meuParametro + meuParametro2;

Exports e Imports

Outro recurso importante foi a chegada da importação e exportação de módulos e classes, facilitando a modularização dos nossos Apps.

Podemos simplesmente utilizar o export default SEUOBJETO para exportar um objeto de uma classe.

// course.js
const course = {
    title: "JS Moderno",
    tag: "7199"
}

export default course

Ou podemos utilizar o export const diretamente no objeto, que é o meio mais comum e que particularmente prefiro.

// course.js
export const Course = {
    title: "JS Moderno",
    tag: "7199"
}

Com tudo exportado, podemos importar os objetos, utilizando o import. Para importar objetos exportados utilizando o default, basta criar um nome e fazer sua importação.

Para objetos exportados via const, devemos utilizar seu mesmo nome, e entre colchetes.

// Importação quando o módulo usa export default
import course from 'caminho/para/course.js';

// Importação quando o módulo usa export const
import { Course } from 'caminho/para/course.js';

Podemos também utilizar alias para ambos os casos, como mostrado no código abaixo.

// Importação quando o módulo usa export default
import course from 'caminho/para/course.js';

// Importação quando o módulo usa export default
// utilizando nome personalizado
import meuCurso from 'caminho/para/course.js';

// Importação quando o módulo usa export const
import { Course } from 'caminho/para/course.js';

// Importação quando o módulo usa export const
// Utilizando nome personalizado
import { Course as meuCurso } from 'caminho/para/course.js';

E se você tiver muitos exports em uma classe e quiser importa-los todos de uma vez (Somente exports via const), você pode utilizar o wildcard * e criar um alias para ele.

// Importa todas as constantes do arquivo e cria um alias cursos
import { * as cursos } from 'caminho/para/course.js';

Classes

Anteriormente havia um suporte a OOP mas com prototypes, algo diferente do comum que temos em outras linguagens. Hoje temos classes e heranças no JS.

class Payment {
    customer = "";
    pay = () => {
        // pagar...
    }
}

const payment = new Payment();

class CreditCardPayment extends Payment {
    creditCardNumber = "";
    installment = () => {
        // parcelamento
    }
}

Lembre-se que as classes são sempre passadas por referência, ou seja, nunca será criada uma cópia dela, diferente de como temos com objetos primitivos (string, int, bool).

Spread Operator

Se arrays e objetos complexos são passados como referência, como fazemos para adicionar propriedades ou elementos a eles?

Para utilizá-lo, basta adicionar “...OBJETOANTERIOR” que anexamos o objeto ou array anterior no novo.

Isto vale tanto para arrays quanto para objetos.

// Spread Operators em arrays
const numbers = [1, 2, 3];
const novo = [...numbers, 4];


// Spread Operators em objetos
const course = {
    title: "Curso do balta.io",
    tag: "7198"
}

const newCourse = {
    ...course,
    category: "Frontend"
}

Rest Operator

O Rest Operator permite que façamos o envio de um array de parâmetros para uma função utilizando os mesmos “...” do Spread.

Uma vez enviado para função como parâmetro, temos ele materializado como um array, podendo inclusive executar métodos como filter, map, entre outros.

const filter = (...args) => {
    return args.filter(el => el === 1);
}

// Deve exibir 1
console.log(filter(1, 2, 3));

Destructuring

Utilizamos o Destructuring para extrair elementos de um array ou propriedades de um objeto, diretamente para uma variável.

No caso dos arrays, basta criar um array (literalmente) e igualar a sua lista de objetos. Ele irá mapear cada item da sua lista para seu novo array.

Caso queira pular algum item, é só não criar uma variável e deixar um espaço em branco ou somente a virgula no array.

const numbers = [1, 2, 3, 4];
[v1, v2] = numbers;
// Podemos pular elementos deixando apenas uma virgula
// Neste caso, estamos pulando o segundo item
[v1, ,v3] = numbers;

// Vai exibir 1 e 2
console.log(v1, v2);

// Vai exibir 1 e 3
console.log(v1, v3);

No caso de objetos, basta criar uma variável entre chaves com o mesmo nome de alguma propriedade do objeto.

Caso não haja uma propriedade com este nome, a variável ficará undefined.

const curso = {
    title: "Curso do balta.io",
    tag: "7199"
}

{title} = curso;
{tag} = curso;
{price} = curso;

// Vai exibir: Curso do balta.io
console.log(title);

// Vai exibir: 7199
console.log(tag);

// Vai exibir: Undefined
// Não existe a propriedade price no curso
console.log(price);

Map

Além do filter que vimos anteriormente, temos também o map, que percorre uma lista de elementos permitindo interagir com eles.

Podemos por exemplo percorrer uma lista de números e dobrar seu valor, armazenando-os em uma nova variável, com poucas linhas de código.

const numbers = [1, 2, 3, 4];
const dobro = numbers.map((n)=>{
    return n * 2;
});

// Vai exibir [1, 2, 3, 4]
console.log(numbers);

// Vai exibir [2, 4, 6, 8]
console.log(dobro);

Se lembrar-mos que podemos remover os parênteses das Arrow Functions quando temos apenas um parâmetre e utilizar funções sem corpo, o código fica ainda menor.

const dobro = numbers.map(n => n * 2);

Conclusão

O JavaScript vem evoluindo muito nos últimos anos e deixou de ser aquela linguagem arcaica e abandonada. Existem funcionalidades exclusivas dele e que facilitam muito nossa vida.

Fontes

https://www.academind.com/learn/javascript/reference-vs-primitive-values/

Populares

Priority Queue

Priority Queue ou fila prioritária é um tipo de lista inclusa no C# 10 que permite que seus itens...


Implicit Operators no C#

Implicit Operators permitem adicionar comportamentos de conversão a objetos Built In ou complexos...


ASP.NET 5 – Autenticação e Autorização com Bearer e JWT

Este artigo atualmente utiliza a versão 5.0.0-rc.1 do ASP.NET/.NET, o que significa que ainda não...


Clean Code - Guia e Exemplos

Saiba como manter seu código limpo (Clean Code) seguindo algumas práticas sugeridas pelo Robert C...


Git e GitHub - Instalação, Configuração e Primeiros Passos

Git é um sistema de controle de versões distribuídas, enquanto GitHub é uma plataforma que tem o ...


Compartilhe este artigo



Conheça o autor

André Baltieri

André Baltieri

Microsoft MVP

Me dedico ao desenvolvimento de software desde 2003, sendo minha maior especialidade o Desenvolvimento Web. Durante esta jornada pude trabalhar presencialmente aqui no Brasil e Estados Unidos, atender remotamente times da ?ndia, Inglaterra e Holanda, receber 8x Microsoft MVP e realizar diversas consultorias em empresas e projetos de todos os tamanhos.





3.156

Aulas disponíveis

294

horas de conteúdo

76.688

Alunos matriculados

53.260

Certificados emitidos





Comece de graça agora mesmo!

Temos mais de 21 cursos totalmente de graça e todos com certificado de conclusão.

Começar


Prefere algo mais Premium?

Conheça nossos planos



Premium anual

Compra única, parcelada em até
12x no cartão de crédito


12x R$

99

,79

=R$ 1.197,44
  • 1 ano de acesso
  • Acesso à todo conteúdo
  • Emissão de Certificado
  • Tira Dúvidas Online
  • 68 cursos disponíveis
  • 10 carreiras disponíveis
  • 161 temas de tecnologia
  • Conteúdo novo todo mês
  • Encontros Premium

Começar agora

Política de privacidade



Precisa de ajuda?

Dúvidas frequentes



  • Posso começar de graça?

    Sim! Basta criar sua conta gratuita no balta.io e começar seus estudos. Nós contamos com diversos cursos TOTALMENTE gratuitos e com certificado de conclusão.

  • Vou ter que pagar algo?

    Nós temos cursos gratuitos e pagos, porém você não precisa informar nenhum dado de pagamento para começar seus estudos gratuitamente conosco. Os cursos gratuitos são completos e com certificado de conclusão, você não paga nada por eles.

    Porém, caso queira algo mais Premium , você terá acesso à diversos benefícios que vão te ajudar ainda mais em sua carreira.

  • Por onde devo começar?

    Siga SEMPRE as nossas Carreiras , elas vão te orientar em todos os sentidos. Os cursos já estão organizados em categorias e carreiras para facilitar seu aprendizado.
    Nossa sugestão para aprendizado é começar pelo Backend e seguindo para Frontend e Mobile.

    • Backend
    • Frontend
    • Mobile

  • Os cursos ensinam tudo que preciso?

    Nenhum curso no mundo vai te ensinar tudo, desculpa ser sincero! Os cursos são uma base, eles fornecem por volta de 30% do que você precisa aprender, o resto é com você, com dedicação e MUITA prática.

  • O que eu devo estudar?

    Java ou .NET? Angular ou React? Xamarin ou Flutter? A resposta é simples e direta: "Você já sabe o básico?"

    Se você ainda não sabe BEM o básico, ou seja, os fundamentos, OOP, SOLID, Clean Code, está perdendo tempo estudando Frameworks ou até coisas mais avançadas como Docker. Foque nos seus objetivos primeiro.
    Agora se você está indeciso sobre qual Framework estudar, a boa notícia é que o mercado neste momento está bem aquecido e você tem várias oportunidade. Desta forma o que levaríamos em conta para tomar esta decisão seria:

    • Já sei o básico
    • O Framework/Tecnologia tem mercado onde eu estou (região)
    • O Framework/Tecnologia é utilizado em uma empresa onde quero atual
    • O Framework/Tecnologia resolve meu problema
    • Eu gosto de utilizar o Framework/Tecnologia

  • Estou pronto para estudar no balta.io?

    Com certeza! O primeiro passo é começar e você pode fazer isto agora mesmo!

    Começar de graça

Ainda tem dúvidas?





Assine nosso Newsletter

Receba em primeira mão todas as nossas novidades.

Cadastrar


balta.io

Sobre

  • Como funciona?
  • Seja Premium
  • Agenda
  • Blog
  • Todos os cursos

Cursos

  • Frontend
  • Backend
  • Mobile
  • Fullstack

Suporte

  • Termos de uso
  • Privacidade
  • Cancelamento
  • Central de ajuda

Redes Sociais

  • Telegram
  • Facebook
  • Instagram
  • YouTube
  • Twitch
  • LinkedIn
  • Discord