Manual de JavaScript para Iniciantes
Manual de JavaScript para Iniciantes
Fórum Doar
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
[Link] 1/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Artigo
Apoie nossa original:
organização The JavaScript
beneficente Beginner's
e nossa missão. Handbook
Faça sua doação para o
[Link].
Creio que seja uma ótima escolha para sua primeira linguagem de
programação.
sites da web
aplicações web
[Link] 2/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
[Link] 3/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Caso você esteja se perguntando, JavaScript nada tem a ver com Java.
Trata-se apenas de uma péssima escolha de nome com a qual temos
que conviver.
Resumo do manual
1. Um pouco de história
2. Apenas JavaScript
4. Ponto-e-vírgula
5. Valores
6. Variáveis
7. Tipos
8. Expressões
9. Operadores
12. Condicionais
13. Arrays
14. Strings
[Link] 4/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
16. organização
Apoie nossa Funções beneficente e nossa missão. Faça sua doação para o
[Link].
17. Arrow functions
18. Objetos
21. Classes
22. Herança
24. Promises
27. Conclusão
Um pouco de história
Criado em 1995, o JavaScript percorreu um longo caminho desde
seu humilde começo.
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
No início, o JavaScript não era tão potente quanto hoje e era usado
[Link].
principalmente para animações elaboradas e para a maravilha
conhecida na época como HTML Dinâmico.
Apenas JavaScript
Às vezes é difícil separar o JavaScript dos recursos do ambiente em
que ele é usado.
[Link] 6/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
espaços em branco
maiúsculas e minúsculas
literals
identificadores
comentários
Espaços em branco
O JavaScript não dá qualquer significado aos espaços em branco.
Espaços e quebras de linha podem ser acrescentados do modo que
você desejar, pelo menos em teoria.
[Link] 7/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Literals
Definimos literal como um valor que está escrito no código-fonte,
por exemplo, um número, uma string, um booleano, ou também
construções mais avançadas, como objetos ou arrays literais:
5
'Test'
true
['a', 'b']
{color: 'red', shape: 'Rectangle'}
Identificadores
Um identificador é uma sequência de caracteres que pode ser usada
para identificar uma variável, uma função ou um objeto. Pode
começar com uma letra, com um cifrão $ ou um sublinhado _ e
pode conter dígitos. Usando Unicode, uma letra pode ser qualquer
caractere permitido, por exemplo, um emoji 😄.
Test
test
TEST
_test
Test1
$test
[Link] 8/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Comentários
Os comentários são uma das partes mais importantes de qualquer
programa, em qualquer linguagem de programação. Eles são
importantes porque nos permitem anotar o código e acrescentar
informações importantes que, de outro modo, não estariam
disponíveis para outras pessoas (ou para nós mesmos) durante sua
leitura.
Assim:
// um comentário
true //outro comentário
[Link] 9/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
/* Aqui temos
um tipo de
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
comentário
[Link].
*/
Ponto-e-vírgula
Cada linha de um programa em JavaScript é terminada
opcionalmente com um ponto-e-vírgula.
Valores
Uma string hello é um valor.
Um número, como 12 , é um valor.
[Link] 10/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Variáveis
Uma variável é um valor atribuído a um identificador, para que você
possa referenciá-lo e usá-lo posteriormente no programa.
Uma variável deve ser declarada antes que você possa utilizá-la.
const a = 0
let a = 0
Qual é a diferença?
[Link] 11/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
const a = 0
a = 1
let a = 0
a = 1
const a = 0
[Link] 12/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Variáveis let , por outro lado, podem ser inicializadas depois:
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
let a
a = 0
const a = 1, b = 2
let c = 1, d = 2
let a = 1
let a = 2
[Link] 13/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Tipos
Variáveis em JavaScript não possuem nenhum tipo definido.
Uma vez que você atribua um valor de algum tipo a uma variável,
você pode reatribuir posteriormente a variável para receber um
valor de qualquer outro tipo sem problemas.
Tipos primitivos
Tipos primitivos são
números
strings
booleanos
símbolos
Objetos
[Link] 14/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Expressões
Uma expressão é uma única unidade de código em JavaScript que o
mecanismo do JavaScript pode avaliar e retornar um valor.
2
0.02
'something'
true
false
this //o escopo atual
undefined
i //onde i é uma variável ou uma constante
1 / 2
i++
[Link] 15/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
i -= 2
Fórum Doar
i * 2
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
a && b
a || b
!a
Operadores
Os operadores permitem pegar duas expressões simples e combiná-
las para formar uma expressão mais complexa.
[Link] 16/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum
Já introduzi um ao falar sobre variáveis: o operador de atribuição = . Doar
Você
Apoie nossa usa = para
organização atribuir um
beneficente valormissão.
e nossa a uma Faça
variável:
sua doação para o
[Link].
let b = 2
const tres = 1 + 2
const quatro = tres + 1
const tres = 1 + 2
tres + 1 // 4
'tres' + 1 // tres1
const dois = 4 - 2
[Link] 17/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Se você dividir por zero, o JavaScript não gera nenhum erro, mas
retorna o valor Infinity (ou -Infinity , se o valor for negativo).
1 / 0 //Infinity
-1 / 0 //-Infinity
1 % 0 //NaN
-1 % 0 //NaN
[Link] 18/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
1 * 2 //2
-1 * 2 //-2
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
1 ** 2 //1
2 ** 1 //2
2 ** 2 //4
2 ** 8 //256
8 ** 2 //64
Regras de precedência
Cada expressão complexa com vários operadores na mesma linha
apresentará problemas de precedência.
let a = 1 * 2 + 5 / 2 % 2
[Link] 19/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
= atribuição
let a = 1 * 2 + 5 / 2 % 2
let a = 2 + 5 / 2 % 2
let a = 2 + 2.5 % 2
let a = 2 + 0.5
let a = 2.5
Operadores de comparação
Depois dos operadores de atribuição e dos matemáticos, o terceiro
conjunto de operadores que quero apresentar são os operadores
condicionais.
Exemplo:
let a = 2
a >= 1 //true
Condicionais
Com os operadores de comparação estabelecidos, podemos falar
sobre condicionais.
if (true) {
//faça algo
[Link] 21/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
}
Fórum Doar
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
ao contrário, isto jamais é executado:
if (false) {
//faça algo (? nunca ?)
}
Um bloco pode ser colocado onde quer que você possa ter uma
única instrução. Se você tiver uma única instrução para executar
após as condicionais, você pode omitir o bloco, e escrever apenas a
instrução:
if (true) facaAlgo()
[Link] 22/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
if (true) {
//faça algo
} else {
//faça outra coisa
}
if (a === true) {
//faça algo
} else if (b === true) {
//faça outra coisa
} else {
//faça uma terceira coisa se nenhuma das outras opções for válida
}
Arrays
Um array é uma coleção de elementos.
[Link] 23/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
const a = []
const a = Array()
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
const a = [1, 2, 3]
const a = [Link](1, 2, 3)
const matriz = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
matriz[0][0] //1
matriz[2][0] //7
[Link] 24/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
a[0] //1
a[1] //2
a[2] //3
Array(12).fill(0)
const a = [1, 2, 3]
[Link] //3
const a = [1, 2, 3]
a //[ 1, 2, 3 ]
[Link] = 2
a //[ 1, 2 ]
[Link] 25/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
[Link](4)
[Link](0)
[Link](-2, -1)
[Link]()
[Link]()
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
const a = [1, 2]
const b = [3, 4]
const c = [Link](b) //[1,2,3,4]
a //[1,2]
b //[3,4]
const a = [1, 2]
const b = [3, 4]
const c = [...a, ...b]
c //[1,2,3,4]
[Link] 27/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
[Link](x => [Link] === my_id)
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
[Link](valor)
[Link](valor, i)
Strings
[Link] 28/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
Ela também pode ser definida como uma string literal, contida entre
[Link].
aspas simples ou aspas duplas:
'Uma string'
"Outra string"
'Flavio'.length //6
const nome = 'Flavio'
[Link] //6
''.length //0
Fórum Doar
Apoie nossa"Uma
organização beneficente e nossa missão. Faça sua doação para o
" + "string"
[Link].
string
é incrível!`
[Link] 30/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Apoie nossaconst
organização beneficente e nossa missão. Faça sua doação para o
var = 'teste'
[Link].
const string = `algo ${var}`
//algo teste
Laços
Laços de repetição são uma das principais estruturas de controle do
JavaScript.
laço while
laço for
laço for..of
while
[Link] 31/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Exemplo:
while (true) {
if (algoForVerdadeiro) break
}
while (true) {
if (algoForVerdadeiro) continue
[Link] 32/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Muito parecido com while , temos o laço do..while . É basicamente
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
o mesmo que while , mas a condição é avaliada depois que o bloco
[Link].
de código é executado.
Isso significa que o bloco sempre é executado pelo menos uma vez.
Exemplo:
for
A segunda estrutura de repetição muito importante em JavaScript é
o laço for.
Exemplo:
[Link] 33/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
for...of
Este laço é relativamente recente (introduzido em 2015) e é uma
versão simplificada do laço for :
Funções
Em qualquer programa do JavaScript moderadamente complexo,
tudo acontece dentro de funções.
function obterDados() {
// Faça algo
}
[Link] 34/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
obterDados()
function obterDados() {
//Faça algo
}
function obterDados(cor) {
//Faça algo
}
obterDados('verde', 24)
obterDados('preto')
Fórum Doar
Podemos verificar se um valor não é undefined usando esta
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
condicional:
[Link].
[Link] 36/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Você pode passar qualquer valor como parâmetro: números, strings,
Apoie nossa organização
booleanos, beneficente
arrays, objetoseenossa missão. Faça sua doação para o
funções.
[Link].
function obterDados() {
// Faça algo
return 'Oi!'
}
function obterDados() {
// Faça algo
return 'Oi!'
}
function obterDados() {
return ['Flavio', 37]
}
[Link] 37/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
let [nome, idade] = obterDados()
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
Arrow functions
Arrow functions foram introduzidas recentemente ao JavaScript.
function obterDados() {
//...
}
[Link] 38/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
() => {
//...
}
[Link] 39/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
let obterDados = () => {
//...
}
obterDados()
[Link] 40/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
obterDados() //'teste'
Objetos
[Link] 41/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
const carro = {
[Link] 42/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
[Link] = modelo
Fórum Doar
}
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
let idade = 36
let minhaIdade = idade
minhaIdade = 37
idade //36
const carro = {
cor: 'azul'
}
const outroCarro = carro
[Link] = 'amarelo'
[Link] //'amarelo'
Mesmo arrays ou funções são objetos por debaixo dos panos. Então,
é muito importante entender como eles funcionam.
[Link] 43/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
const carro = {
const carro = {
cor: 'azul'
}
[Link] 44/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
const carro = {
Fórum Doar
cor: 'azul',
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
'a cor': 'azul'
[Link].
}
[Link] //'azul'
[Link] //undefined
[Link] 45/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
const carro = {
marca: {
nome: 'Ford'
},
cor: 'azul'
}
[Link]
ou
carro['marca']['nome']
const carro = {
cor: 'azul'
}
[Link] = 'amarelo'
carro['cor'] = 'vermelho'
[Link] 46/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
[Link] = 'Fiesta'
[Link] //'Fiesta'
Dado o objeto
const carro = {
cor: 'azul',
marca: 'Ford'
}
delete [Link]
Métodos de objetos
Falei sobre funções em um capítulo anterior.
[Link] 47/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
const carro = {
Fórum Doar
marca: 'Ford',
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
modelo: 'Fiesta',
[Link].
ligar: function() {
[Link]('Ligado')
}
}
[Link]()
const carro = {
marca: 'Ford',
modelo: 'Fiesta',
ligar: function() {
[Link](`${[Link]} ${[Link]} ligado!`)
}
}
[Link]()
const carro = {
marca: 'Ford',
modelo: 'Fiesta',
ligar: () => {
[Link](`${[Link]} ${[Link]} ligado!`) //não vai funci
[Link] 48/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
}
Fórum Doar
}
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link]()
[Link].
const carro = {
marca: 'Ford',
modelo: 'Fiesta',
irPara: function(destino) {
[Link](`Indo para ${destino}`)
}
}
[Link]('Roma')
Classes
Falamos sobre objetos, uma das partes mais interessantes do
JavaScript.
[Link] 49/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
class Pessoa {
nome
}
[Link] = 'Flavio'
[Link]
[Link] 50/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
assim como fazemos para as propriedades do objeto.
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
As classes podem conter propriedades, como nome , e métodos.
class Pessoa {
ola() {
return 'Olá, meu nome é Flavio'
}
}
class Pessoa {
ola() {
return 'Olá, meu nome é Flavio'
}
}
const flavio = new Pessoa()
[Link]()
Funciona assim:
class Pessoa {
constructor(nome) {
[Link] = nome
}
[Link] 51/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
ola() {
Fórum Doar
return 'Olá, meu nome é ' + [Link] + '.'
}
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
}
[Link].
Você pode definir um método como static para permitir que ele
seja executado na classe em vez disso:
class Pessoa {
static olaGenerico() {
return 'Olá'
}
}
[Link]() //Olá
[Link] 52/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Herança
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
Uma classe pode ser uma extensão de outra classe de modo que os
[Link].
objetos inicializados usando essa classe herdam todos os métodos
de ambas as classes.
class Pessoa {
ola() {
return 'Olá, eu sou uma Pessoa'
}
}
[Link] 53/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
class Programador extends Pessoa {
ola() {
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
return [Link]() +
[Link].
'. Eu também sou um programador.'
}
}
Programação assíncrona e
callbacks
Na maioria das vezes, o código JavaScript é executado de modo
síncrono.
Todavia, há momentos em que você não pode esperar que uma linha
de código seja executada.
Fórum Doar
Um dos exemplos mais simples de como callbacks são usadas é com
Apoie nossa organização beneficente
temporizadores e nossa
(timers). Os missão. Façanão
temporizadores sua fazem
doaçãoparte
para odo
[Link].
JavaScript, mas são fornecidos pelo navegador e pelo [Link].
Deixe-me falar sobre um pouco sobre os timers que temos:
setTimeout() .
Exemplo:
setTimeout(() => {
// executa após 2 segundos
[Link]('dentro da função')
}, 2000)
[Link]('antes')
setTimeout(() => {
// executa após 2 segundos
[Link]('dentro da função')
}, 2000)
[Link]('depois')
[Link] 55/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
antes
depois
dentro da função
[Link] 56/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
fazerAlgo(resultado => {
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link](resultado)
[Link].
})
Promises
Promises, ou promessas, são uma maneira alternativa de lidar com
código assíncrono.
Assim:
fazerAlgo(resultado => {
[Link](resultado)
})
[Link] 57/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
fazerAlgo(resultado => {
fazerOutraCoisa(outroResultado => {
fazerMaisUmaCoisa(maisUmResultado => {
[Link](resultado)
})
})
})
Em vez de fazer:
fazerAlgo(resultado => {
[Link](resultado)
})
fazerAlgo()
.then(resultado => {
[Link](resultado)
})
[Link] 58/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
fazerAlgo()
.then(resultado => {
[Link](resultado)
})
.catch(erro => {
[Link](erro)
})
Fórum Doar
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
const fazerAlgo = new Promise(() => {
[Link].
})
})
Veja como:
[Link] 60/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
}
Fórum Doar
)
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
Async e await
As funções assíncronas são uma abstração de alto nível das promises.
[Link] 61/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
const fazerAlgo = async () => {
const dados = await obterDados()
[Link](dados)
}
Como você pode ver no exemplo acima, nosso código parece bem
mais simples. Compare-o ao código usando promises ou funções de
callback.
pegarDadosDoPrimeiroUsuario()
[Link] 62/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
pegarDadosDoPrimeiroUsuario()
Escopos de variáveis
Quando introduzi variáveis, falei sobre usar const , let , e var .
[Link] 63/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
function obterDados() {
if (true) {
var dados = 'dados'
[Link](dados)
}
}
function obterDados() {
if (true) {
var dados = 'dados'
[Link] 64/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
}
Fórum Doar
[Link](dados)
}
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
function obterDados() {
if (true) {
let dados = 'dados'
}
[Link](dados)
}
function obterDados() {
var dados
if (true) {
dados = 'dados'
}
[Link](dados)
}
[Link] 65/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
Pode ser complicado no começo, mas assim que você perceber essa
diferença, verá por que usar var é considerada uma má prática hoje
em dia em comparação com o uso do let – que possui menos
partes móveis e escopo limitado ao bloco, o que também torna let
muito bom como variável para laços porque deixa de existir após o
término da repetição:
function fazerLaco() {
for (var i = 0; i < 10; i++) {
[Link](i)
}
[Link](i)
}
fazerLaco()
Fórum Doar
Conclusão
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
Muito obrigado por ter lido este livro.
Se você leu até aqui, agradeça ao autor para mostrar que você se
importa com o trabalho. Agradeça
[Link] 67/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Fórum Doar
O freeCodeCamp
Apoie é uma beneficente
nossa organização organização beneficente 501(c)(3),
e nossa missão. Façaisenta de impostos
sua doação para oe apoiada por
[Link].
doações (Número de identificação fiscal federal dos Estados Unidos: 82-0779546).
Nossa missão: ajudar as pessoas a aprender a programar de forma gratuita. Conseguimos isso
criando milhares de vídeos, artigos e lições de programação interativas, todas disponíveis
gratuitamente para o público.
As doações feitas ao freeCodeCamp vão para nossas iniciativas educacionais e ajudam a pagar
servidores, serviços e a equipe.
Aplicativo móvel
Nossa instituição
[Link] 68/69
05/04/2025, 14:11 O manual de JavaScript para iniciantes
Sobre Rede de ex-alunos Código aberto Loja Apoio Patrocinadores Honestidade acadêmica
Fórum Doar
Código de conduta Política de privacidade Termos de serviço Política de direitos de autor
Apoie nossa organização beneficente e nossa missão. Faça sua doação para o
[Link].
[Link] 69/69