Tema 01 - Fundamentos Do Javascript
Tema 01 - Fundamentos Do Javascript
Noite Manhã
1º tempo 18h40 - 19h40 7h40 - 8h40
2º tempo 19h50 - 20h50 8h50 - 9h50
3º tempo 21h - 22h 10h - 11h
História do JavaScript
Programação JavaScript
• História
• https://dev.to/dboatengx/history-of-javascript-how-it-all-began-92a
• https://medium.com/@sahilali/the-evolution-of-javascript-a-complete-javascript-history-timeline-c5d781346267
• https://www.linkedin.com/pulse/history-javascript-its-evolution-suleman-elahi
• https://hackernoon.com/two-decades-of-transformation-a-timeline-of-how-javascript-revolutionized-software-development
• Diferenças nas sintaxes
• https://webreference.com/javascript/basics/versions/
• Linguagem pura
• https://www.freecodecamp.org/portuguese/news/o-manual-de-javascript-para-iniciantes/
• DOM
• https://www.linkedin.com/pulse/role-javascript-modern-web-development-charles-paul-udcbc
• https://www.dynamicwebtraining.com.au/blog/javascript-dom-methods
• https://www.hongkiat.com/blog/dom-manipulation-javascript-methods/
• https://www.javascripttutorial.net/javascript-dom/
• Exercícios
• https://www.includehelp.com/code-snippets/an-introduction-to-javascript-vanilla-js.aspx
• Loop
• https://www.freecodecamp.org/news/javascript-for-loops/
• https://levelup.gitconnected.com/loops-made-super-simple-for-javascript-beginners-8b176a60b8b3
Alguns IDEs
• Online: • Android:
– https://www.typescriptlang.org/play – Spck Code Editor
– https://www.onlinegdb.com/ – QuickEdit
– https://www.programiz.com/javascri
pt/online-compiler/
• Google Chrome
– Pressione: CTRL + SHIFT + J
Nosso primeiro código
// Mostre quantos gatos quiser!
• Vamos criar um programa var mostraGatos = function (quantidade) {
Desafio: Compatibilidade do navegador SPAs e o Virtual DOM: A Paradigm Shift (2005 - 2010)
Os primeiros desenvolvedores de JavaScript lidavam com os diversos mecanismos Em meados dos anos 2000 inaugurou a era dos aplicativos de página única (SPAs),
de renderização de diferentes navegadores, muitas vezes levando a um onde o JavaScript desempenhou um papel de protagonista. No entanto, a
comportamento inconsistente e a sessões de depuração frustrantes. manipulação constante do Modelo de Objetos Documentos (DOM) levou a gargalos
de desempenho e ineficiências.
Solução: AJAX e a Web 2.0
Para superar os problemas de compatibilidade do navegador, os desenvolvedores Desafio: Manipulação do DOM
se voltaram para linguagens de script do lado do servidor, como o PHP, em conjunto Atualizações frequentes do DOM resultaram em um desempenho lento da interface
com JavaScript e XML (AJAX - Asynchronous JavaScript and XML). Essa do usuário, dificultando a criação de experiências ricas e interativas.
combinação inovadora permitiu atualizações de conteúdo dinâmico sem a
necessidade de recargas de página inteira, oferecendo interações mais suaves do Solução: Virtual DOM e React
usuário. Use o React, um divisor de águas apresentado pelo Facebook. Ao implementar um
DOM Virtual, o React minimizou as manipulações DOM reais, melhorando o
// Example AJAX Request
desempenho e proporcionando uma experiência de usuário mais suave.
fetch('https://api.example.com/data')
.then(response => response.json()) // Example React Component
.then(data => { import React, { useState } from 'react';
// Process data
}); function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div> );
}
Fonte: https://hackernoon.com/two-decades-of-transformation-a-timeline-of-how-javascript-revolutionized-software-development
Node.js e Backend Synergy (2010 - 2015) TypeScript e a busca de uma tipagem forte (2015 - 2020)
O domínio do JavaScript não se restringia ao front-end. Os desenvolvedores Embora a flexibilidade do JavaScript tenha empoderado o rápido desenvolvimento,
procuraram uma linguagem unificada para o desenvolvimento frontend e backend, também introduziu desafios relacionados à segurança e à capacidade de
levando à ascensão do Node.js. manutenção do tipo.
Fonte: https://hackernoon.com/two-decades-of-transformation-a-timeline-of-how-javascript-revolutionized-software-development
Fontes: https://hackernoon.com/two-decades-of-transformation-a-timeline-of-how-javascript-revolutionized-software-development
https://medium.com/@sahilali/the-evolution-of-javascript-a-complete-javascript-history-timeline-c5d781346267
No relatório Octoverse 2021 do GitHub,
hoje existem mais repositórios de código
JavaScript do que qualquer outro idioma,
e esse número está em ascensão.
Fundamentos do JavaScript
Programação JavaScript
Introdução
• Usamos JavaScript principalmente para criar:
sites da web
aplicações web
aplicações do lado do servidor (server-side), usando Node.js
"Às vezes é difícil separar o JavaScript dos recursos do ambiente em que ele é
usado"
"Às vezes é difícil separar o JavaScript dos recursos do ambiente em que ele é
usado"
– P. ex. o comando console.log() que você encontra em muitos códigos, não é JavaScript
– Em vez disso, ele faz parte da vasta biblioteca de APIs que o navegador nos fornece
Vamos começar falando sobre JavaScript, a linguagem. Sem complicar seu processo de
aprendizagem com coisas que estão fora dele, fornecidas por ecossistemas externos
5 conceitos iniciais
• espaços em branco
• maiúsculas e minúsculas
• literals
• identificadores
• comentários
Espaços em Branco
• Em teoria, espaços e quebras de linha podem ser
acrescentados do modo que você desejar
• Na prática, você provavelmente manterá um estilo bem
definido, aderindo ao que as pessoas comumente usam
– Poderá aplicar isso usando um linter ou uma ferramenta de estilo, como
o Prettier
– Pode-se usar por exemplo, 2 caracteres de espaço para cada identação
Maiúsculas e minúsculas
• O JavaScript diferencia maiúsculas e minúsculas
– Uma variável chamada something é diferente de Something
– O mesmo vale para qualquer identificador
Literals
5
• Definimos literal como um 'Test'
valor que está escrito no true
código-fonte ['a', 'b']
{color: 'red', shape: 'Rectangle'}
– P. ex., um número, uma string,
um booleano, ou construções
mais avançadas, como objetos
ou arrays literais
Identificadores
Test
• Identificador é uma sequência
test
de caracteres usada para TEST
identificar variáveis, funções _test
ou objetos Test1
– Pode começar com letra, cifrão $ $test
ou sublinhado _ (usado para
referências a elementos do
DOM), e pode conter dígitos
– Alguns nomes são reservados
para uso interno do JavaScript,
não podendo ser usados como
identificadores
Comentários
// um comentário
• Uma das partes mais importantes
true //outro comentário
de qualquer programa, em
qualquer linguagem de
programação!!! /* Aqui temos
um tipo de
– Permitem anotar o código e comentário
acrescentar informações importantes
que, de outro modo, não estariam */
disponíveis para outras pessoas (ou
para nós mesmos) durante sua leitura
Ponto-e-vírgula
• Cada linha de um programa em JavaScript é terminada
opcionalmente com um ponto-e-vírgula
– O interpretador do JavaScript geralmente introduz pontos-e-vírgulas
para você
– É um fato controverso; uma sugestão é, uma vez que você escolha
colocar ou não, siga a sua preferência pessoal, p. ex., evitar pontos-e-
vírgulas
Valores
• Uma string hello é um valor • O tipo é a espécie do valor,
• Um número (number), como sua categoria
12, também é um valor – Quando precisamos de uma
referência a um valor, nós o
atribuímos a uma variável, para
▪ hello e 12 são valores; acessarmos posteriormente por
▪ string e number são os meio do nome da variável
tipos desses valores
Variáveis
• Uma variável é um valor atribuído a um identificador, para
que você possa referenciá-lo e usá-lo posteriormente no
programa
• Isso ocorre porque o JavaScript é fracamente tipado, um
conceito que você vai ouvir falar com frequência
– Uma variável deve ser declarada antes que você possa utilizá-la
Modos de declaração de variáveis
• Primeiro modo – const • Você não pode fazer isto:
const a = 0
– Define uma constante a um
valor, a referência não pode ser a = 1
alterada – Erro (TypeError: Assignment to
constant variable.)
– Não significa que o valor não
pode ser alterado – significa que
não pode ser reatribuído • Variáveis const devem ser
inicializadas no momento da
const a = 0 declaração
const a = 1, b = 2 const a = 0
variável em JavaScript
• Hoje em dia, uma base de
código moderna
provavelmente só usará
const e let
– Leitura opcional:
https://flaviocopes.com/javascript-
difference-let-var/
Tipos de variáveis
• Variáveis não são tipadas • Tipos primitivos
– Uma vez que você atribua um valor de ‒ números
algum tipo a uma variável, você pode ‒ strings
reatribuir posteriormente a variável para ‒ booleanos
receber um valor de qualquer outro tipo
‒ símbolos
sem problemas
‒ Tipos especiais: null e undefined
• Existem duas espécies principais de
tipos • Objetos
– Qualquer valor que não seja de um tipo
primitivo
– Possuem propriedades e também têm
métodos que podem agir sobre essas
propriedades
Expressões e operadores
Expressões Operadores Operadores de comparação
Primárias 2 Atribuição (=) let b = 2 Desigualdade < (menor que)
0.02 <= (menor ou igual a)
Adição (+) const tres = 1 + 2
'something' > (maior que)
1 / 2 Subtração const dois = 4 – 2 >= (maior ou igual a)
Aritméticas
i++ Divisão (/) const resultado = 20 / 5 Igualdade === (igualdade)
i * 2 !== (desigualdade)
Resto (%) const resultado = 20 % 5
String 'Uma'+'string'
Multiplicação (*) 1 * 2 Obs.: Evitar == e != p/
Lógicas a && b evitar problemas sutis
a || b Exponencial (**) 8 ** 2
!a
Regras de precedência
* / % Multiplicação / Divisão / Resto
+ - Soma / Subtração
= Atribuição
let nome = 'Alex'
let nome2 = "Smith"
const pontos=12
console.log(nome+" "+nome2,pontos)
var a = 25;
var b = 2.0;
function mostraValor(input1, input2) {
console.log("Este eh input 1: " + input1 + " este eh " + input2 +
" input2");
}
mostraValor(a, b);
Condicionais
• Condicional: Uma declaração if (se) faz o programa seguir um
ou outro caminho, dependendo do resultado de uma expressão
if (true) {
//faça algo
}
if (true) facaAlgo()
if (false) {
//faça algo (? nunca ?)
}
Emprego do if em um bloco (o espaço Opcionalmente, se tiver uma única
entre as chaves usado para agrupar uma instrução para executar após as
lista de diferentes instruções) condicionais, você poderá omitir o bloco
Condicionais
• Você pode fornecer uma segunda parte para a instrução if:
else (caso contrário)
if (true) { if (a === true) {
//faça algo //faça algo }
} else { else if (b === true) {
//faça outra coisa //faça outra coisa
} } else {
//faça uma terceira coisa se nenhuma das
outras opções for válida
}
Laços de repetição
• Com um laço de repetição, podemos automatizar e repetir um
bloco de código quantas vezes quisermos que ele seja
executado
• Podemos fazer isso de 3 maneiras:
• while
• for
• for..of
Laços de repetição - While
1. Usando while, adicione uma condição após a palavra-chave while
2. Depois, forneça um bloco que é executado até que a condição seja
avaliada como true
const list = ['a', 'b', 'c']
let i = 0
while (i < list.length) {
console.log(list[i]) //value
console.log(i) //index
i = i + 1
}
Array
• Um array é uma coleção de elementos.
– Arrays em JavaScript não são um tipo próprio.
– Arrays são objetos.
• Podemos inicializar um array vazio de 2 maneiras diferentes
(por notação literal e palavra-chave, respectivamente):
const a = []
const a = Array()
Array
• Você pode pré-preencher o • Um array pode conter
array usando esta sintaxe: qualquer valor, mesmo
valores de tipos diferentes:
const a = [1, 2, 3]
const a = Array.of(1, 2, 3)
const a = [1, 'Flavio', ['a', 'b']]
Array
• Podemos criar arrays const matriz = [
[1, 2, 3],
multidimensionais, que
[4, 5, 6],
possuem aplicações muito
[7, 8, 9]
úteis (por exemplo, uma ]
matriz):
matriz[0][0] //1
matriz[2][0] //7
Array
• Acesse qualquer elemento do • Uma sintaxe para inicializar um
array, fazendo referência ao seu novo array com um conjunto de
índice que inicia a partir de zero: valores; primeiro inicializa um
array de 12 elementos e então
a[0] //1 preenche cada elemento com o
a[1] //2 número 0:
a[2] //3
Array(12).fill(0)
Array
• Você pode obter o número de • Definir o comprimento do array:
elementos no array, verificando sua – Se você atribui um número maior do que
propriedade length (tamanho): a capacidade atual do array, nada
acontece.
– Se você atribui um número menor, o
const a = [1, 2, 3] array é cortado naquela posição:
a.length //3
const a = [1, 2, 3]
a //[ 1, 2, 3 ]
a.length = 2
a //[ 1, 2 ]
Array
• Adicionar um elemento ao final de um array com o método push():
a.push(4)
a.unshift(0)
a.unshift(-2, -1)
Array
• Para remover um item do final de um array:
a.pop()
a.shift()
Array
• Unir vários arrays: • Operador spread(...):
const a = [1, 2]
const a = [1, 2]
const b = [3, 4]
const b = [3, 4]
const c = a.concat(b) //[1,2,3,4]
const c = [...a, ...b]
a //[1,2]
c //[1,2,3,4]
b //[3,4]