JavaScript Elegante: Uma Introdução Moderna à Programação
Um guia abrangente sobre programação moderna usando JavaScript. O curso cobre princípios fundamentais de programação, a especificação da linguagem JavaScript, integração com navegadores web e desenvolvimento do lado do servidor com Node.js, incluindo cinco aplicações práticas do mundo real.
Visão Geral do Curso
📚 Resumo do Conteúdo
Um guia abrangente sobre programação moderna usando JavaScript. O curso aborda princípios fundamentais de programação, a especificação da linguagem JavaScript, integração com navegadores web e desenvolvimento do lado do servidor com Node.js, incluindo cinco aplicações práticas em projetos do mundo real.
Uma exploração profunda e elegante no cerne da programação em JavaScript.
Autor: Marijn Haverbeke
Agradecimentos: Apoiado por 454 patrocinadores financeiros; ilustrações de Wasif Hyder, Max Xiantu, Margarita Martínez, José Menor, Jim Tierney, Dyle MacGregor, Jeff Avallone, Thomas Palef e Antonio Perdomo Pastor.
🎯 Objetivos de Aprendizagem
- Definir o que é um programa e explicar os diferentes níveis de abstração nas linguagens de computador.
- Utilizar números e operadores aritméticos do JavaScript para produzir valores.
- Declarar e atualizar variáveis, respeitando convenções de nomes e restrições de palavras reservadas.
- Implementar fluxo de controle robusto usando
doloops,forloops e instruçõesswitch, mantendo código limpo por meio de indentação e comentários. - Definir e invocar funções usando múltiplas notações, lidando com parâmetros, argumentos opcionais e escopos léxicos aninhados.
- Aplicar conceitos funcionais avançados como recursão, fechamentos (closures) e pilha de chamadas para resolver enigmas algorítmicos complexos.
- Utilizar métodos especializados de objetos e arrays para gerenciar estruturas de dados complexas e strings.
- Implementar funções de ordem superior (
filter,map,reduce) para abstrair lógica e compor transformações de dados. - Navegar e manipular a cadeia de protótipos para criar instâncias de objetos estruturadas e reutilizáveis e interfaces polimórficas.
- Implementar interfaces polimórficas para lidar com visualizações de dados complexas (tabelas).
🔹 Lição 1: Fundamentos do JavaScript e Estrutura de Programas
Visão Geral: Esta lição apresenta os conceitos fundamentais da programação usando JavaScript, partindo da definição filosófica de um programa até os mecanismos práticos do código. Os alunos explorarão como os dados são representados por tipos e bits, como manipular valores usando operadores e como estruturar programas usando variáveis, expressões e instruções. A lição também cobre comportamentos únicos do JavaScript, como conversão automática de tipos e avaliação de curto-circuito.
Resultados de Aprendizagem:
- Definir o que é um programa e explicar os diferentes níveis de abstração nas linguagens de computador.
- Utilizar números e operadores aritméticos do JavaScript para produzir valores.
- Declarar e atualizar variáveis, respeitando convenções de nomes e restrições de palavras reservadas.
🔹 Lição 2: Funções e Estruturas de Dados Complexas
Visão Geral: Esta lição explora os blocos essenciais da programação estruturada, focando em fluxo de controle avançado, técnicas de programação funcional e organização avançada de dados. Os alunos dominarão como encapsular lógica dentro de funções, gerenciar visibilidade de variáveis por meio de escopos e fechamentos (closures), e manipular objetos mutáveis para analisar dados do mundo real, como correlações estatísticas.
Resultados de Aprendizagem:
- Implementar fluxo de controle robusto usando
doloops,forloops e instruçõesswitch, mantendo código limpo por meio de indentação e comentários. - Definir e invocar funções usando múltiplas notações, lidando com parâmetros, argumentos opcionais e escopos léxicos aninhados.
- Aplicar conceitos funcionais avançados como recursão, fechamentos (closures) e pilha de chamadas para resolver enigmas algorítmicos complexos.
🔹 Lição 3: Funções de Ordem Superior e Protótipos
Visão Geral: Esta lição explora a transição da manipulação básica de dados para padrões avançados de programação funcional e orientada a objetos no JavaScript. Aborda armazenamento eficiente de dados usando Mapas e objetos globais, o poder das funções de ordem superior para abstrair ações (filtragem, transformação e resumo), e os mecanismos subjacentes do sistema de objetos do JavaScript, incluindo protótipos, construtores e polimorfismo.
Resultados de Aprendizagem:
- Utilizar métodos especializados de objetos e arrays para gerenciar estruturas de dados complexas e strings.
- Implementar funções de ordem superior (
filter,map,reduce) para abstrair lógica e compor transformações de dados. - Navegar e manipular a cadeia de protótipos para criar instâncias de objetos estruturadas e reutilizáveis e interfaces polimórficas.
🔹 Lição 4: Orientação a Objetos e Gerenciamento de Erros
Visão Geral: Esta lição explora padrões avançados de orientação a objetos no JavaScript, focando em polimorfismo por meio de interfaces de layout de tabela e no design de um ecossistema simulado ("Vida Eletrônica"). Transita para confiabilidade de software, cobrindo o "Modo Estrito", técnicas de depuração e a importância de testes estruturados para mitigar erros comuns dos programadores.
Resultados de Aprendizagem:
- Implementar interfaces polimórficas para lidar com visualizações de dados complexas (tabelas).
- Contrastar herança e composição para construir estruturas de objetos extensíveis.
- Gerenciar o contexto de execução (
this) dentro de funções de ordem superior e métodos de objetos.
🔹 Lição 5: Correspondência de Padrões e Modularização
Visão Geral: Esta lição aborda os requisitos duplos da programação moderna: processar dados de string complexos e organizar o código em estruturas sustentáveis. Os alunos aprenderão a usar Expressões Regulares para descrever e manipular padrões de texto, seguidas de uma exploração da Modularização para isolar código, gerenciar namespaces e facilitar a reutilização.
Resultados de Aprendizagem:
- Construir e testar expressões regulares usando notação literal e de construtor.
- Implementar técnicas avançadas de correspondência de padrões, incluindo agrupamento, retrocesso e repetição não gulosa.
- Aplicar princípios de design modular para evitar poluição de namespace e desconectar componentes do programa.
🔹 Lição 6: Design de Linguagem e Ambiente Web
Visão Geral: Esta lição explora a transição da estruturação de software para a criação de uma linguagem de programação personalizada chamada "Egg". Ela conecta ainda mais esses conceitos ao ambiente da Web, detalhando como redes, HTML e o Modelo de Objeto do Documento (DOM) criam uma interface programável para navegadores. Os alunos aprenderão a gerenciar complexidade do código por meio de modularidade e manipular documentos web ativos usando JavaScript.
Resultados de Aprendizagem:
- Implementar sistemas de módulos robustos usando a função
definee gerenciar dependências complexas. - Construir um parser e avaliador funcionais para uma linguagem específica de domínio, incluindo suporte a escopo e funções.
- Explicar a arquitetura da Web, incluindo TCP/IP, estrutura HTML e implicações de segurança do sandbox do navegador.
🔹 Lição 7: Eventos e Plataformas Interativas
Visão Geral: Esta lição explora a sinergia entre manipulação do Modelo de Objeto do Documento (DOM), estilos CSS e tratamento avançado de eventos para criar experiências web interativas e jogos. Os alunos aprenderão a controlar layout e animação, gerenciar a natureza assíncrona das entradas do usuário, otimizar desempenho por meio de técnicas de tempo e arquitetar um jogo baseado em grade usando princípios orientados a objetos.
Resultados de Aprendizagem:
- Manipular Layout e Estilos do DOM: Usar JavaScript para ler dimensões de elementos, aplicar estilos em cascata e animar elementos usando posicionamento CSS e trigonometria.
- Dominar a Orquestração de Eventos: Implementar tratamento avançado de eventos, incluindo controle de propagação, prevenção de ações padrão e gerenciamento de eventos especializados (teclado, mouse, rolagem e foco).
- Otimizar Execução de Scripts: Aplicar workers de web para processamento em segundo plano e utilizar debouncing/throttling para gerenciar eventos de alta frequência.
🔹 Lição 8: Gráficos com Canvas e Protocolos de Rede
Visão Geral: Esta lição explora a transição da renderização de jogos baseada em DOM para a API de alto desempenho HTML5 Canvas, juntamente com os mecanismos fundamentais da física de plataformas 2D. Os alunos aprenderão a implementar lógica de jogo complexa, incluindo gravidade e detecção de colisão, enquanto dominam técnicas imperativas de desenho. Além disso, a lição introduz o protocolo HTTP e o objeto XMLHttpRequest para lidar com comunicação cliente-servidor.
Resultados de Aprendizagem:
- Implementar detecção de colisão baseada em grade e movimento sob influência da gravidade em um ambiente de jogo.
- Utilizar a API HTML5 Canvas para renderizar caminhos, curvas, imagens e folhas de sprites animadas.
- Aplicar transformações de coordenadas (escala, rotação, inversão) e gerenciar estados do contexto usando
saveerestore.
🔹 Lição 9: Formulários Avançados e Aplicações Persistentes
Visão Geral: Esta lição explora técnicas avançadas de desenvolvimento web, focando em comunicação assíncrona via XMLHttpRequest e Promessas, interação profunda com campos de formulários HTML e persistência de dados no lado do cliente. Os alunos aprenderão a gerenciar requisições de rede com cabeçalhos personalizados e tratar erros em fluxos assíncronos, construindo uma aplicação de pintura modular e uma ferramenta de anotações persistente.
Resultados de Aprendizagem:
- Configurar e executar requisições de rede assíncronas usando XMLHttpRequest e encadeamento baseado em Promessas.
- Manipular comportamentos complexos de formulários, incluindo gerenciamento de foco, desativação de campos e manipulação de arquivos.
- Implementar armazenamento de dados no lado do cliente usando
localStorageesessionStoragepara manter o estado da aplicação.
🔹 Lição 10: Desenvolvimento do Lado do Servidor com Node.js
Visão Geral: Esta lição pontua a lacuna entre interatividade avançada do lado do cliente e lógica do lado do servidor. Os alunos primeiro dominarão ferramentas avançadas de manipulação de canvas e restrições de segurança do navegador antes de transitar para o ambiente Node.js para construir servidores de arquivos assíncronos e aplicações web em tempo real usando polling prolongado e roteamento RESTful.
Resultados de Aprendizagem:
- Implementar ferramentas de desenho avançadas (Linha, Apagar, Spray Paint, Preencher) e gerenciar segurança do canvas (contaminação).
- Executar scripts do lado do servidor usando Node.js, gerenciar dependências via NPM e lidar com I/O assíncrono com callbacks e promessas.
- Construir um servidor HTTP funcional capaz de manipular arquivos, processar requisições JSON e fornecer atualizações em tempo real via polling prolongado.