Módulo 03: Lógica de Programação E Javascript Básico
Módulo 03: Lógica de Programação E Javascript Básico
pág. 1
Primeiramente temos o problema: O candeeiro não acende. A seguir temos
verificações, e para cada verificação uma ação diferente. Os diferentes finais
dependem do resultado das verificações.
pág. 2
Redes sociais usam algoritmos para recomendar o que você assiste e exibir
vídeos de acordo com sua preferência.
pág. 3
A principal diferença entre hardware e software é que o hardware é a
parte física do computador, enquanto o software é a parte lógica. O
hardware é tangível e pode ser visto e tocado, enquanto o software é
intangível e não pode ser tocado fisicamente.
Outra diferença importante é que o hardware é construído e projetado
para desempenhar funções específicas, enquanto o software é
programado para executar tarefas específicas em cima do hardware. Em
outras palavras, o hardware fornece a plataforma para o software
funcionar.
Em resumo, a lógica de programação é a técnica que utilizamos para
criar algoritmos para os nossos softwares por meio das linguagens de
programação. Uma vez que nosso software está programado,
conseguimos para essas instruções para nosso computador, que
processará essas informações em seu hardware resultando em um
sistema completo que permita a interação do usuário com a máquina.
pág. 4
➢ Como a máquina entende o código que criamos?
R: O nosso código fonte é composto do conjunto de pastas e arquivos
que criamos em determinado projeto. Esse código todo é escrito com
linguagens de alto nível. Para que esse código possa ser lido pela
máquina é necessário converte-lo para um código fonte de máquina.
Isso é possível de duas formas principais:
1. Compilação: Nosso código é convertido em um ou mais arquivos que
podem ser compreendidos pela máquina. Esses arquivos ficam
salvos e são executados posteriormente. Essa compilação acontece
a partir de um compilador, que é um software responsável por essa
conversão.
2. Interpretação: A medida que o código é compilado ele já vai sendo
executado sem que haja necessidade de salvar antes. Isso acontece
por meio de um software interpretador.
Um exemplo de linguagem compilada é a linguagem C. Um exemplo de
linguagem interpretada é a linguagem JavaScript.
VARIÁVEIS
Agora iremos começar a estudar sobre variáveis. Esse é o primeiro tópico
que vamos estudar já usando a linguagem JavaScript, porém vale lembrar
que variáveis não é um conceito exclusivo de JavaScript, mas de todas as
linguagens de programação de um modo geral. Podem haver diferenças
entre uma linguagem ou outra mas o conceito é o mesmo. É muito
importante aprender o que são, como declarar e como utilizar variáveis pois
sem elas, não é possível criar um algoritmo. Primeiramente, crie uma pasta
para as próximas aulas com o nome que quiser e em seguida abra ela no VS
Code.
Criaremos dois arquivos: index.html e scripts.js
pág. 5
No arquivo index.html, crie a estrutura inicial do HTML e faça o link do
arquivo script.js.
Note que estamos usando a tag <script> e estamos atribuindo um src à ela,
indicando o caminho do nosso arquivo script.js. Outra coisa importante é
que nós estamos colocando a tag de script no dentro de <body> lá no final
dela e não entre as meta tags como fazemos com o css por exemplo,
porquê? É recomendado colocar a tag <script> ao final da tag <body>
porque o navegador começa a renderizar a página HTML a partir do início
do código e a execução de scripts pode bloquear o processo de
renderização. Colocar o script no final do body garante que todo o conteúdo
pág. 6
seja carregado e exibido antes de ser executado, evitando atrasos na
renderização da página. Além disso, ao colocar o script no final da página,
pode-se garantir que todo o conteúdo esteja disponível antes que o script
seja executado, evitando erros de referência de elementos que ainda não
foram carregados.
Agora, todo o código JavaScript escrito dentro de script.js passará a ser
executado pelo no HTML. Vamos ao primeiro exemplo:
Vá no arquivo script.js e escreva a seguinte função:
pág. 7
Sempre que a página for atualizada, o alerta será exibido. Você pode testar
com outra mensagem por exemplo:
Note que entre ( ) estamos colocando uma string, então a frase precisa estar
entre aspas, não importa se são aspas simples ou duplas, tanto faz.
Salve no VS e atualize a página no navegador:
pág. 8
Esse foi apenas um teste para você ver como funciona o JavaScript na
prática. Agora vamos ver sobre os tipos de variáveis existentes.
➢ var – var é a forma mais antiga de se declarar variáveis em JavaScript.
Hoje em dia usa-se let. Uma variável declarada como var pode ser
redeclarada, ou seja, um novo valor pode ser atribuído à ela. Não se
preocupe, veremos na prática.
➢ let – let é a forma atual de se declarar variáveis no JavaScript.
Semelhante a var, também pode ser redeclarada. Ambas, var e let,
podem ser utilizadas, porém let é a forma mais adequada e está de
acordo com as novas atualizações do EcmaScript*
➢ const – diferente de var e let, const é de constante, ou seja, não pode
ser redeclarada, seu valor inicial é fixo.
*EcmaScript é uma linguagem de programação criada pela organização
Ecma International. Ela é mais conhecida por ser a linguagem base do
JavaScript, usada principalmente para programar para a web. O objetivo do
EcmaScript é fornecer uma especificação padrão para a linguagem de
programação, permitindo que diferentes implementações da linguagem
sejam compatíveis entre si. Desde sua criação em 1997, várias versões do
EcmaScript foram lançadas, cada uma com novos recursos e melhorias. A
versão mais recente é a EcmaScript 2022, que adicionou novos recursos
como o operador "pipeline" e melhorias na manipulação de strings.
QUAL A DIFERENÇA ENTRE VAR E LET?
Em JavaScript, tanto a palavra-chave var quanto let são usadas para declarar
variáveis. No entanto, há diferenças importantes entre elas:
pág. 9
1. Escopo de bloco: quando uma variável é declarada com var, ela tem
escopo de função, o que significa que pode ser acessada em qualquer
lugar dentro da função em que foi declarada. Já as variáveis
declaradas com let têm escopo de bloco, o que significa que elas só
podem ser acessadas dentro do bloco em que foram declaradas.
2. Hoisting: variáveis declaradas com var são "içadas" (hoisting) para o
topo do escopo em que foram declaradas, o que significa que podem
ser acessadas antes mesmo de serem declaradas. Já as variáveis
declaradas com let não são içadas e só podem ser acessadas depois
de serem declaradas.
3. Reatribuição: variáveis declaradas com var podem ser reatribuídas a
qualquer momento, enquanto as variáveis declaradas com let só
podem ser reatribuídas dentro do mesmo escopo em que foram
declaradas.
Em resumo, o uso de let é mais seguro e recomendado, pois ajuda a evitar
erros comuns de escopo e pode levar a um código mais legível e fácil de
manter.
Não se preocupe. É bastante teoria, mas vamos ver tudo isso na prática.
pág. 10
Observe que primeiro declaramos a variável usando let, damos um espaço
e damos um nome para essa variável, pode ser qualquer um, no nosso
exemplo o nome dessa variável é frase. Sobre nomes de variáveis é
importante duas considerações:
1. O nome da variável precisa fazer sentido em relação ao seu valor. Não
seria adequado eu ter uma variável com o nome frase e valor dela ser
um número por exemplo. É possível? Sim, mas não é adequado.
Acostume-se com a ideia de que no exercício da profissão, outras
pessoas irão ler o seu código e quando elas se depararem com uma
variável, só de ler o nome da variável ela já deve saber ou no mínimo
imaginar do que se trata o seu valor e qual a sua função naquele
código. Isso é uma boa prática.
2. Vamos utilizar uma determinada forma de escrita para os nomes das
variáveis chamada CamelCase. CamelCase é uma convenção de
nomenclatura em programação que consiste em escrever palavras
compostas ou frases sem espaços, separando-as por maiúsculas. A
primeira palavra começa com letra minúscula e as palavras
subsequentes começam com letra maiúscula.
pág. 11
Veja que fica com traço vermelho embaixo indicando erro.
Começar com número:
O nome da variável pode conter números, mas não pode começar com
números, entendeu? Veja:
Outros caracteres especiais que não sejam esses, não serão permitidos.
Esses caracteres podem ser colocados tanto no início como no meio delas.
pág. 12
Foi importante fazer esses apontamentos para que você já inicie no
JavaScript com boas práticas. Voltando para o nosso exemplo, vamos criar a
variável frase assim:
pág. 13
Você já está começando a entender sobre a utilidade de uma variável, não
é? Imagine que nós tivéssemos que colocar essa frase em dezenas de partes
do nosso código. Teríamos que digitar a frase toda, frase por frase, que
trabalheira!?
Com a frase armazenada em uma variável, escrevemos ela uma única vez e
é só chamar a variável pelo seu nome que teremos acesso ao valor que está
armazenado nela.
Existe uma outra forma de visualizarmos isso que é usando a função
console.log( ).
pág. 14
Agora navegue até a aba console.
Você já deverá ver a frase aqui. Caso não apareça é só atualizar a página
novamente. Acostume-se a usar o console pois aqui podemos testar coisas,
ver mensagens de erro e muitas outras coisas necessárias na hora do
desenvolvimento.
Mais uma coisa que precisamos saber sobre variáveis é que são levadas em
consideração letras maiúsculas e minúsculas. Então se criarmos duas
variáveis assim:
pág. 15
Ao atualizar a página aparecerá no console assim:
Para redeclarar uma variável basta escreve-la no código com o mesmo nome
e dar a ela um outro valor:
pág. 16
Atualize a página e verifique o que aparece no console:
pág. 17
Se você atualizar a página verá que no console aparecerá:
pág. 18
No console apareceria no console a última redeclaração antes da função ser
executada:
pág. 19
Note que trocamos let por const. Isso irá funcionar? SIM! Atualize a página
e veja no console.
Agora, se tentarmos redeclarar essa variável:
pág. 20
const. O interessante é que o console nos dá exatamente a linha do código
que está causando esse erro:
Tudo isso fará sentido para você ao longo do curso. Você está apenas
começando.
pág. 21
TIPOS DE DADOS
Estamos estudando lógica de programação utilizando JavaScript. Nesse
momento, vamos aprender sobre os tipos de dados. Não significa que os
tipos de dados que veremos aqui são exclusivos do JavaScript. Na verdade,
veremos os tipos principais, que também são utilizados em outras
linguagens. Por hora esse conhecimento será suficiente. O primeiro tipo de
dado que veremos é STRING.
No VS Code, vamos apagar os exemplos que usamos anteriormente, dentro
no arquivo script.js, e vamos criar uma nova variável const que servirá
apenas para exemplificar o que é uma string.
pág. 22
A única coisa é que eu não posso começar com aspas simples e terminar
com aspas duplas nem vice-versa. A string precisa começar e terminar com
o mesmo tipo de aspas.
Observe que a string está envolvida por aspas simples e o trecho do texto
com aspas duplas. Então começamos com aspas simples, pois na língua
portuguesa usa-se aspas duplas. Se colocássemos aspas duplas em ambas
não daria certo. Veja:
pág. 23
Caso você não precise usar aspas no meio da string você pode escolher qual
tipo de aspas quer usar para envolver a string.
CONCATENANDO STRINGS:
Concatenar é juntar, somar. Podemos fazer isso com strings utilizando o
símbolo + que também é utilizado para soma. Vamos criar no nosso arquivo
script.js duas strings distintas e depois vamos concatena-las:
pág. 24
Veja que ficou sem o devido espaçamento, porquê? Isso acontece porque
ao concatenar strings o JavaScript literalmente junta uma na outra e como
não colocamos nenhum espaço em nenhuma das duas strings que criamos
ficou dessa forma. Como podemos resolver?
Basta adicionar um espaço na string. Tanto faz adicionar um espaço ao final
de primeiraString ou no início de segundaString. Escolha uma das duas!
OU
pág. 25
Bem, remova o espaço colocado na string que você alterou e adicione um
espaço vazio na função console.log usando o concatenador +
pág. 26
E como podemos fazer a concatenação de strings usando o método
template string?
Vamos usar a sintaxe: ${ }
Cifrão e chaves podem conter o valor de variáveis. Lembra que temos uma
variável cujo valor é uma string “Programador”? Vamos então concatenar
as strings assim:
pág. 27
Vamos criar outro exemplo concatenando agora as duas variáveis que
criamos?
Fique à vontade para criar seus próprios exemplos, pratique, seja curioso!
pág. 28
O tipo number nada mais é do que um número, um valor numérico que
pode ser calculado em qualquer operação matemática. Calma, não vamos
estudar conceitos avançados de matemática em programação, isso ´´e um
mito. Mas eventualmente podemos nos deparar com operações simples
dentro de um código. Vamos primeiro ver a sintaxe:
O tipo number, diferentemente do tipo string, não fica envolvido por aspas.
Caso estivesse, seria considerado como um caractere de texto. Veja:
Dessa forma, o número 3 faria parte de uma string, portanto não poderia
ser utilizado em uma soma ou subtração por exemplo. Vamos ver na
prática? Seguindo a mesma lógica anterior, criaremos duas constantes com
valor do tipo string e vamos tentar soma-las:
pág. 29
Agora, atualize a página no navegador e veja qual resultado aparece no
console.
pág. 30
O JavaScript é capaz de realizar diversas operações matemáticas, contanto
que o tipo de dado calculado seja NUMBER
Da mesma forma que somamos nesse exemplo com números, poderíamos
subtrair, multiplicar e dividir, mas aprenderemos sobre os operadores
aritméticos mais pra frente.
Existe uma forma bem legal de saber qual é o tipo de dado armazenado em
uma variável, caso você esteja em dúvida. Podemos usar typeof.
pág. 31
Agora, se envolvermos o número com aspas
pág. 32
Outra forma de adicionarmos casas decimais é colocando o número seguido
de e + número de casas decimais. Imagine que você queira 10 casas
decimais, na prática ficaria assim:
pág. 33
Bom, não tem muito segredo no tipo number. Por hora, o que vimos já é
suficiente. Mais pra frente veremos sobre operações matemáticas com
números. Agora veremos outro tipo de dado que é o: NULL
Em JavaScript, o valor null é usado para representar a ausência intencional
de qualquer objeto válido. É considerado um tipo de dado primitivo e é
frequentemente usado para indicar que uma variável não tem um valor
definido ou que um objeto não possui uma propriedade específica.
Exemplo:
O que temos aqui é uma variável com valor nulo. Não significa que essa
variável tem ausência de valor. Ela tem um valor nulo, ou seja, um valor que
ainda não foi especificado.
Imagine que você está em um e-commerce e ainda não adicionou nada no
carrinho. Teoricamente essa compra não tem um valor definido, então o
valor inicial é nulo. Caso estivéssemos desenvolvendo esse e-commerce,
não poderíamos deixar essa variável sem valor, pois seria considerado pelo
JavaScript como undefined (outro tipo de dado que veremos a seguir).
Então, deixamos o valor como null.
UNDEFINED: Diferentemente de null, undefined é um valor inexistente. Null
é um valor existente, porém nulo. Undefined é indefinido, ou seja,
inexistente.
pág. 34
Teste você mesmo: declare uma variável e não atribua à ela nenhum valor
e em seguida use console.log() para tentar acessar o seu valor:
Veja no console:
pág. 35
Outro tipo de dado muito utilizado é o: BOOLEAN
o tipo boolean pode-se dizer que é o verdadeiro ou falso do JavaScript. No
caso, esse tipo só pode ter dois valores: true ou false.
Veja no exemplo:
Veja no navegador:
pág. 36
Imagine que no desenvolvimento do site de uma faculdade você crie uma
variável que seja responsável por separar alunos formados e não formados.
Poderíamos usar um boolean:
Se o aluno for formado o valor da variável será true, caso não for o valor
será false.
Uma outra situação seria a verificação de alunos faltosos em uma lista de
chamada. Poderíamos armazenar o valor em uma variável:
Nesse exemplo, não houve nenhum aluno faltoso. Mas como assim o valor
é 0, não deveria ser false? Bem, existem alguns dados que também possuem
valores booleanos. O zero por exemplo, além de ser do tipo number, ele
também retorna um valor booleano, que no caso é false. Outros dados que
também retornam um valor booleano false são o null e o undefined que
vimos anteriormente, NaN (not a number – traduzido é: não é um número)
e uma string vazia (‘ ’). Todos esses dados retornariam false em uma
verificação booleana.
pág. 37
Pode ser que você não esteja entendendo bem o porque colocarmos esses
dados ao invés de simplesmente atribuir false. Isso tudo fará mais sentido
pra você quando formos estudar sobre condicionais nas próximas aulas. Por
hora, apenas anote tudo.
Da mesma forma que temos itens que retornam false, também temos itens
que retornam true, a saber:
➢ String com pelo menos um caractere: “frase”, “ “. Espaço já é
considerado como caractere.
➢ Qualquer número que não seja zero inclusive números negativos,
inteiros ou não.
FUNÇÕES
Dando continuidade aos estudos de lógica de programação, iremos
aprender sobre funções, objetos e arrays. Esses também são tópicos
comuns em várias linguagens de programação, no nosso caso, veremos
como se aplicam na linguagem JavaScript. Começaremos aprendendo sobre
funções.
Em programação, uma função é um bloco de código que executa uma tarefa
específica e pode ser chamado em diferentes partes de um programa. São
muito necessárias para a organização do código e com elas podemos
implementar várias funcionalidades.
Como declarar uma função? A forma mais comum é a seguinte:
pág. 39
Agora que já aprendemos como declarar uma função e como inserir
comentários em JavaScript, vamos ver na prática como funciona.
Adicione um console.log( ) dentro da função com uma mensagem qualquer:
pág. 40
Basicamente é só chamar pelo nome da função e adicionar parênteses ao
final. Na parte de cima estamos declarando a função e o bloco de códigos
que ela executa e logo abaixo estamos chamando essa função. Agora, se
você salvar no VS Code e atualizar a página no navegador, verá que a
mensagem apareceu no console.
pág. 41
Além de exibir uma mensagem no console, a função agora também exibirá
uma mensagem para o usuário. Salve no VS Code e atualize a página no
navegador.
pág. 42
Explicando:
1. A função possui um parâmetro que no caso é uma mensagem.
2. Logo, a função espera receber um argumento quando essa função for
chamada.
3. Quando a função é chamada e o argumento é passado, a função
recebe esse argumento e transfere ele para o bloco de códigos que
ela está executando.
4. O argumento recebido pela função é aproveitado para exibir a
mensagem no console. Quando eu uso o mesmo nome do parâmetro
no código (mensagem), significa que o valor que será recebido ali será
o mesmo valor usado por aquela tarefa.
Bom, agora vamos chamar a mesma função 3 vezes e para cada uma das
vezes que chamarmos a função, passaremos um argumento diferente. Veja:
pág. 43
Isso torna a função dinâmica. Perceba que no primeiro momento
estabelecemos qual parâmetro aquela função espera receber e a cada
chamada dessa função passamos um argumento diferente. Por isso, a cada
execução do bloco de código dentro daquela função foi recebido e
aproveitado um valor diferente.
Mas o nome do parâmetro precisa ser mensagem mesmo? Caso fosse outro
nome não funcionaria? A resposta é que não precisa ser necessariamente o
nome que usamos no exemplo, poderia ser qualquer outro nome. Olha só:
pág. 44
Assim já não funcionaria, pois o nome do parâmetro que estou tentando
aproveitar no console.log( ) simplesmente não foi declarado pela função.
É possível adicionar mais de um parâmetro em uma mesma função? SIM!
Como fazemos isso? Separando os parâmetros por vírgula dessa forma:
pág. 45
Note que ao passar os argumentos, também devemos separá-los com
vírgula. Os argumentos devem estar na mesma ordem que os parâmetros,
então se o primeiro parâmetro da função é name, o primeiro argumento
deve ser correspondente ao nome do usuário para que o JavaScript possa
associar o argumento recebido com o parâmetro correto. Atualize a página
e veja o resultado no console.
RETORNO DE FUNÇÕES
Além de parâmetros e argumentos, nossas funções também podem
retornar algo. Isso é possível utilizando o return. Toda função tem um
retorno padrão: undefined. Caso queira especificar esse retorno deve-se
adicionar o return ao final da função e declarar qual o retorno esperado.
Imagine que precisamos que a nossa função retorne algum resultado após
sua execução e que nós queremos visualizar esse resultado. Faremos isso
com números para ficar mais fácil de entender.
pág. 46
A função agora espera receber dois parâmetros, que são dois números.
Lembrando que podemos dar qualquer nome aos parâmetros, mas procure
dar nomes que façam sentido, para que outras pessoas e até você mesmo
no futuro possar olhar e entender do que se tratam tais parâmetros e o que
é esperado como argumento. Veja que a função tem o return e ao lado o
que deve ser retornado, que no caso é a soma dos valores recebidos pela
função através dos argumentos passados em sua chamada.
Agora vamos adicionar um console.log( ) que chama essa função e passa
dois números como argumentos para os parâmetros:
pág. 47
E se eu apagar o return e deixar a função sem nada? O resultado será
undefined, pois não há nenhum código sendo executado e nenhum retorno
foi especificado.
Veja que usamos o método template string para concatenar string com
variáveis. Envolvemos com ` ` crases a string, inserimos o texto
normalmente com os seus devidos espaços e no lugar das variáveis usamos
${ } cifrão e chaves para apresentar o valor delas. No final estamos
realizando a soma dos valores das duas variáveis. Note que o símbolo + no
texto da string é amarelo, pois ali é apenas um caractere de texto.
pág. 48
Mas dentro de chaves, o símbolo + tem a cor lilás, pois é considerado um
operador aritmético de soma mesmo.
Pratique template strings, crie seus próprios exemplos, é assim que você vai
fixar todo o conteúdo passado.
É normal quanto temos o primeiro contato com funções sentir certa
dificuldade, como se desse um nó na cabeça. Vá com calma, revise a aula
quantas vezes for necessário até que você entenda como as coisas
funcionam e qual lógica por detrás do código que está sendo criado.
Estamos aprendendo lógica de programação já usando JavaScript e nessa
aula aprendemos o suficiente sobre funções. Funções são muito
importantes em qualquer linguagem, por isso você deve entender bem os
conceitos e principalmente praticar através de exemplos, seja os vistos na
aula, seja os que você mesmo criar. Caso tenha aprendido e conseguido
reproduzir tudo que foi passado, já está apto para seguir em frente.
pág. 49
OBJETOS
Objetos são um conjunto de informações compostas por chaves e valores.
Esses valores podem ser métodos ou propriedades. Métodos são valores
em forma de função e propriedades são valores em qualquer outro formato.
Como criamos um objeto em JavaScript?
Primeiramente devemos criar uma variável e abrir { } chaves:
pág. 50
mesma coisa, é interessante usar um objeto. Notou que sublinhado em
vermelho estão as chaves? Essa é a sintaxe. Primeiro coloca-se o nome da
chave e “ : “ dois pontos. Em seguida colocamos o valor daquela chave. No
caso do nosso exemplo, o valor da chave completeName é a string ‘Paulo
Victor Maia Borges’. Outro detalhe importante é separar as chaves por
vírgula. Podemos colocar quantas chaves quisermos dentro do objeto, mas
sempre separando por vírgula.
Poderíamos colocar tudo em uma linha só, mas imagine que esse objeto
pode ter varias chaves, então fica mais organizado da forma anterior. Vamos
adicionar mais algumas chaves.
Veja que agora o objeto contém quatro chaves. Os valores das chaves
podem ser de qualquer tipo. Por exemplo, o valor da chave age é do tipo
number, por isso não está envolvido com aspas. Já o valor das demais chaves
é do tipo string.
pág. 51
Agora nós temos uma chave cujo valor é uma função, ou seja, um método.
Mas por que não foi colocado o nome da função?
pág. 52
Como podemos acessar os valores das chaves dentro de um objeto?
Faremos isso utilizando dot notation. A tradução de dot é ponto. Então
basicamente vamos acessar os valores usando ponto. Na prática ficará mais
claro.
Vamos visualizar o nosso objeto criado dentro do console.
pág. 53
Se clicar no botão indicado pela flecha verá o objeto completo:
pág. 54
Se atualizarmos a página no navegador, veremos:
pág. 55
Se atualizarmos a página no navegador a função será executada e o alert
que está dentro dela será exibido em tela.
pág. 56
ARRAYS
Dando continuidade aos nossos estudos, veremos agora um pouco sobre
Arrays. O que são Arrays?
São listas que contém uma série de informações. Sendo uma lista única,
chamamos de vetor, sendo uma lista de outras listas chamados de matrix.
Como criar uma array? De forma bem parecida com o objeto, só que ao
invés de { } chaves, vamos usar [ ] colchetes.
pág. 57
Agora observe essa construção:
Aqui estamos criando uma matriz, que uma lista de outras listas. Então
vamos criar 3 listas dentro dessa lista que chamamos de matriz:
Veja que agora temos dentro da lista matriz outras 3 listas. Uma lista de
nomes, uma lista de marcas de carro e outra lista de profissões. Isso
chamamos de matriz. Poderíamos ter colocado uma ao lado da outra, sim!
Mas geralmente colocamos nessa organização para facilitar a leitura do
código. Só de olhar já é possível ver nitidamente a separação das listas e que
todas elas estão dentro de uma lista chamada matriz (o nome da variável
não precisa ser matriz, você pode dar outro nome se quiser, exemplo: const
lista = [ [ ],[ ],[ ] ].
pág. 58
Em um array, seja ele um vetor ou matriz, posso ter dados de qualquer tipo.
Posso criar um array de strings, pode ser de numbers, booleans e até de
objetos. Em uma mesma lista posso ter diversos tipos de dados ao mesmo
tempo:
pág. 59
Vamos dar um console.log( ) no primeiro array que criamos:
pág. 60
Perceba que já aparecem ali as posições de cada item. Também aparece o
tipo (array) e quantos itens tem esse array (length: 3)
Como eu faço para acessar um item especifico desse array? É só colocar a
posição do item entre [ ] colchetes após o nome do array. Dessa forma:
pág. 61
Aqui estamos acessando a lista que está na posição 1 (index 1), que no caso
é uma lista de marcas de carros, e dentro dessa lista, acessando o item que
está na posição 2 (index 2), que corresponde a marca Fiat. Salve no VS Code
e atualize a página:
pág. 62
OPERADORES ARITMÉTICOS
Agora começaremos a estudar os operadores aritméticos. Calma, não
precisaremos nos aprofundar em cálculos matemáticos complexos, então
não há porque se preocupar. No entanto, é importante estudar sobre os
operadores aritméticos pois eventualmente faremos uso de cálculos
simples em projetos futuros. Vamos para a prática ver como funcionam os
operadores aritméticos em JavaScript.
Primeiro, criaremos duas variáveis com valores numéricos:
pág. 63
Vamos usar template strings para praticarmos um pouco? Vamos mais uma
vez usar: console.log( ) para ver o resultado:
Aqui estamos usando template string para concatenar um texto com uma
variável, cujo valor resulta da soma das duas variáveis anteriores. Atualize a
página no navegador e veja:
pág. 64
O operador de multiplicação é representado por asterisco *
pág. 65
Até aqui o nosso console deverá estar assim:
pág. 66
Assim como temos um operador de incremento, também temos o operador
de decremento representado por dois sinais de subtração - -
pág. 67
Outro operador que temos é o módulo, que é representado pelo sinal %
Esse operador trará como resultado, o valor que sobra em uma divisão. Por
exemplo: Se formos dividir 20 / 6 , para que possamos dividir por um
numero inteiro o resultado será 3, porque é o máximo que conseguimos
multiplicar. De modo que 6x3 = 18. A diferença entre 18 e 20 é 2. Então:
pág. 68
O conceito matemático aqui é o conceito de potência. A potência é um
número que representa a multiplicação repetida de uma mesma
quantidade. O expoente é o número que indica quantas vezes essa
quantidade é multiplicada. Por exemplo, a potência 2^3 significa que o
número 2 é multiplicado por si mesmo três vezes: 2 x 2 x 2, resultando em
8. No caso do nosso exemplo fica: 6 (valor da variável numero1) exponente
2 (valor da variável numero2), que na matemática seria 6^2, ou seja, o
número 6 multiplicado 2 vezes: 6x6. Veja o resultado no console:
pág. 69
OPERADORES DE ATRIBUIÇÃO
Dando continuidade aos nossos estudo sobre operadores, vamos aprender
agora sobre os operadores de atribuição. O primeiro operador de atribuição
que veremos já tem sido utilizado por nós desde o início, ele é representado
pelo sinal de = igual. Temos usado ele para ATRIBUIR um determinado valor
à uma determinada varável.
A variável X começa com o valor de 10. Depois acontece uma soma com
atribuição (+=), ou seja, o valor de X foi somado com o valor de Y e agora X
passa a ter como valor o resultado dessa soma. Por isso, se dermos um
console.log( ) na variável X, verá que o seu valor agora é 15.
pág. 70
Seguindo a mesma lógica, temos o inverso -=
Basicamente quando usamos o -= vamos subtrair um determinado valor e
atribuir o valor dessa subtração. Faça você mesmo, com o exemplo acima!
Também temos a opção de fazer isso tanto com multiplicação *=
E também fazer com divisão /=
Basta seguir a mesma linha de raciocínio. Você pode criar seus próprios
exemplos.
pág. 71
Perceba que agora estamos perguntando: X é menor que Y? O retorno será:
FALSE, ou seja, falso. Olhe no seu console e veja.
Outro operador de comparação é o “maior ou igual” representado por: >=
pág. 72
Veremos agora o operador de comparação “diferente de”, representado por
!=
Esse caso retornará FALSE, pois apesar dos valores serem iguais os tipos são
diferentes. X é number e Y é string. Caso usássemos apenas o operador de
igualdade (==), o retorno seria TRUE. O operador de igualdade não leva em
consideração o tipo, apenas o valor. Já o operador de identidade verifica se
além do valor o tipo de dado também é igual. Mais para frente veremos
melhor na prática a usabilidade desses operadores e porquê é mais
vantajoso usar um ou outro em determinadas situações.
pág. 73
Da mesma forma temos o operador “não idêntico” que equivale ao
contrário de idêntico, representado por !==
Caso tenha entendido todos os operadores de comparação, já está apto a
seguir em frente.
OPERADOR TERNÁRIO
Estamos entendendo cada vez mais sobre operadores e não podemos
deixar de estudar sobre operador ternário. O operador ternário serve para
tomadas de decisão, onde temos duas possibilidades. Caso determinada
condição seja TRUE, determinada tarefa é executada, caso seja FALSE, outra
tarefa é executada. É praticamente como uma bifurcação onde podemos
seguir por um ou por outro caminho dependendo da condição proposta. O
operador ternário é representado pelo sinal de interrogação: “?”
pág. 74
Essa resposta apareceu pois o valor de X é maior que o valor de Y, então o
resultado da condicional foi TRUE.
Existe uma sintaxe a ser seguida. A primeira ação após o operador ternário
é relacionada a TRUE. A segunda ação é relacionada a FALSE. Não podemos
deixar de separar as duas ações com o sinal de :
Veja outro exemplo:
pág. 75
Vamos salvar no VS Code e atualizar a página no navegador.
Exatamente.
Conforme vamos evoluindo, iremos ver outras situações onde usar o
operador ternário será fundamental para implementar funcionalidades e
construir algoritmos dentro de um projeto.
Essa é a sintaxe.
pág. 76
Primeiro coloca-se if e depois, entre parênteses, a condição.
Segundo, abrimos chaves { }
Terceiro, dentro de chaves colocamos o código ou o bloco de códigos a ser
executado caso a condição estabelecida retorne TRUE .
Vamos incrementar nosso exemplo? Criaremos também uma função. E
executaremos ela dentro de if. Dessa forma:
pág. 77
E na estrutura condicional abaixo?
Agora sim, todo esse bloco de códigos será executado. Você verá dois alerts
em tela, um correspondente ao próprio if e outro correspondente a
execução da função contendo o resultado da soma. Veja você mesmo!
pág. 78
Bom, e se eu quiser ter dois blocos de códigos, um voltado para caso o
retorno da condicional seja TRUE e outro voltado para caso seja FALSE?
Para tanto usaremos o else, que para nós seria como “senão”.
pág. 79
Observe que colocamos o else bem na frente da chave que “fecha” primeira
condição. Fazemos isso para facilitar a leitura e o entendimento do código.
Também funcionaria colocando abaixo, porém da forma como está no
exemplo fica mais claro que essa segunda condição é o contrário da
primeira, dando a ideia de continuidade do fluxo do algoritmo. Também
existe a diferença de que quando usamos else, não precisamos colocar
nenhuma condição entre parênteses, basta usar { } diretamente.
Leríamos da seguinte forma:
Se ( if ) a string ‘10’ for idêntica ( === ) ao number 10, execute as 3 tarefas a
seguir, senão ( else ) execute essas 2 tarefas.
Então: A primeira condição será verificada, caso seja TRUE, o primeiro bloco
de código é executado e o segundo bloco é ignorado. Caso seja FALSE, o
primeiro bloco de código é ignorado e o segundo bloco é executado.
A string ‘10’ não é idêntica ao number 10. Então o bloco a ser executado é
o que está dentro de else:
pág. 80
Ainda existe uma outra forma de verificação que é o else if
Quando trabalhamos com estruturas de condicionais é bem comum ter o
que chamamos de condicionais aninhadas. Praticamente é colocarmos
outras verificações dentro de uma verificação.
Algo importante: else if só deve ser colocado após um if. O código dentro
de else if só será executado caso a condição do if anterior a ele retorne
FALSE e sua própria condição retorne TRUE.
pág. 81
Também podemos ter outros if dentro de um else ou else if...veja:
pág. 82
Aqui temos duas variáveis que representam a idade e o cargo de um
funcionário por exemplo.
A verificação abaixo é a seguinte: idade é maior que 29 e (&& - and) o cargo
é igual a admin? O retorno é TRUE.
Mas se tivéssemos:
pág. 83
Poderíamos ter também outros && verificando 3, 4 ou até mais condições
ao mesmo tempo. Veja:
Esse exemplo retornaria TRUE. Apesar da idade não ser maior que 29 e do
cargo ser diferente de admin, a cidade é igual a Fortaleza. Como estamos
utilizando || (ou), tanto faz qualquer uma das condições, ou a primeira, ou
a segunda ou a terceira. Qualquer uma que retornar TRUE fará com que o
bloco de códigos seja executado.
pág. 84
Ao usar ! iremos negar o valor de uma variável ou expressão. Simplesmente
o valor que era TRUE se torna FALSE e vice-versa. É conveniente usar isso
em alguns casos. Observe o exemplo abaixo:
Imagine que você queira executar esse bloco de código para qualquer
usuário que não (! Not) seja um admin. Então, negamos o valor dessa
expressão tornando-a no seu contrário. Se deixássemos apenas: cargo ==
‘admin’ isso retornaria false e o bloco de códigos não seria executado. Veja
que não seria viável colocar todos os cargos na condicional, por exemplo:
cargo == ‘developer’ || cargo == ‘QA’, etc. Seriam muitas condicionais
escritas, não é? Logo, como temos uma única exceção, que é o cargo
‘admin’, basta negar o valor da expressão para obtermos o resultado
esperado. A principio, cargo == ‘admin’ retornaria FALSE, mas como estamos
negando a expressão usando !, então retorna TRUE, o que faz com que o
código seja executado. Observe a sintaxe:
pág. 85
Caso queira negar uma variável simplesmente e não uma expressão de
condição, coloque ! not + variável sem os parênteses, dessa forma:
O que está acontecendo aqui? Veja que o valor da variável city é uma string
vazia, supondo que esse valor não foi preenchido pelo usuário. Já
aprendemos que uma string vazia retorna FALSE. Se colocarmos apenas o a
variável ali na condicional, não acontecerá nada, pois o bloco de códigos só
é executado caso a condição retornar TRUE. Então usamos o ! not para
negar o valor, tornando no contrário, ou seja, tornando a variável em TRUE
para que o bloco de códigos possa ser exibido. Esses são apenas alguns
exemplos, existem varias outras situações onde é conveniente usar ! not.
SWITCH CASE
Outra estrutura de condicionais bastante utilizada é a switch case. Ela é
indicada para casos onde temos dados específicos para serem validados.
Para cada case (caso) daremos um retorno específico. Veja a sintaxe:
pág. 86
Existem algumas coisas para se destacar. Primeiro temos a variável idade
cujo valor é 25. A seguir, temos a nossa estrutura switch case. Na sintaxe
coloca-se a palavra switch + (variável) entre parênteses, seguido de chaves
{ }.
Dentro de chaves, se fazem as validações usando case: Case 20:
Ali é como se fosse: caso a variável que está entre parênteses tenha o valor
de 20, execute o código após os “:” dois pontos.
A última coisa, usamos a palavra break;
Isso serve para interromper o fluxo do código quando aquele caso for TRUE,
ou seja, quando for executado. Se aquele caso específico for executado, o
switch para por ali mesmo. Podemos ter vários e vários cases dentro do
switch, e para cada caso um bloco de códigos diferente. Nesses exemplos
estamos usando sempre a função console.log( ) apenas para fixar o conceito
e ter um retorno visual do que está acontecendo, porém pode ser qualquer
outro bloco ali. Podem ser funções, strings, etc.
pág. 87
Aqui o nosso switch está verificando caso a caso e para cada caso
retornando uma coisa diferente. Talvez você não esteja vendo o porquê de
fazer dessa forma, mas acredite, em aplicações mais complexas onde é
necessário executar diferentes tarefas para certos casos específicos, usar
essa estrutura pode ser muito interessante. Nesse exemplo acima não
aconteceria nada, pois nenhum dos casos que estabelecemos bate com o
valor da variável que está sendo verificada. Mas se mudássemos o valor da
variável idade para 22, teríamos a exibição daquela mensagem especifica.
Veja que o primeiro caso seria ignorado pois não atenderia o valor da
variável e também o caso a seguir (case 23) também seria ignorado pois
estamos usando o break. Logo, assim que um caso é executado, o fluxo é
interrompido.
E se quisermos ter uma opção para quando nenhum dos cases for atendido?
Nesse casos usamos default
pág. 88
Cabe a nós desenvolvedores avaliar qual estrutura é mais interessante usar
ao realizar implementações em um projeto. Existirão situações em que será
melhor usar if, else e outras situações que será melhor usar switch case.
pág. 89
dela será sempre menor que 5? Uma vez que a repetição vai durar
enquanto o valor de numero for menor que 5, então será uma
repetição infinita. Loopings infinitos podem travar o navegador e até
o nosso computador de tal forma que precisaremos reiniciar a
máquina. Portanto, tome esse cuidado. Quando colocamos dessa
forma, a cada repetição o valor de numero será acrescentado em 1.
Inicialmente começa como 0, após a primeira repetição o seu valor
será 1, após a segunda 2 e assim até que o valor se iguale a 5 pois
nesse caso já não atenderá mais a condição de ser menor que 5.
pág. 90
Vamos colocar um numero maior?
No console:
pág. 91
NÃO ESCREVA O CÓDIGO ABAIXO:
Por exemplo, esse código geraria um looping infinito pois a lógica dele não
possui um ponto de interrupção. Concorda que o valor da variável numero
seria sempre maior que 0? A cada repetição o valor de numero aumentaria
em 1, ou seja, nunca seria menor que zero. É preciso ter muito cuidado para
não criar esses tipos de loopings, pois isso gerará um travamento do
navegador e até do sistema operacional do computador.
Existe outra forma de se interromper o looping, que é usando o break
Que já vimos anteriormente.
pág. 92
Também é possível utilizar loopings para interagir com objetos e arrays. Para
isso, vamos usar o for in. Primeiramente vamos criar um objeto com 3
chaves.
pág. 93
Aqui, vamos ter 3 repetições então. Cada uma delas vai exibir no console o
nome das chaves que o nosso objeto possui.
pág. 94
OBS: Esse nome (key) representa todas as chaves do objeto. Como estamos
fazendo um looping, não teria como colocar o nome de cada chave
manualmente, então damos um nome genérico que represente todas as
chaves, de modo que internamente, esse nome acaba sendo diferente a
cada repetição, tornando o nome dinâmico. Por exemplo, na primeira
repetição key = name, na segunda key = age e na terceira key = city. Só para
você entender. Utilizar o nome key é um padrão de escrita e que remete ao
que está acontecendo. Poderia ser outro nome, mas dessa forma faz sentido
para quem está lendo o código. No console temos:
pág. 95
poderia ser outra, estamos apenas dando um nome que represente todos
os itens do array. Veja no console:
While é bem parecido com for, é uma diferença apenas de escrita, mas a
lógica é praticamente a mesma.
pág. 96
CONCLUSÃO
Dev, você realmente conseguiu entender tudo o que foi passado nesse
módulo? É claro, que no início você ainda vai precisar pesquisar e recorrer
muito as suas anotações. Mas é muito importante que você tenha
entendido bem os conceitos.
Caso não tenha entendido e não tenha conseguido reproduzir o que foi
passado, volte e revise as aulas novamente, não passe para os próximos
módulos sem ter e entendimento dos tópicos desse terceiro módulo. Este
foi um módulo mais teórico do que prático mas acredite, vamos aplicar
muitos desses tópicos adiante.
Muitos alunos cometem o erro de ir avançando os módulos sem estarem
seguros em relação ao conteúdo. Mais importante do que concluir os
módulos do Profissão Programador, é aprender de fato como as coisas
acontecem, tanto na linguagem JavaScript, como em outras linguagens.
Futuramente você perceberá que saber a lógica é muito melhor do que
decorar a sintaxe dos códigos. Tendo a lógica apurada e sabendo usar as
ferramentas certas para cada situação, você conseguirá criar aplicações
complexas com várias funcionalidades.
Caso você se sinta seguro com o conteúdo passado, já está pronto para
começar a estudar o próximo módulo.
pág. 97