cefet_front_end

JavaScript parte 0

Tipos de Dados, Variáveis, Estrutura Sequencial, Condicionais, Iterações e Funções


Na última aula (1/2)


Na última aula (2/2)


Hoje veremos…

  1. História e características
  2. Tipos de dados, Variáveis e Funções
  3. Condicionais, Vetores e Estruturas de Repetição
  4. Mais sobre funções e Métodos úteis

Tipos de Dados, Variáveis e Funções

Elementos da Linguagem JavaScript


História e características

Introdução a JavaScript

  1. História
  2. O que é JavaScript
  3. Como incluir na página

História (1/2)

1989 - 1993 Tim Berners-Lee cria a WWW em CERN (European Organization for Nuclear Research) e a deixa aberta ao público

1994 Håkon propõe uma linguagem para dar conta da responsabilidade de alterar a aparência de páginas web chamada CSS

1995 (maio) Brendan Eich, funcionário do Netscape, criou (em 10 dias!!) uma linguagem para alterar páginas dinamicamente - o Mocha

Foto de Brendan Eich

1995 (setembro) LiveScript (novo nome) é lançado com a versão beta do Netscape 2.0


História (2/2)

1995 (dezembro) Nome virou JavaScript para aproveitar a fama do Java

1996 (agosto) Microsoft adota o JavaScript sob o nome de JScript

1996 (novembro) A Netscape submeteu o JavaScript para a Ecma international para padronização. A especificação recebeu o nome de ECMAScript

1997 A Ecma International publicou a primeira versão

1998 Versão 2 do ECMAScript

1999 Versão 3 do ECMAScript

2009 Versão 5 do ECMAScript

2013 - hoje Versões 6-9+ do ECMAScript, que mudaram de nome para ES2015, ES2016, ES2017, ES2018


Logo da linguagem JavaScript

O que é JavaScript?


hello-world.js e imprimindo no console

  1. Um arquivo JavaScript incluído por um HTML é baixado e executado linha a linha
  2. Para testar escrevemos no console do navegador com
    console.log('.......');
    
  3. Também pode abrir uma janelinha
    window.alert('......');
    
    • …mas não faça isto, jovem, porque essa janelinha é muito chata ;)

Declarando variáveis (com let)


Outras formas de declarar variáveis (const/var)

  1. Usamos a palavra-chave const para criar variáveis que sempre apontam para o mesmo valor
      const fruta = 'abacate';
      fruta = 'pera';
      // Uncaught TypeError:
      //   Assignment to constant variable.
    
    • É uma boa prática usar const sempre que se sabe que a variável não receberá um novo valor
  2. Usávamos (passado, old, não use) a palavra-chave var:
    var vegetal = 'batata';
    
    • Similar ao let mas tem alguns problemas:
      • Não possui escopo de bloco, mas de função
      • Pode ser usada até mesmo antes da declaração
    • Era a única forma até 2012
    • Encontra-se códigos antigos na Web usando var

Fracamente tipada e dinâmica


Tipos de dados


O tipo 1. Boolean O tipo 2. Number


O tipo 3. String


Manipulando Strings


O tipo 4. Null

O tipo 5. Undefined


O tipo 7. Object


Objetos conhecidos


Criando um objeto (2 formas)

  1. Na forma literal:
    let jogador = {             // forma mais expressiva, curta e sexy 😎
      pontos: 1420,             // propriedades separadas por vírgula
      vidas: 2
    };
    
    let jogador = {};           // um objeto vazio: { }
    jogador.pontos = 1420;      // criou jogador.pontos com valor 1420
    jogador.vidas = 2;          // criou jogador.vidas
    
    • Novas propriedades podem ser atribuídas mesmo após sua criação!
  2. Na forma do operador new:
    • let jogador = new Object();
      jogador.pontos = 1420;
      jogador.vidas = 2;
      
      • Contudo, desta forma sempre cria-se um objeto vazio e deve-se preenchê-lo

Objetos dentro de objetos

let voo = {
    companhia: 'Gol',
    numero: 815,
    decolagem: {
        IATA: 'SYD',
        horario: '2004-09-22 14:55',
        cidade: 'Sydney'
    },
    chegada: {
        IATA: 'LAX',
        horario: '2004-09-23 10:42',
        cidade: 'Los Angeles'
    }
};

Métodos de objetos

const loja = {
  livros: [       // prop. é um vetor
    'macunaíma',
    'torre negra'
  ],
  dinheiro: 500,  // propri. é number
  
  // método vender
  vender: function() { // p. é função
    this.dinheiro += 15;
  } 
};

loja.vender(); // loja.dinheiro = 515
loja.vender(); // loja.dinheiro = 530

Outros tipos, baseados em Object


Operadores


O que significa === (igualdade forte)?


O objeto Math


Declarando e invocando funcoes

// DECLARA a função dizOla()
function dizOla() {
  console.log('olá queridão');
}
// INVOCA a função dizOla()
dizOla();  

Declarando parâmetros para funções

function dizOla(nome, pronome) {
  console.log('olá ' + pronome + ' ' + nome);
}
dizOla('enfermeira', 'srta.');
// imprime 'olá srta. enfermeira'
dizOla('jujuba', '');
// imprime 'olá  jujuba'
dizOla();
// imprime 'olá undefined undefined'

Valor de retorno de funções


Regras de legibilidade e nomenclatura (1/2)

  1. Nomes de funções e variáveis com notação camelo 🐪 sem acentuação:
  2. let ultimoNome = '';    🐪 ✅✅✅
    
    function removeVideo() {}   🐪 ✅✅✅
    
  3. let ultimo_nome = '';   👎
    let UltimoNome = '';    👎
    let últimonome = '';    
    let último nome = '';   ❌❌❌
    
    function remove_video() {}  👎
    function RemoveVideo() {}   👎
    function removevídeo() {}   
    function remove vídeo() {}  ❌❌❌
    
  4. Sempre indente o código:
  5. function total(preco, qtde) {   ✅✅✅
      if (confirmado) {
        return preco * qtde;
      }
      return 0;
    }
    
    function total(preco, qtde) {   👎👎👎
    if (confirmado) {
    return preco*qtde;
    }
    return 0;
    }
    

Regras de legibilidade e nomenclatura (2/2)


Condicionais, Vetores e Repetição

Arrays, for, while e variações


if/else (condicionais)

if (hora < 12) {
  manha = true;
} else {
  manha = false;
}

if (nome === 'Robervaldo') { 
  conceito = 'A';
} else if (nome === 'Ana') {
  conceito = 'B';
} else {
  conceito = 'C';
}

if (estouComSono)
  dormir(); // mas evite omitir { }

Operador ternário (condicionais)


switch (condicionais)

let corDoSite = 'black';
switch (climaAgora) {
    case 'ensolarado':
      corDoSite = 'yellow';
      break;
    
    case 'nublado':
    case 'chuvoso':
      corDoSite = 'gray';
      break;

    default:
      corDoSite = 'white';
      break;
}

Vetores


Usando vetores

let listaDeCoisas = ['Aew', 35, true, [], 'outra string'];

for (forma tradicional)


for (formas mais legais)

  1. For of: for (let item of array) :thumbsup::
    let cores = ['azul', 'rosa'];
    for (let cor of cores) {
      console.log(cor);
      // azul, rosa
    }
    
    • For each: array.forEach :thumbsup::
      let cores = ['azul', 'rosa'];
      cores.forEach(function(cor) {
       console.log(cor);
       // azul, rosa
      });
      

while/do..while


Mais sobre funcoes, Métodos úteis

Mais coisas legais


Mais sobre funções


Função anônima (atribuída a variável)

  1. Declaração de função “tradicional”:
    function dizOla(nome) {
      console.log('olá ' + nome);
    }
    dizOla('submundo');
    
    • function + nome + (params)

Passando função como parâmetro


Função vs Método

Função sozinha no mundo, ninguém é dono dela exemplo: todas as que vimos

Método nasceu de algum objeto, ele tem dono ex: as funções das strings, dos vetores (e outros)


Métodos comuns de strings (1/3)

Toda string possui vários métodos diferentes que podemos invocar

texto.length não é um método, mas retorna quantos caracteres 'trem'.length === 4

texto[i] não é um método, mas retorna o i-ésimo caractere 'trem'[3] === 'm'

texto.toLowerCase() método que retorna tudo em minúsculas 'Doug'.toLowerCase() === 'doug'

texto.toUpperCase() método que retorna tudo em maiúsculas 'Doug'.toUpperCase() === 'DOUG'


Métodos comuns de strings (2/3)

texto.trim() método que remove espaços em branco ao redor ' mosca '.trim() === 'mosca'

t.indexOf(trecho) método que retorna a posição do trecho no texto (ou -1) 'Thanos'.indexOf('os') === 4

t.substr(ini, tam) método que retorna um trecho dado início e tamanho 'Pronto'.substr(0, 2) === 'Pr'

t.includes(trecho) método que verifica se texto contém o trecho 'Hakuna'.includes('ku') === true

t.split(separad) método que retorna um vetor de trechos 'Banana'.split('a') === ['B', 'n', 'n']


Métodos comuns de strings (3/3)

t.startsWith(trech) método que verifica se começa com o trecho 'Hakuna'.startsWith('Ha') === true

t.endsWith(trecho) método que verifica se termina com o trecho 'Hakuna'.endsWith('na') === true

t.replace(tr, novo) método que substitui um trecho por algo novo (apenas primeira ocorrência) 'ana'.replace('a', 'e') === 'ena'

t.replaceAll(tr, n) método que substitui um trecho por algo novo (todas as ocorrências) 'ana'.replaceAll('a', 'e') === 'ene'


Exemplos que usam métodos de strings (1/2)


Exemplos que usam métodos de strings (2/2)


Métodos comuns de vetores (1/3)


Métodos comuns de vetores (2/3)

vetor.push(elem) método que insere elem ao final do vetor ['a'].push('b') === ['a', 'b']

vetor.pop() método que remove último elemento ['a', 'b'].pop() === ['a']

vetor.indexOf(elem) método que retorna o índice do elemento no vetor (ou -1) [5,6,7].indexOf(5) === 0 [5,6,7].indexOf(2) === -1


Métodos comuns de vetores (3/3)

vetor.reverse() método que inverte a ordem dos elementos [1,2,3].reverse() === [3,2,1]

vetor.sort() método que coloca os elementos em ordem [8,1,-6].sort() === [-6,1,8] ['f', 'b'].sort() === ['b', 'f']

vetor.join(spacer) método que retorna uma string juntando os elementos ['fl', 'rb'].join(' ') === 'fl rb' ['fl', 'rb'].join('+') === 'fl+rb'


Exemplos com métodos de vetores (1/2)

  1. Função que busca por um elemento específico
    function busca(vetor, elem) {
      return vetor.indexOf(elem);
    }
    
  2. Função que adiciona no vetor apenas se elemento ainda não estiver nele
    function adicionaSemDuplicar(vetor, elem) {
      if (busca(vetor, elem) === -1) {
        vetor.push(elem);
      }
    }
    

Exemplos com métodos de vetores (2/2)


Referências

  1. Capítulo 2 do livro “JavaScript: The Good Parts”
  2. Mozilla Developer Network (MDN)

Erros comuns durante a prática


01. Falhar no arejamento


02. Falhar na indentação


03. Nomes de variáveis sem significado


04. Nomes de variáveis específicos demais


05. Esquecer console.log, alert


06. Esquecer que vetor começa de 0


07. Desnecessário passar tamanho do vetor


08. Deixar de parametrizar


09. Esquecer de retornar o resultado