1
resposta

Desafio: hora de praticar semana 03



// Função para validar se um número é positivo, negativo ou zero
function validarNumero(numero) {
    if (typeof numero !== 'number') {
        throw new Error('Entrada inválida: deve ser um número');
    }
    if (numero > 0) return 'positivo';
    if (numero < 0) return 'negativo';
    return 'zero';
}

// Função para verificar se uma pessoa é maior de idade
function ehMaiorDeIdade(idade) {
    if (!Number.isInteger(idade) || idade <= 0) {
        throw new Error('Idade inválida');
    }
    return idade >= 18;
}

// Função para validar se uma string está vazia
function stringEstaVazia(texto) {
    return typeof texto === 'string' && texto.trim().length === 0;
}

// Função para verificar se um ano é bissexto
function ehAnoBissexto(ano) {
    if (!Number.isInteger(ano) || ano <= 0) {
        throw new Error('Ano inválido');
    }
    return (ano % 4 === 0 && ano % 100 !== 0) || (ano % 400 === 0);
}

// Função para calcular a média de dois números
function calcularMedia(num1, num2) {
    if (typeof num1 !== 'number' || typeof num2 !== 'number') {
        throw new Error('Ambos os valores devem ser números');
    }
    return (num1 + num2) / 2;
}

// Função para retornar o tamanho de um array
function tamanhoArray(arr) {
    if (!Array.isArray(arr)) {
        throw new Error('Entrada inválida: deve ser um array');
    }
    return arr.length;
}

// Exemplo com array e includes
const frutas = ['maçã', 'banana', 'laranja'];
console.log('Verificando se banana está nas frutas:', frutas.includes('banana'));

// Função para verificar presença de elemento em array
function contemElemento(array, elemento) {
    if (!Array.isArray(array)) {
        throw new Error('Primeiro parâmetro deve ser um array');
    }
    return array.includes(elemento);
}

// Exemplo com array de strings
const cores = ['vermelho', 'azul', 'verde'];
console.log('Verificando se azul está nas cores:', contemElemento(cores, 'azul'));

// Função para buscar objeto em array de objetos
function encontrarEstudante(estudantes, estudanteProcurado) {
    if (!Array.isArray(estudantes) || !estudantes.every(e => typeof e === 'object')) {
        throw new Error('Primeiro parâmetro deve ser um array de objetos');
    }
    if (typeof estudanteProcurado !== 'object') {
        throw new Error('Segundo parâmetro deve ser um objeto');
    }
    
    const chaveBusca = Object.keys(estudanteProcurado)[0];
    const valorBusca = estudanteProcurado[chaveBusca];
    
    return estudantes.some(estudante => 
        estudante[chaveBusca] === valorBusca
    );
}

// Exemplo com array de objetos
const alunos = [
    { nome: 'João', idade: 20 },
    { nome: 'Maria', idade: 22 },
    { nome: 'Pedro', idade: 21 }
];

console.log('Buscando aluno Pedro:', encontrarEstudante(alunos, { nome: 'Pedro' }));

// Função para calcular soma dos pares e produto dos ímpares
function processarNumeros(numeros) {
    if (!Array.isArray(numeros) || !numeros.every(n => typeof n === 'number')) {
        throw new Error('Entrada deve ser um array de números');
    }
    
    const somaPares = numeros.reduce((acc, num) => 
        num % 2 === 0 ? acc + num : acc, 0
    );
    
    const produtoImpares = numeros.reduce((acc, num) => 
        num % 2 !== 0 ? (acc === 0 ? num : acc * num) : acc, 0
    );
    
    return { somaPares, produtoImpares };
}

//e
const numerosTeste = [1, 2, 3, 4];
console.log('Processando números:', processarNumeros(numerosTeste));
1 resposta

Oi André, tudo bem? 😊

Excelente trabalho com as funções!

Você abordou uma variedade de operações, desde validações básicas até manipulações mais complexas de arrays e objetos.

  1. Validação de Números e Tipos: Você utilizou typeof e Number.isInteger() de forma eficaz para garantir que as entradas das funções sejam dos tipos esperados. Isso é crucial para evitar erros e comportamentos inesperados. 👍

  2. Funções de Validação (String Vazia, Ano Bissexto): As funções stringEstaVazia e ehAnoBissexto são ótimos exemplos de como encapsular lógicas específicas em funções reutilizáveis. Isso torna o código mais limpo e fácil de manter.

  3. Manipulação de Arrays: Você demonstrou conhecimento em várias operações de arrays, como includes, reduce e some. Essas funções são poderosas para trabalhar com coleções de dados.

  4. Busca em Array de Objetos: A função encontrarEstudante é um exemplo mais avançado, que mostra como buscar um objeto dentro de um array com base em uma propriedade específica. Você utilizou Object.keys e some de forma inteligente para realizar essa busca. 🔎

  5. Função processarNumeros: Essa função combina reduce com lógica condicional para calcular a soma dos números pares e o produto dos ímpares em um array. É um ótimo exemplo de como usar reduce para realizar cálculos mais complexos.

  6. Tratamento de Erros: Você incluiu tratamento de erros em suas funções, lançando exceções quando as entradas são inválidas. Isso é uma boa prática, pois ajuda a identificar e lidar com problemas durante a execução do código.

🎓 Para saber mais: