kb.erickguedes.com
JavaScript: Fundamentos para Web

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.