0% acharam este documento útil (0 voto)
1 visualizações8 páginas

Modulo4 Exercicios Js

Enviado por

balzjxjx123
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
1 visualizações8 páginas

Modulo4 Exercicios Js

Enviado por

balzjxjx123
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

JavaScript - Modulo 4

Introducao ao [Link]
Lista de Exercicios

Bloco 1 - O que e [Link] e como funciona o Runtime

[Link] e um ambiente de execucao JavaScript fora do navegador. Antes dele, o JavaScript so rodava
no browser. Com o [Link], voce usa a mesma linguagem para construir servidores, scripts,
ferramentas de linha de comando e muito mais. Ele e construido sobre o motor V8 do Google Chrome
e usa um modelo de execucao assincrono e nao bloqueante, o que o torna ideal para aplicacoes de
rede com muitas conexoes simultaneas.

• Event Loop: e o coracao do [Link]. Ele gerencia todas as operacoes assincronas. Enquanto uma
tarefa lenta (como ler um arquivo) e executada em segundo plano, o event loop continua
processando outras requisicoes. Quando a tarefa termina, o callback e colocado na fila e executado
na proxima oportunidade. Por isso o [Link] atende muitas conexoes simultaneamente sem travar.
• Single thread: ao contrario de linguagens como Java, o [Link] roda em uma unica thread. Isso
parece uma limitacao, mas e uma vantagem para APIs que fazem muitas operacoes de I/O (leitura
de banco, chamadas HTTP), pois essas operacoes sao delegadas ao sistema operacional enquanto
o Node continua livre para processar outras coisas.
• Nao bloqueante (non-blocking): quando o Node encontra uma operacao lenta, ele nao para e
espera. Ele registra um callback e passa para a proxima instrucao. Esse comportamento e o motivo
pelo qual voce precisou aprender assincronismo no Modulo 3.
• Casos de uso ideais: APIs REST, servidores HTTP, aplicacoes em tempo real (chat,
notificacoes), ferramentas de linha de comando e microservicos. O Node nao e ideal para tarefas
CPU-intensivas como renderizacao de video ou calculos cientificos pesados.

Exemplo:
// O [Link] executa JavaScript fora do browser
// Para rodar: node [Link]

[Link]('Versao do Node:', [Link]);


[Link]('Sistema:', [Link]);
[Link]('Diretorio atual:', [Link]());

// Demonstracao do event loop


[Link]('1 - inicio');

setTimeout(() => {
[Link]('3 - callback do setTimeout');
}, 0);

[Link]('2 - fim do codigo sincrono');


// Saida: 1, 2, 3 (mesmo com timeout de 0ms)
Dica: instale o [Link] pelo site [Link] ou use o NVM para gerenciar multiplas versoes. Confirme a
instalacao com: node --version e npm --version no terminal.

1. Com suas proprias palavras, explique o que e o [Link] e qual problema ele resolve.
Por que e vantajoso usar JavaScript no back-end?
Resposta:

2. O que e o Event Loop? Explique como ele permite que o [Link] seja nao bloqueante
mesmo rodando em uma unica thread.
Resposta:

3. Qual sera a ordem de saida do codigo abaixo? Explique cada linha antes de executar e
confirme rodando no terminal:
[Link]('A');
setTimeout(() => [Link]('B'), 100);
setTimeout(() => [Link]('C'), 0);
[Link]('D');
Resposta:

4. Cite tres situacoes em que o [Link] e uma boa escolha e duas em que nao seria a
melhor opcao. Justifique cada uma.
Resposta:

5. Execute [Link], [Link] e [Link]() no terminal e explique o


que cada propriedade retorna.
Resposta:

Bloco 2 - Modulo Nativo: fs (File System)

O modulo fs (File System) e um dos mais importantes do [Link]. Ele permite ler, escrever, atualizar e
deletar arquivos diretamente do servidor sem nenhuma biblioteca externa. No back-end, voce vai usar
o fs para ler arquivos de configuracao, salvar logs, processar uploads e muito mais. O fs tem versoes
sincronas (bloqueantes) e assincronas (nao bloqueantes) de cada operacao. Em producao, sempre
prefira as assincronas.

• [Link]: le o conteudo de um arquivo de forma assincrona. Recebe o caminho, a codificacao


(geralmente utf8) e um callback com (erro, conteudo). Se o arquivo nao existir, o erro sera
preenchido. Existe tambem [Link] para leitura sincrona, mas ela trava o event loop e deve
ser evitada em servidores.
• [Link]: escreve conteudo em um arquivo. Se o arquivo nao existir, e criado automaticamente.
Se ja existir, o conteudo e sobrescrito. Para adicionar sem sobrescrever, use [Link]. Assim
como readFile, tem versao sincrona (writeFileSync) que deve ser evitada em producao.
• [Link]: remove um arquivo do sistema. Antes de remover, e boa pratica verificar se o arquivo
existe com [Link] ou tratando o erro no callback para evitar falhas silenciosas.
• fs/promises: a partir do [Link] 10+, o modulo fs/promises oferece versoes baseadas em
Promises de todas as operacoes, permitindo usar async/await em vez de callbacks. Esta e a forma
mais moderna e recomendada de trabalhar com o sistema de arquivos.
Exemplo:
const fs = require('fs');
const fsp = require('fs/promises');

// Leitura com callback (tradicional)


[Link]('[Link]', 'utf8', (erro, conteudo) => {
if (erro) [Link]('Erro:', [Link]);
else [Link]('Conteudo:', conteudo);
});

// Escrita com async/await (recomendado)


async function salvarArquivo() {
try {
await [Link]('[Link]', 'Ola, [Link]!');
[Link]('Arquivo salvo!');
} catch (erro) {
[Link]('Erro:', [Link]);
}
}

salvarArquivo();

Dica: prefira sempre fs/promises com async/await em vez dos callbacks do fs tradicional. O codigo fica mais
legivel e o tratamento de erros e mais simples com try/catch.

6. Crie um arquivo chamado [Link] manualmente com algum texto. Use


[Link] para ler e exibir o conteudo no console.
Resposta:

7. Use [Link] para criar um arquivo chamado [Link] com o texto 'Sistema iniciado
em [data atual]'. Confirme que o arquivo foi criado.
Resposta:

8. Use [Link] para adicionar novas linhas ao [Link] sem apagar o conteudo
anterior. Adicione pelo menos tres entradas diferentes.
Resposta:

9. Crie uma funcao async lerArquivo(caminho) usando fs/promises que retorne o


conteudo do arquivo ou lance um erro descritivo caso o arquivo nao exista.
Resposta:

10. Crie um script que leia um arquivo JSON com uma lista de usuarios, parse o
conteudo com [Link] e exiba cada usuario formatado no console.
Resposta:

11. Use [Link] para deletar um arquivo. Antes de deletar, verifique se ele existe com
[Link] e exiba uma mensagem adequada em cada caso.
Resposta:

Bloco 3 - Modulos Nativos: path e os


Os modulos path e os sao utilitarios essenciais do [Link]. O path lida com caminhos de arquivos e
diretorios de forma compativel com qualquer sistema operacional. Sem ele, seu codigo pode funcionar
no Mac mas quebrar no Windows por causa das barras (/ vs \). Ja o modulo os fornece informacoes
sobre o sistema onde o Node esta rodando, como memoria disponivel, tipo de sistema e diretorio
home do usuario.

• [Link]: une partes de um caminho de forma segura usando o separador correto para cada SO.
[Link]('pasta', 'sub', '[Link]') resulta em pasta/sub/[Link] no Linux/Mac e
pasta\sub\[Link] no Windows. Sempre use [Link] em vez de concatenar strings com '/'.
• [Link]: converte um caminho relativo em absoluto a partir do diretorio atual. E muito usado
para definir caminhos de arquivos de configuracao ou pastas de upload de forma que funcionem
independente de onde o script foi chamado.
• [Link] e [Link]: basename retorna o nome do arquivo a partir de um caminho
completo e extname retorna apenas a extensao. Sao uteis para validar tipos de arquivo em uploads
ou manipular nomes de arquivos dinamicamente.
• [Link], [Link] e [Link]: retornam a memoria livre e total em bytes e o sistema
operacional ('linux', 'darwin' para Mac, 'win32' para Windows). [Link] retorna o diretorio home
do usuario. Esses dados sao uteis para logs de sistema e para adaptar o comportamento ao
ambiente.

Exemplo:
const path = require('path');
const os = require('os');

// path
[Link]([Link]('pasta', 'sub', '[Link]'));
// pasta/sub/[Link]

[Link]([Link]('[Link]'));
// /home/usuario/projeto/[Link]

[Link]([Link]('/pasta/[Link]')); // [Link]
[Link]([Link]('[Link]')); // .pdf

// os
[Link]([Link]()); // linux / darwin / win32
[Link]([Link]()); // /home/usuario
const livMB = ([Link]() / 1024 / 1024).toFixed(2);
[Link]('Memoria livre:', livMB, 'MB');

Dica: use sempre __dirname (diretorio do arquivo atual) junto com [Link] para construir caminhos absolutos de
forma segura. Exemplo: [Link](__dirname, 'arquivos', '[Link]').

12. Use [Link] para montar o caminho de um arquivo dentro de tres niveis de pastas.
Exiba o resultado no console.
Resposta:

13. Use [Link] para obter o caminho absoluto de um arquivo relativo. Compare o
resultado com [Link] e explique a diferenca entre os dois.
Resposta:
14. Dado o caminho '/projetos/api/src/controllers/[Link]', use [Link] e
[Link] para extrair o nome do arquivo e a extensao separadamente.
Resposta:

15. Use o modulo os para exibir: sistema operacional, diretorio home, total de RAM e
memoria livre (em MB).
Resposta:

16. Combine path e fs: use [Link] com __dirname para montar o caminho de um
arquivo e depois leia seu conteudo com [Link].
Resposta:

Bloco 4 - npm e Gerenciamento de Pacotes

npm (Node Package Manager) e o gerenciador de pacotes oficial do [Link] e o maior repositorio de
bibliotecas open source do mundo. Com ele voce instala, atualiza e remove dependencias do seu
projeto. O arquivo [Link] e o coracao de qualquer projeto [Link]: ele registra todas as
dependencias, scripts e metadados. Entender bem o npm e fundamental antes de comecar a usar o
Express e qualquer outra biblioteca.

• npm init: cria o arquivo [Link] no projeto. Use npm init -y para pular as perguntas e aceitar
os valores padrao. O [Link] guarda o nome, versao, descricao, ponto de entrada (main),
scripts e lista de dependencias do projeto.
• npm install: instala dependencias e as adiciona automaticamente no [Link]. A pasta
node_modules e criada com todos os arquivos da biblioteca. Nunca versione a node_modules no git,
adicione ela sempre ao .gitignore.
• dependencies vs devDependencies: dependencies sao pacotes necessarios em producao
(como o Express). devDependencies sao pacotes usados apenas no desenvolvimento, como o
nodemon e ferramentas de teste. Instale devDependencies com: npm install --save-dev
nomeDoPacote.
• Scripts no [Link]: o campo scripts permite criar atalhos de comandos. Por exemplo,
definir start como node [Link] permite rodar o servidor com npm start. O script dev com nodemon
reinicia automaticamente o servidor ao salvar arquivos.
• [Link]: gerado automaticamente, registra a versao exata de cada dependencia
instalada. Garante que todos no time instalem exatamente as mesmas versoes. Sempre versione o
[Link].

Exemplo:
// 1. Iniciar projeto
// npm init -y

// 2. Instalar dependencias
// npm install express
// npm install --save-dev nodemon

// [Link] gerado:
{
"name": "minha-api",
"version": "1.0.0",
"main": "[Link]",
"scripts": {
"start": "node [Link]",
"dev": "nodemon [Link]"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}

Dica: instale o nodemon como devDependency e use npm run dev durante o desenvolvimento. Ele reinicia o
servidor automaticamente ao salvar qualquer arquivo, sem precisar parar e rodar node manualmente.

17. Crie uma pasta para um novo projeto, acesse-a pelo terminal e execute npm init -y.
Abra o [Link] gerado e explique o que cada campo significa.
Resposta:

18. Instale o Express com npm install express. Verifique as mudancas no [Link] e
explique o que a pasta node_modules contem.
Resposta:

19. Qual a diferenca entre dependencies e devDependencies? Instale o nodemon como


devDependency e justifique por que ele nao deve ir em dependencies.
Resposta:

20. Crie um script start e um script dev no [Link]. Teste os dois com npm start e
npm run dev.
Resposta:

21. O que e o [Link]? Por que ele deve ser versionado no git enquanto a
pasta node_modules nao deve?
Resposta:

22. Desinstale uma dependencia com npm uninstall e verifique a remocao no


[Link]. Depois apague a node_modules e reinstale tudo com npm install.
Resposta:

Bloco 5 - Criando Scripts Reais com [Link]

Uma das grandes vantagens do [Link] e criar scripts de linha de comando que automatizam tarefas
do dia a dia. Scripts sao programas que rodam uma vez, fazem algo util e terminam, diferentes de
servidores que ficam rodando continuamente. Com fs, path, os e npm, e possivel criar ferramentas
reais que leem arquivos, processam dados, geram relatorios e interagem com o sistema operacional.

• [Link]: permite que o script receba argumentos pela linha de comando. E um array onde o
indice 0 e o caminho do node, o indice 1 e o caminho do script e a partir do indice 2 vem os
argumentos do usuario. Exemplo: node [Link] Ana 25 resulta em [Link][2] = 'Ana' e
[Link][3] = '25'.
• [Link]: encerra o processo com um codigo de saida. [Link](0) indica sucesso e
[Link](1) indica erro. E util para scripts que precisam sinalizar ao sistema se terminaram com
exito ou nao.
• [Link] e require: voce pode organizar o codigo em multiplos arquivos e importar um no
outro com require. Para exportar funcoes de um arquivo, use [Link]. Esta e a base da
organizacao de qualquer projeto [Link] real.
• Automatizacao pratica: combinando fs, path e logica JavaScript voce pode criar scripts que
processam arquivos em lote, validam dados, geram relatorios em JSON, fazem backup de arquivos
e registram logs. Ferramentas do cotidiano de todo desenvolvedor back-end.

Exemplo:
// arquivo: [Link]
// Uso: node [Link] Ana

const nome = [Link][2];

if (!nome) {
[Link]('Erro: informe um nome.');
[Link]('Uso: node [Link] <nome>');
[Link](1);
}

[Link]('Ola, ' + nome + '! Bem-vindo ao [Link].');


[Link](0);

// arquivo: [Link]
function formatarData(data) {
return [Link]('pt-BR');
}
[Link] = { formatarData };

// arquivo: [Link]
const { formatarData } = require('./utils');
[Link](formatarData(new Date()));

Dica: use [Link]() para mensagens de erro em vez de [Link](). Mensagens de erro vao para o stderr,
o que permite separar saida normal de erros ao usar o script em pipelines do terminal.

23. Crie um script que receba um nome via [Link] e exiba uma saudacao
personalizada. Se nenhum nome for informado, exiba instrucoes de uso e encerre com
[Link](1).
Resposta:

24. Crie um script que leia um arquivo JSON com uma lista de produtos, filtre apenas os
com preco acima de 100 e salve o resultado em um novo arquivo JSON.
Resposta:

25. Crie um arquivo [Link] com pelo menos duas funcoes utilitarias (ex: formatarData e
calcularIdade). Exporte ambas com [Link] e importe no arquivo principal com
require.
Resposta:

26. Crie um script de log: receba uma mensagem via [Link] e adicione essa
mensagem com data e hora em um arquivo chamado [Link] usando [Link].
Resposta:

27. Crie um script que use os e path para exibir um relatorio do ambiente: sistema
operacional, versao do Node, diretorio atual, memoria total e livre (em MB) e diretorio
home.
Resposta:

28. Crie um mini script de backup: copie o conteudo de um arquivo de origem para um
de destino, ambos informados via [Link], e exiba uma confirmacao ao final.
Resposta:

Pratique cada exercicio no terminal com: node [Link]

Você também pode gostar