Esse codigo é muito gambiarra?

1. Esse codigo é muito gambiarra?

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 12/10/2014 - 20:36h

Ola pessoal , eu decidi tentar fazer uma coisa (nao posso falar agr , depois vcs verao),e usei esse codigo , mas acho que ele está muito gambiarra.

Alguem ae que manja dos Javascript pode alterar-lo e deixar-lo menos gambiarra ?


var nota1 = 0,nota2 = 0,nota3 = 0,nota4 = 0;

function testaValor(){

if(nota1 < 0 || nota1 > 10 || isNaN(nota1)){

alert("Nota 1 " + materia + " Invalida");

return "Erro";

}

if(nota2 < 0 || nota2 > 10 || isNaN(nota2)){

alert("Nota 2 " + materia + " Invalida");

return "Erro";

}


if(nota3 < 0 || nota3 > 10 || isNaN(nota3)){

alert("Nota 3 " + materia + " Invalida");

return "Erro";

}

if(nota4 < 0 || nota4 > 10 || isNaN(nota4)){

alert("Nota 4 " + materia + " Invalida");

return "Erro";

}
}


function pegaP() {

materia="Portugues";

nota1 = document.getElementById('notaPort1').value;

if(testaValor() == "Erro"){return;}

nota2 = document.getElementById('notaPort2').value;

if(testaValor() == "Erro"){return;}

nota3 = document.getElementById('notaPort3').value;

if(testaValor() == "Erro"){return;}

nota4 = document.getElementById('notaPort4').value;

if(testaValor() == "Erro"){return;}

var media = parseFloat(nota1) + parseFloat(nota2) + parseFloat(nota3) + parseFloat(nota4);

media /= 4;

document.getElementById("MediaP").innerHTML = media;
}

function pegaM() {

materia="Matematica";

nota1 = document.getElementById('notaMat1').value;

if(testaValor() == "Erro"){return;}

nota2 = document.getElementById('notaMat2').value;

if(testaValor() == "Erro"){return;}

nota3 = document.getElementById('notaMat3').value;

if(testaValor() == "Erro"){return;}

nota4 = document.getElementById('notaMat4').value;

if(testaValor() == "Erro"){return;}

var media = parseFloat(nota1) + parseFloat(nota2) + parseFloat(nota3) + parseFloat(nota4);

media /= 4;

document.getElementById("MediaM").innerHTML = media;
}

function pegaC() {

materia="Ciencias";

nota1 = document.getElementById('notaCie1').value;

if(testaValor() == "Erro"){return;}

nota2 = document.getElementById('notaCie2').value;

if(testaValor() == "Erro"){return;}

nota3 = document.getElementById('notaCie3').value;

if(testaValor() == "Erro"){return;}

nota4 = document.getElementById('notaCie4').value;

if(testaValor() == "Erro"){return;}

var media = parseFloat(nota1) + parseFloat(nota2) + parseFloat(nota3) + parseFloat(nota4);

media /= 4;

document.getElementById("MediaC").innerHTML = media;
}




Grato desde já

[]'s

T+


  


2. Re: Esse codigo é muito gambiarra?

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/10/2014 - 20:53h

É só arrumar a indentação ;)


var nota1 = 0;
var nota2 = 0;
var nota3 = 0;
var nota4 = 0;

function testaValor()
{
if(nota1 < 0 || nota1 > 10 || isNaN(nota1))
{
alert("Nota 1 " + materia + " Invalida");
return "Erro";
}

if(nota2 < 0 || nota2 > 10 || isNaN(nota2))
{
alert("Nota 2 " + materia + " Invalida");
return "Erro";
}

if(nota3 < 0 || nota3 > 10 || isNaN(nota3))
{
alert("Nota 3 " + materia + " Invalida");
return "Erro";
}

if(nota4 < 0 || nota4 > 10 || isNaN(nota4))
{
alert("Nota 4 " + materia + " Invalida");
return "Erro";
}
}

function pegaP()
{
materia="Portugues";


nota1 = document.getElementById('notaPort1').value;
if(testaValor() == "Erro"){return;}

nota2 = document.getElementById('notaPort2').value;
if(testaValor() == "Erro"){return;}

nota3 = document.getElementById('notaPort3').value;
if(testaValor() == "Erro"){return;}

nota4 = document.getElementById('notaPort4').value;
if(testaValor() == "Erro"){return;}


var media = parseFloat(nota1) + parseFloat(nota2) + parseFloat(nota3) + parseFloat(nota4);
media /= 4;
document.getElementById("MediaP").innerHTML = media;
}

function pegaM()
{
materia="Matematica";


nota1 = document.getElementById('notaMat1').value;
if(testaValor() == "Erro"){return;}

nota2 = document.getElementById('notaMat2').value;
if(testaValor() == "Erro"){return;}

nota3 = document.getElementById('notaMat3').value;
if(testaValor() == "Erro"){return;}

nota4 = document.getElementById('notaMat4').value;
if(testaValor() == "Erro"){return;}

var media = parseFloat(nota1) + parseFloat(nota2) + parseFloat(nota3) + parseFloat(nota4);
media /= 4;
document.getElementById("MediaM").innerHTML = media;
}

function pegaC()
{
materia="Ciencias";


nota1 = document.getElementById('notaCie1').value;
if(testaValor() == "Erro"){return;}

nota2 = document.getElementById('notaCie2').value;
if(testaValor() == "Erro"){return;}

nota3 = document.getElementById('notaCie3').value;
if(testaValor() == "Erro"){return;}

nota4 = document.getElementById('notaCie4').value;
if(testaValor() == "Erro"){return;}

var media = parseFloat(nota1) + parseFloat(nota2) + parseFloat(nota3) + parseFloat(nota4);
media /= 4;
document.getElementById("MediaC").innerHTML = media;
}



3. Re: Esse codigo é muito gambiarra?

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 12/10/2014 - 21:12h

Fora a identação , teria algum metodo de fazer esse codigo + simplificado?

Quero fazer um tipo um boletim , e colocar uma funcao p/ cada uma coisa ficaria muito grande .Teria solução?

[]'s

T+


4. Re: Esse codigo é muito gambiarra?

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 12/10/2014 - 21:43h

#SAMUEL_ESTRAGA_PRAZER


5. Re: Esse codigo é muito gambiarra?

Eduardo Weiland
eduardoweiland

(usa Fedora)

Enviado em 12/10/2014 - 21:58h

Um jeito de organizar melhor esse código seria utilizar um vetor para armazenar as notas, e você só precisaria percorrê-lo em vez de testar várias vezes a mesma coisa com variáveis diferentes. E também, nas funções pegaP(), pegaM() e pegaC() você chama a função para testar o valor das notas quatro vezes (uma para cada valor lido dos inputs), e a função valida todos os quatro valores todas as vezes. Poderia primeiro pegar todos os valores e só no final testar.

E outra ideia, tente evitar o uso de variáveis globais, é muito fácil de se perder no código e não dá pra saber quando o valor dela é alterado. Tente usar parâmetros para as funções.

Seu código com essas melhorias ficaria parecido com isso:


function testaValor(notas, materia) {
for (var i = 0; i < notas.length; ++i) {
if (notas[i] < 0 || notas[i] > 10 || isNaN(notas[i])) {
alert("Nota " + (i + 1) + " " + materia + " Invalida");
return false;
}
}
return true;
}

function calculaMedia(notas) {
var total = 0;

for (var i = 0; i < notas.length; ++i) {
total += parseFloat(notas[i]);
}

return (total / notas.length);
}

function pegaP() {
var materia = "Portugues";
var notas = [];

notas.push(document.getElementById('notaPort1').value);
notas.push(document.getElementById('notaPort2').value);
notas.push(document.getElementById('notaPort3').value);
notas.push(document.getElementById('notaPort4').value);

if (!testaValor(notas, materia)) {
return;
}

var media = calculaMedia(notas);
document.getElementById("MediaP").innerHTML = media;
}

function pegaM() {
var materia = "Matematica";
var notas = [];

notas.push(document.getElementById('notaMat1').value);
notas.push(document.getElementById('notaMat2').value);
notas.push(document.getElementById('notaMat3').value);
notas.push(document.getElementById('notaMat4').value);

if (!testaValor(notas, materia)) {
return;
}

var media = calculaMedia(notas);
document.getElementById("MediaM").innerHTML = media;
}

function pegaC() {
var materia = "Ciencias";
var notas = [];

notas.push(document.getElementById('notaCie1').value);
notas.push(document.getElementById('notaCie2').value);
notas.push(document.getElementById('notaCie3').value);
notas.push(document.getElementById('notaCie4').value);

if (!testaValor(notas, materia)) {
return;
}

var media = calculaMedia(notas);
document.getElementById("MediaC").innerHTML = media;
}



6. Re: Esse codigo é muito gambiarra?

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 12/10/2014 - 21:59h

????
Eu disse que vc estragou o meu prazer te ter feito o "Erro".

Eu ainda quero saber como posso melhorar esse codigo , seria bom se tivesse structs.

[]'s

T+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts