Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refatorar função eguamat.media() #68

Closed
lucaspompeun opened this issue Jan 11, 2021 · 9 comments
Closed

Refatorar função eguamat.media() #68

lucaspompeun opened this issue Jan 11, 2021 · 9 comments
Labels
invalid This doesn't seem right

Comments

@lucaspompeun
Copy link
Member

egua/src/lib/eguamat.js

Lines 343 to 351 in 5671a03

module.exports.media = function(a) {
if (isNaN(num) || num === null)
throw new RuntimeError(
this.token,
"Você deve prover valores para media(a)."
);
return smtr(a)/a.length;
};

@lucaspompeun lucaspompeun added the invalid This doesn't seem right label Jan 11, 2021
@barbozafernando
Copy link
Contributor

@lucaspompeun, essa média seria o cálculo de média normal mesmo, né? Tipo, se eu passo 5 valores, somo todos e divido por 5. Seria isso?

@lucaspompeun
Copy link
Member Author

@barbozafernando positivo, é isso mesmo. Nesses caso o argumento precisa ser uma lista.

@barbozafernando
Copy link
Contributor

barbozafernando commented Feb 15, 2021

Pompeu, pensei em duas formas de implementar essa função.

  • A primeira, é o cara chamando media() e passando quantos parâmetros quiser pra fazer a média.
    Seria algo como:
var mat = importar('eguamat');
escreva(mat.media(2, 5, 10, 20));
// 9.25 
  • A segunda, seria como vc falou. O cara já passar uma lista pra fazer o cálculo.

Daria pra implementar os dois modos. O que acha, @lucaspompeun ?

@lucaspompeun
Copy link
Member Author

Acho perfeito fazer os dois.

@lucaspompeun lucaspompeun changed the title Refatorar verificação de parâmetros Refatorar função eguamat.media() Feb 15, 2021
@barbozafernando
Copy link
Contributor

barbozafernando commented Feb 15, 2021

Mas pensando aqui, Pompeu. Cara, mas será que se fizer dos dois jeitos, não vai dar na mesma? Vou te mostrar o porquê.

module.exports.media = function () {
  // Pega cada item que veio por parâmetro e coloca em uma posição diferente em um array.
  const args = [...arguments];

  // Soma todos os itens.
  const valoresSomados = args.reduce((acumulador, itemAtual) => acumulador + itemAtual, 0);

  // Faz o cáculo da média em si e retorna.
  return (valoresSomados / args.length);
};

Então desse modo, na implementação já colocaria tudo em um array, então não faria muito sentido permitir o usuário mandar um array de valores ou apenas os valores separados por vírgula, porque no final das contas, vai dar no mesmo.
Pensando assim, o método então receberia apenas os valores que o usuário gostaria de cácular a média e obviamente, todos tem de ser do tipo número.

O que acham, @lucaspompeun e @leonelsanchesdasilva ?

@lucaspompeun
Copy link
Member Author

Mas pensando aqui, Pompeu. Cara, mas será que se fizer dos dois jeitos, não vai dar na mesma? Vou te mostrar o porquê.

module.exports.media = function () {
  // Pega cada item que veio por parâmetro e coloca em uma posição diferente em um array.
  const args = [...arguments];

  // Soma todos os itens.
  const valoresSomados = args.reduce((acumulador, itemAtual) => acumulador + itemAtual, 0);

  // Faz o cáculo da média em si e retorna.
  return (valoresSomados / args.length);
};

Então desse modo, na implementação já colocaria tudo em um array, então não faria muito sentido permitir o usuário mandar um array de valores ou apenas os valores separados por vírgula, porque no final das contas, vai dar no mesmo.
Pensando assim, o método então receberia apenas os valores que o usuário gostaria de cácular a média e obviamente, todos tem de ser do tipo número.

O que acham, @lucaspompeun e @leonelsanchesdasilva ?

Eu particularmente gosto que tenha como entrada um vetor pois ajuda o usuário a entender uma das aplicações de vetores. Esse é o motivo pelo qual gosto de ter o vetor como entrada. O que vocês acham?

@leonelsanchesdasilva
Copy link
Contributor

Mas pensando aqui, Pompeu. Cara, mas será que se fizer dos dois jeitos, não vai dar na mesma? Vou te mostrar o porquê.

module.exports.media = function () {
  // Pega cada item que veio por parâmetro e coloca em uma posição diferente em um array.
  const args = [...arguments];

  // Soma todos os itens.
  const valoresSomados = args.reduce((acumulador, itemAtual) => acumulador + itemAtual, 0);

  // Faz o cáculo da média em si e retorna.
  return (valoresSomados / args.length);
};

Então desse modo, na implementação já colocaria tudo em um array, então não faria muito sentido permitir o usuário mandar um array de valores ou apenas os valores separados por vírgula, porque no final das contas, vai dar no mesmo.
Pensando assim, o método então receberia apenas os valores que o usuário gostaria de cácular a média e obviamente, todos tem de ser do tipo número.

O que acham, @lucaspompeun e @leonelsanchesdasilva ?

A implementação considerando número variável de argumentos é possível, mas vai aumentar o tratamento dos argumentos.

Nada me impediria, por exemplo, de passar uma série indefinida de arrays numéricos, o que já faria o método falhar na hora de fazer a redução. Um .flat() de todos os arrays antes teria que ser feito.

Eu faria media() apenas aceitando um vetor único de números. Se houver necessidade de implementar uma versão mais robusta, isso pode ser feito depois.

@barbozafernando
Copy link
Contributor

barbozafernando commented Feb 16, 2021

Mas pensando aqui, Pompeu. Cara, mas será que se fizer dos dois jeitos, não vai dar na mesma? Vou te mostrar o porquê.

module.exports.media = function () {
  // Pega cada item que veio por parâmetro e coloca em uma posição diferente em um array.
  const args = [...arguments];

  // Soma todos os itens.
  const valoresSomados = args.reduce((acumulador, itemAtual) => acumulador + itemAtual, 0);

  // Faz o cáculo da média em si e retorna.
  return (valoresSomados / args.length);
};

Então desse modo, na implementação já colocaria tudo em um array, então não faria muito sentido permitir o usuário mandar um array de valores ou apenas os valores separados por vírgula, porque no final das contas, vai dar no mesmo.
Pensando assim, o método então receberia apenas os valores que o usuário gostaria de cácular a média e obviamente, todos tem de ser do tipo número.
O que acham, @lucaspompeun e @leonelsanchesdasilva ?

A implementação considerando número variável de argumentos é possível, mas vai aumentar o tratamento dos argumentos.

Nada me impediria, por exemplo, de passar uma série indefinida de arrays numéricos, o que já faria o método falhar na hora de fazer a redução. Um .flat() de todos os arrays antes teria que ser feito.

Eu faria media() apenas aceitando um vetor único de números. Se houver necessidade de implementar uma versão mais robusta, isso pode ser feito depois.

Eu estava fazendo exatamente isso. Estava tentando implementar desse jeito aí, e cara, terei que fazer vários tratamentos nos argumentos. No momento, talvez não seja necessário mesmo. Concordo em aceitar apenas o array. O que acha, Pompeu?

@lucaspompeun
Copy link
Member Author

Podemos ficar com o argumento único de array.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
invalid This doesn't seem right
Projects
None yet
Development

No branches or pull requests

3 participants