Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

É recomendado usar esse artifício?

Olá, usei um artificio, porém creio que seria complicado em códigos maiores... é recomendado que se tenha esse mindset quando for programar algo grande?

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var idade = parseInt(prompt("Qual é sua idade"));
if(idade < 18) {
    mostra("Você não tem idade para dirigir");
    } else { 
        var temCarteira = prompt("Você já possui carteira? S ou N?");
            if(temCarteira == "s") {
                mostra("Você pode dirigir!");
                } else { 
                    mostra("Você tem idade, mas precisa tirar carteira para dirigir!");
                        }
            }
</script>
2 respostas

Eduardo, muito legal voce já estar se preocupando com isso.

Quando as coisas começam a ficar com muito tabs e encadeadas, é um sinal de que algo pode estar muito complexo, muito aninhado. Há toda uma ciencia por trás disso, como a tal da complexidade ciclomática.

Não precisa conhecer a fundo, mas realmente uma hierarquia muito grande de ifs/elses encadeados pode ser complciado de dar manutenção e entender o que etá acontencedo. O ideal é quebrar em partes menores e talvez em outras funções, apesar de que o tamanho atual que você tem está aceitável... um nível a mais ficaria já um estado mais crítico.

solução!

Olá Eduardo,

Neste caso a que artifício você está se referindo?

Caso esteja se referindo a indentação acredito que seja bom manter um padrão e consistência, ela é interessante para manter a leitura, por exemplo:

    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var idade = parseInt(prompt("Qual é sua idade"));
    if(idade < 18) {
        mostra("Você não tem idade para dirigir");
    } else { 
        var temCarteira = prompt("Você já possui carteira? S ou N?");
        if(temCarteira == "s") {
            mostra("Você pode dirigir!");
        } else { 
            mostra("Você tem idade, mas precisa tirar carteira para dirigir!");
        }
    }

Caso esteja falando sobre os ifs há algumas coisas que podem ser feitas, para diminuir o código, por exemplo usar os operadores ternários.

No mundo real no entanto acredito que você provavelmente teria este código dentro de objetos.

Por exemplo:

function Pessoa (idade, carteira) {
    return {
        pulaLinha: function () {
            document.write("<br>");
        },
        mostra: function (mensagem) {
            document.write(mensagem);
            this.pulaLinha();
        },
        temIdade : function () {
            return idade < 18 ? 'Você não tem idade para dirigir' : false;
        },
        temCarta : function () {
            return carteira == 'N' ? 'Você tem idade, mas precisa tirar carteira para dirigir!' : 'Você pode dirigir!';
        },
        podeDirigir : function () {
            this.mostra(!this.temIdade() ? this.temCarta() : this.temIdade());
        }
    };
}

var joao = new Pessoa(prompt('Qual é sua idade?'),prompt("Você já possui carteira? S ou N?"));
joao.podeDirigir();

Dessa forma quando precisar reutilizar este código basta fazer outra pessoa e chamar o método podeDirigir();

Claro que este exemplo está longe de ser ideal, mas faz quase a mesma coisa que o código original, com a diferença que pergunta se tem carta antes de conferir se tem idade, mas isso poderia ser corrigido se eu coletasse a informação com prompt dentro do corpo da função podeDirigir, desta forma no entanto o objeto pode ser tanto chamado como foi no código quando invocado a partir de uma array por exemplo:



function Pessoa (nome, idade, carteira) {
    return {
        pulaLinha: function () {
            document.write("<br>");
        },
        mostra: function (mensagem) {
            document.write(mensagem);
            this.pulaLinha();
        },
        temIdade : function () {
            return idade < 18 ? nome + ' não tem idade para dirigir' : false;
        },
        temCarta : function () {
            return carteira == 'N' ? nome + ' tem idade, mas precisa tirar carteira para dirigir!' : nome + ' pode dirigir!';
        },
        podeDirigir : function () {
            this.mostra(!this.temIdade() ? this.temCarta() : this.temIdade());
        }
    };
}


var pessoas = [
    ['João da Silva', 18, 'S'],
    ['Maria da Silva', 17, 'N'],
    ['Funalo de tal', 18, 'N'],
    ['Marcos da Silva', 22, 'S'],
    ['Pedro da Silva', 31, 'N'],
    ['Zé da Silva', 8, 'N']
];

for (var i in pessoas) {
    var novaPessoa = new Pessoa(pessoas[i][0],pessoas[i][1],pessoas[i][2]);
    novaPessoa.podeDirigir();
    novaPessoa = undefined;
}

vai gerar um output como:

João da Silva pode dirigir!
Maria da Silva não tem idade para dirigir
Funalo de tal tem idade, mas precisa tirar carteira para dirigir!
Marcos da Silva pode dirigir!
Pedro da Silva tem idade, mas precisa tirar carteira para dirigir!
Zé da Silva não tem idade para dirigir