JavaScript

A linguagem JavaScript é uma das mais usadas no desenvolvimento de aplicações para web. Originalmente era usada apenas no lado cliente, sendo executada pelos navegadores. Atualmente, porém, também vem sendo usada no lado servidor.

Considerando que alguns banco de dados, relacionais ou não (chamados de NoSQL), conseguem lidar com dados no formato JSON, é possível escrever 100% dos algoritmos de uma aplicação usando apenas JavaScript.

Breve Histórico

A linguagem tem sua origem em meados dos anos 1990 e está diretamente ligada aos navegadores. Seu objetivo era possibilitar que as páginas HTML fossem mais dinâmicas permitindo que os usuários interagissem com as páginas.

No final de 1995 a empresa Netscape Communications lançou a versão 2 do seu navegador Netscape Navigador que incluia pela primeira vez um interpretador para a linguagem JavaScript. Em 1996 a Microsoft lançou seu navegador Internet Explorer 3 contendo um interpretador para a linguagem JScript que era fortemente inspirada em JavaScript. Começava nesta época a guerra dos navegadores pois embora as duas linguagens fossem muito semelhantes não era possivel garantir que o mesmo código fosse executado em ambos os navegadores.

Por iniciativa da Netscape, em 1997 a organização Ecma publicou a especificação da linguagem EcmaScript. JavaScript passou então a ser uma implementação desta especificação.

A especificação EcmaScript está definida no padrão ECMA-262 e pode ser obtida no endereço http://www.ecma-international.org/publications/standards/Ecma-262.htm.

Versões de EcmaScript

  • EcmaScript, em 1997.
  • EcmaScript 2, em 1998.
  • EcmaScript 3, em 1999.
  • EcmaScript 4, nunca oficialmente lançada devido a divergências entre os membros do comitê.
  • EcmaScript 5, em 2009.
  • EcmaScript 5.1, em 2011.
  • EcmaScript 2015, em 2015. Esta versão é popularmente chamada de ES6.
  • EcmaScript 2016, em 2016.
  • EcmaScript 2017, em 2017.

Como afirmado antes, hoje em dia programas escritos em JavaScript podem ser executados tanto por navegadores quando por outros programas (sendo o Node.js o exemplo mais conhecido).

O grande problema prático, atualmente, é que nem os navegadores nem o Node implementaram 100% da especificação mais recente (EcmaScript 2017). Para remediar, programas classificados como transpilers, como o Babel, convertem código JavaScript para versões anteriores fazendo com que possam ser executados pelos navegadores e pelo Node.

Elementos da Linguagem

Dados

Um programa JavaScript pode lidar com os seguintes valores (os mais usados):

  • lógicos (true e false).
  • ausência de valor (null).
  • indefinição de valor (undefined).
    • Quando uma variável não tem valor definido explicitamente então seu valor é undefined.
  • string (sequência de caracteres).
    • Por exemplo 'um valor' ou "um valor".
  • números.
    • Por exemplo 67, -89, 12.67, -0.029, +Infinity, -Infinity e NaN.
    • O número NaN serve para indicar que o resultado de uma operação não conseguiu gerar um número. Por exemplo, a multiplicação 8 * 'galo' é válida em JavaScript e dá como resultado o número NaN.
  • objetos, formados por um conjunto de pares chave-valor delimitados por { e }.
    • Por exemplo, {nome: 'Fulano de Tal', idade: 67, aposentado: true}. Importante: o valor pode ser qualquer um dos valores aqui apresentados.
  • arrays, formados por um conjunto de valores delimitados por [ e ].
    • Por exemplo, [8, 3, 5], [], [8, null, true].
  • funções.
    • Por exemplo, function (n) { return n * 3;}. A função, como valor, pode ser o valor de uma variável, pode ser passada como parâmetro de outra função e pode ser o resultado retornado por outra função.

Variáveis e Constantes

JavaScript é uma linguagem com tipagem dinâmica. Em termos práticos isso significa que o "tipo de uma variável" depende do valor que lhe for atribuído.

Por exemplo, uma variável pode receber, via comando de atribuição, um número e em seguida receber uma string. O tipo, portanto, está associado ao valor e não à variável.

Esta característica contrasta radicalmente com linguagens com tipagem é estática. Em Java, por exemplo, ao declarar que uma variável é do tipo int ela jamais poderá armazenar valores de outros tipos. Esse tipo de erro, inclusive, é detectado pelo próprio compilador.

Variáveis

No código a seguir estão declaradas as variáveis a, b, c e d. A variável d possui o valor inicial undefined pois foi declarada mas nenhum valor foi explicitamente atribuído como aconteceu com as outras variáveis.

Como são variáveis, o valor armazenado por ser alterado como ocorre com a e com d.

let a = 89;
let b = [2, 3, 4];
let c = {x: 200, y: 90};
let d;

a = 300;
d = true;

Constantes

Constantes são "variáveis que não variam", ou seja, o valor não pode ser alterado.

const a = 200;
const b = [2,3,4];
const c = {x: 200, y: 90};

Comandos

A linguagem possui os clássicos comandos de atribuição, seleção e repetição.

Atribuição

A tabela a seguir mostra alguns dos comandos.

Comando Significado
x = y x recebe o valor de y
x += y x = x + y
x -= y x = x - y
x *= y x = x * y

Veja também a lista completa de comandos.

Seleção

A linguagem possui os clássicos comandos if, if-else e switch como em Java.

 let a = 10;
 let b;
 let c;

 if (a > 10) {
   b = true;
   c = a;
 } else {
   b = false;
   c = 0;
 }
const tipos = {
  a : 'adulto',
  b : 'adolescente',
  c : 'infantil'
}
const descontos = {
  padrao   : 0.05,
  especial : 0.10,
  oferta   : 0.35
}

// preço inicial do produto
let preco = 200;

// valor do desconto
let desconto;

// preço final do produto
let precoFinal;

// cliente tipo b
let tipo = tipos.b;

switch (tipo) {
  case tipos.a :
     desconto = preco * descontos.especial;
     break;
  case tipos.b :
     desconto = preco * descontos.padrao;
     break;
  default:
     desconto = 0;
     break;
}

precoFinal = preco - desconto;

Repetição

A linguagem possui os clássicos comandos for e while, como em Java.

const LIMITE = 10;
let total = 0;
for (i = 0; i < LIMITE; i++)
   total += i;
let a = 200;
let b = 0;
while (a > 15) {
  b += a;
  a -= 7;
}
Leitura Recomendada
A história das versões de JavaScript
Guia JavaScript
Explorando ES6

results matching ""

    No results matching ""