GithubHelp home page GithubHelp logo

juniormira0 / zoo-functions Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 176 KB

Neste projeto, fomos responsáveis por implementar algumas funções utilizando HOFs (Higher Order Functions) para manipularmos objetos e arrays, com o intuito de extrair informações de forma clara, legível e escalável.

JavaScript 100.00%
hof javascript

zoo-functions's Introduction

Boas vindas ao repositório do projeto de ES6 e Higher Order Functions!

Aqui você vai encontrar os detalhes de como foi o desenvolvimento do projeto.


Habilidades

  • Produzir código legível, conciso e expressivo utilizando as novas funcionalidades do ES6;
  • Utilizar as Higher Order Functions para manipular e criar arrays;
  • Escolher a Higher Order Function mais adequada para a obtenção de um resultado esperado;
  • Aprender a usar de forma conjunta as Higher Order Functions;
  • Interpretar testes unitários e produzir soluções que atendam a eles.

Desenvolvimento

Neste projeto, fomos responsáveis por implementar algumas funções utilizando HOFs (Higher Order Functions) para manipularmos objetos e arrays, com o intuito de extrair informações de forma clara, legível e escalável.

Para isso, implementamos as funções em alguns arquivos JavaScript, contidos na pasta functions.

Requisitos do projeto

Você deverá implementar as funções que estão na pasta src. Para ver o retorno que a função deverá ter, leia o arquivo de testes referente a ela. Lembre-se de aplicar as novas funcionalidades do ES6 como arrow functions, template literals, spread operator, parâmetro rest, object destructuring, entre outras. Utilize também as Higher Order Functions.

Dica: uma importante soft-skill é saber como gerenciar seu tempo. Os exercícios não estão ordenados por ordem de complexidade e uns são mais desafiadores que os outros. Caso tenha dificuldade em algum deles, pule-o, resolva outro, e, quando se sentir confortável, volte ao exercício em questão. A ideia é não ficar preso a um problema por um longo período. Realizar outros exercícios pode te ajudar a enxergar e/ou aprender novas maneiras de se chegar ao resultado esperado.

Antes de começar, analise o arquivo data/zoo_data.js, para ver os dados que serão usados.


1. Implemente a função getSpeciesByIds

Esta função é responsável pela busca das espécies de animais por id. Ela retorna um array contendo as espécies referentes aos ids passados como parâmetro, podendo receber um ou mais ids.

Observações técnicas

  • O parâmetro desta função pode ser alterado para atender ao requisito proposto.

O que será avaliado

  • Caso receba nenhum parâmetro, necessário retornar um array vazio;
  • Ao receber como parâmetro um único id, retorna um array com a espécie referente à esse id;
  • Ao receber mais de um id, retorna um array com as espécies referentes aos ids.

2. Implemente a função getAnimalsOlderThan

Esta função, a partir do nome de uma espécie e uma idade mínima, verifica se todos os animais daquela espécie possuem a idade mínima especificada.

Observações técnicas

  • Deve retornar um valor booleano.

O que será avaliado

  • Ao passar o nome de uma espécie e uma idade, testa se todos os animais desta espécie possuem a idade mínima especificada.

3. Implemente a função getEmployeeByName

Esta função é responsável pela busca das pessoas colaboradoras através do primeiro ou do último nome delas

O que será avaliado

  • Sem parâmetros, retorna um objeto vazio
  • Quando provido o primeiro nome do funcionário, retorna o objeto do funcionário
  • Quando provido o último nome do funcionário, retorna o objeto do funcionário

4. Implemente a função getRelatedEmployees

Considerando a boa prática de dividir o código em partes menores, apresentamos a função getRelatedEmployees em que você deverá dividí-la em duas funções:

1 - isManager - que será responsável por verificar se uma pessoa colaboradora é gerente ou não. O retorno dessa função deve ser um booleano: true ou false;

2 - getRelatedEmployees - que utiliza a primeira função para apresentar as seguintes saídas:

  • se for uma pessoa colaboradora gerente, deve retornar um array contendo os nomes das pessoas colaboradoras que ela é responsável;
  • se não for uma pessoa colaboradora gerente, deverá ser lançado um erro gerado com a função construtora Error da biblioteca padrão do JavaScript com a mensagem "O id inserido não é de uma pessoa colaboradora gerente!".

Exemplo:

throw new Error('O id inserido não é de uma pessoa colaboradora gerente!');

Você pode ler mais sobre a função construtora Error, neste link.

Observações técnicas

  • Retorna um array contendo nome e sobrenome das pessoas colaboradoras gerenciadas por determinada pessoa com cargo de gerência.

Exemplo de output:

[ 'Burl Bethea', 'Ola Orloff', 'Emery Elser' ];
  • Dispara um erro com a mensagem: "O id inserido não é de uma pessoa colaboradora gerente!".

O que será avaliado

  • Retorna true se o id passado for de um gerente;
  • Retorna false se o id passado não for de um gerente;
  • Se o id passado for de um gerente, retorna um array contendo nome e sobrenome das pessoas colaboradoras que ela é responsável;
  • Se o id passado não for de um gerente, dispara um erro com a mensagem: "O id inserido não é de uma pessoa colaboradora gerente!".

5. Implemente a função countAnimals

Esta função é responsável por contabilizar a quantidade de animais de cada espécie.

Observações técnicas

  • Se nenhum argumento for passado, retorna um objeto cujo o nome de cada espécie é uma chave desse objeto, e o total de animais dessa espécie é o seu valor;
  • Com o argumento { specie: 'penguins' }, retorna um número, a quantidade de pinguins no zoológico;
  • Com o argumento { specie: 'giraffes', sex: 'female' }, retorna um número, a quantidade de girafas do sexo feminino.

O que será avaliado

  • Sem parâmetros, retorna as espécies e sua quantidade;
  • Recebendo como parâmetro um objeto com a chave specie, retorna um número, a quantidade de animais daquela espécie;
  • Recebendo como parâmetro um objeto com a chave specie e sex, retorna um número, a quantidade de animais daquela espécie, no sexo selecionado.

6. Implemente a função calculateEntry

Esta função irá receber um array de visitantes no seguinte formato:

const entrants = [
  { name: 'Lara Carvalho', age: 5 },
  { name: 'Frederico Moreira', age: 5 },
  { name: 'Pedro Henrique Carvalho', age: 5 },
  { name: 'Maria Costa', age: 18 },
  { name: 'Núbia Souza', age: 18 },
  { name: 'Carlos Nogueira', age: 50 },
];

Você deve isolar a parte da lógica na função countEntrants que se encontra no mesmo arquivo da função calculateEntry. Ela deverá receber o array de visitantes e retornar um objeto com a contagem de acordo com os seguintes critérios de classificação:

  • Pessoas com idade menor que 18 anos são classificadas como crianças (child);
  • Pessoas com idade maior ou igual a 18 anos e menor que 50 são classicadas como adultas (adult);
  • Pessoas com idade maior ou igual 50 anos são classificadas como pessoas com mais idade (senior).

O retorno da função deverá ser um objeto no seguinte formato: { child: 3, adult: 2, senior: 1 }.

Exemplo de uso da função countEntrants:

countEntrants(entrants);

Saída:

{ "child": 3, "adult": 2, "senior": 1 }

Após terminar a implementação da função countEntrants você deverá utilizá-la para implementar a função calculateEntry. Esta deverá receber um array de visitantes e a partir da quantidade de visitantes e faixa etária de cada um, deverá retornar o valor total a ser cobrado.

Exemplo de uso da função calculateEntry:

calculateEntry(entrants);

Saída:

187.94

Observações técnicas

  • Ambas funções recebem como parâmetro um array contendo objetos que representam pessoas.

O que será avaliado

  • Ao receber um array de visitantes, retorna um objeto com a contagem;
  • Retorna 0 se nenhum argumento for passado;
  • Retorna 0 se um objeto vazio for passado;
  • Retorna o preço total a ser cobrado dado o array de pessoas.

7. Implemente a função getAnimalMap

A função é responsável pelo mapeamento geográfico das espécies e seus animais, podendo ainda filtrá-los por ordem alfabética e sexo.

Observações técnicas

  • Analise o teste unitário para entender os retornos que são esperados para esta função.

O que será avaliado

  • Sem parâmetros, retorna animais categorizados por localização;
  • Sem a opção includeNames especificada, retorna animais categorizados por localização;
  • Com a opção includeNames: true especificada, retorna nomes de animais;
  • Com a opção sorted: true especificada, retorna nomes de animais ordenados;
  • Com a opção sex: 'female' ou sex: 'male' especificada, retorna somente nomes de animais macho/fêmea;
  • Com a opção sex: 'female' ou sex: 'male' especificada e a opção sorted: true especificada, retorna somente nomes de animais macho/fêmea com os nomes dos animais ordenados;

8. Implemente a função getSchedule

A função é responsável por disponibilizar as informações de horário dos animais em uma consulta para o usuário, que pode querer ter acesso ao cronograma da semana, de um dia ou de um animal em específico.

Observações técnicas

  • Analise os testes unitários para entender os retornos que são esperados para esta função;
  • Quebre o problema em funções menores para que fique mais simples de administrar a responsabilidade de cada uma delas.

O que será avaliado

  • Sem parâmetros, retorna os horários para cada dia e quais animais estarão disponíveis;
  • Com parâmetros que não sejam nem um animal e nem um dia, retorna os horários para cada dia e quais animais estarão disponíveis;
  • Se um único dia for passado, retorna os horários para aquele dia e quais animais estarão disponíveis;
  • Se o nome de um animal for passado, deverá retornar um array com os dias em que ele estará em exibição.

9. Implemente a função getOldestFromFirstSpecies

A função busca por informações do animal mais velho da primeira espécie gerenciada pela pessoa colaboradora do parâmetro.

O que será avaliado

  • Passado o id de um funcionário, encontra a primeira espécie de animal gerenciado pelo funcionário, e retorna um array com nome, sexo e idade do animal mais velho dessa espécie.

10. Implemente a função getEmployeesCoverage

Esta função será responsável por associar informações de cobertura das pessoas funcionárias.

A cobertura deverá ser representada por um objeto com as seguintes propriedades:

{
  "id": "4b40a139-d4dc-4f09-822d-ec25e819a5ad", // id da pessoa
  "fullName": "Sharonda Spry", // nome completo: firstName + lastName
  "species": [ "otters", "frogs" ], // espécies as quais a pessoa é responsável
  "locations": [ "SE", "SW" ], // Um array contendo todas as localizações das espécies
}

A função deve receber um objeto de opções que determinará seu comportamento, sendo:

  • name: O nome ou sobrenome da pessoa a ser buscada
  • id: O id da pessoa a ser buscada

Exemplos de uso da função getEmployeesCoverage:

getEmployeesCoverage({ name: 'Sharonda' });
getEmployeesCoverage({ name: 'Spry' });
getEmployeesCoverage({ id: '4b40a139-d4dc-4f09-822d-ec25e819a5ad' });

Saída:

{
  "id": "4b40a139-d4dc-4f09-822d-ec25e819a5ad",
  "fullName": "Sharonda Spry",
  "species": [ "otters", "frogs" ],
  "locations": [ "SE", "SW" ]
}

Ao ser chamada sem argumentos, deverá retornar um array com a cobertura de todas as pessoas funcionárias:

Exemplo:

getEmployeesCoverage();

Saída:

[
  {
    "id": "c5b83cb3-a451-49e2-ac45-ff3f54fbe7e1",
    "fullName": "Nigel Nelson",
    "species": [ "lions", "tigers" ],
    "locations": [ "NE", "NW" ],
  },
  {
    "id": "0e7b460e-acf4-4e17-bcb3-ee472265db83",
    "fullName": "Burl Bethea",
    "species": [ "lions", "tigers", "bears", "penguins" ],
    "locations": [ "NE", "NW", "NW", "SE" ],
  },
  {
    "id": "fdb2543b-5662-46a7-badc-93d960fdc0a8",
    "fullName": "Ola Orloff",
    "species": [ "otters", "frogs", "snakes", "elephants" ],
    "locations": [ "SE", "SW", "SW", "NW" ],
  },
  //[...]
];

Caso nenhuma pessoa seja encontrada com o nome, sobrenome ou id, deverá ser lançado um erro gerado com a função construtora Error da biblioteca padrão do JavaScript com a mensagem "Informações inválidas". Exemplo:

throw new Error('Informações inválidas');

Você pode ler mais sobre a função construtora Error, neste link.

Dica: Crie funções que dividam a tarefa em partes menores, por exemplo, você poderia criar uma função getSpecies encarregada somente por buscar o nome das espécies que a pessoa é responsável.

Observações técnicas

  • Ao receber o objeto de opções com a propriedade name, procura a pessoa funcionária correspondente;
  • A opção name deverá aceitar nome e sobrenome para realizar a busca;
  • Ao chamar a função sem argumentos ela deve retornar um array com a cobertura de todas as pessoas funcionárias.

O que será avaliado

  • Se o objeto de opções tiver a propriedade name, retorna somente a pessoa correspondente;
  • A propriedade name do objeto de opções também funciona usando o segundo nome;
  • Se o objeto de opções tiver a propriedade id, retorna somente a pessoa correspondente;
  • Sem parâmetros, retorna uma lista com a cobertura de todas as pessoas funcionárias;
  • Caso não haja nenhuma pessoa com o nome ou id especificados deverá ser lançado um error.


Avaliação do projeto

Ao finalizar e submeter o projeto, não se esqueça de avaliar sua experiência preenchendo o formulário. Leva menos de 3 minutos!

Link: Formulário de avaliação de projeto


Ordem dos requisitos no avaliador automático

O avaliador automático não necessariamente avalia seu projeto na ordem em que os requisitos aparecem no readme. Isso acontece para deixar o processo de avaliação mais rápido. Então, não se assuste se isso acontecer, ok?

zoo-functions's People

Contributors

anabergerr avatar jeanpsv avatar juniormira0 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.