Controle de Fluxo e Funções
Aula 2 de 8
Controle de Fluxo
if/else
const nota = 85;
if (nota >= 90) {
console.log('A');
} else if (nota >= 80) {
console.log('B');
} else if (nota >= 70) {
console.log('C');
} else {
console.log('D');
}
// Early return (boa prática)
function validarIdade(idade) {
if (idade < 0) return 'Idade inválida';
if (idade < 18) return 'Menor de idade';
return 'Maior de idade';
}
switch
const dia = new Date().getDay();
switch (dia) {
case 0:
console.log('Domingo');
break;
case 6:
console.log('Sábado');
break;
default:
console.log('Dia útil');
}
Loops
// for clássico
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
// while
let count = 0;
while (count < 3) {
console.log(count);
count++;
}
// do-while (executa pelo menos uma vez)
let x = 0;
do {
console.log(x);
x++;
} while (x < 3);
// for...of (iteráveis: arrays, strings, Map, Set)
const frutas = ['maçã', 'banana', 'laranja'];
for (const fruta of frutas) {
console.log(fruta);
}
// for...in (objetos - cuidado!)
const pessoa = { nome: 'João', idade: 30 };
for (const chave in pessoa) {
console.log(`${chave}: ${pessoa[chave]}`);
}
// break e continue
for (const num of [1, 2, 3, 4, 5]) {
if (num === 3) continue; // pula o 3
if (num === 5) break; // para no 5
console.log(num); // 1, 2, 4
}
Funções
Declaração e Expressão
// Function declaration (hoisting - pode chamar antes)
function soma(a, b) {
return a + b;
}
// Function expression (sem hoisting)
const mult = function(a, b) {
return a * b;
};
// Arrow function
const div = (a, b) => a / b;
// Arrow com corpo explícito
const saudacao = (nome) => {
const hora = new Date().getHours();
const periodo = hora < 12 ? 'Bom dia' : 'Boa tarde';
return `${periodo}, ${nome}!`;
};
Parâmetros
// Parâmetros default
function cumprimentar(nome = 'Visitante', saudacao = 'Olá') {
return `${saudacao}, ${nome}!`;
}
// Rest parameters (...args)
function somarTodos(...numeros) {
return numeros.reduce((acc, n) => acc + n, 0);
}
console.log(somarTodos(1, 2, 3, 4)); // 10
// Spread em chamada de função
const nums = [1, 2, 3];
console.log(Math.max(...nums)); // 3
Hoisting e Escopo
// Hoisting: declarações são "elevadas"
console.log(soma(2, 3)); // funciona!
function soma(a, b) {
return a + b;
}
// Arrow não tem hoisting
// console.log(subtrai(5, 2)); // Erro!
const subtrai = (a, b) => a - b;
// Escopo
const global = 'global';
function exemplo() {
const local = 'local';
console.log(global); // acessa
console.log(local); // acessa
}
// console.log(local); // Erro!
Closure
function contador() {
let count = 0;
return function() {
count++;
return count;
};
}
const incrementar = contador();
console.log(incrementar()); // 1
console.log(incrementar()); // 2
console.log(incrementar()); // 3
Lab: Sistema de Notas
Crie funções para calcular média, aprovação e conceito. Use arrow functions, for...of e closures.
node sistema-notas.js
const calcularMedia = (...notas) =>
notas.reduce((acc, n) => acc + n, 0) / notas.length;
const verificarAprovacao = (media) =>
media >= 7 ? 'Aprovado' : media >= 5 ? 'Recuperação' : 'Reprovado';
const notas = [8.5, 7.0, 9.2, 6.8];
const media = calcularMedia(...notas);
console.log(`Média: ${media.toFixed(2)} - ${verificarAprovacao(media)}`);
Funções são cidadãs de primeira classe em JS. Domine arrow functions, closures e parâmetros rest/spread para escrever código expressivo.