1
resposta

05 Uma inofensiva flor..

Se eu deixar desta forma:

<canvas width="600" height="400"></canvas>

<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'lightgray';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2*3.14);
        pincel.fill();
    }
    desenhaCirculo(300, 120, 40, 'yellow');
    desenhaCirculo(300, 200, 40, 'red');
    desenhaCirculo(300, 280, 40, 'blue');
    desenhaCirculo(220, 200, 40, 'orange');
    desenhaCirculo(380, 200, 40, 'black');
</script>

É considerado errado? Obrigatoriamente tenho que criar a função desenhaFlor?

1 resposta

Olá, Shellen.

Não está errado. No entanto, é uma boa prática de programação criar funções para dar significado ao código. Existem dois principais motivos para o uso de funções. O primeiro deles é a reutilização de código. Criar uma função (devidamente especificada, é claro) faz com que você não precise repetir as mesmas linhas de código, caso precise que os mesmos comandos (ou pequenas variações deles) sejam repetidos. Outra utilidade das funções é dar significado ao seu código. Quando o código é pequeno e só você tem contato com ele, tudo bem não escrever funções pra tudo, mas quando o número de linhas cresce e outras pessoas contribuem com o seu código, é interessante que você tente ao máximo passar informações para que aumente a legibilidade do código.

Imagine que você queira inserir não uma, mas várias flores. Nesse caso, seria mais apropriado utilizar funções. Vou utilizar seu código para exemplificar:

Utilizando funções

<canvas width="600" height="400"></canvas>

<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'lightgray';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2*3.14);
        pincel.fill();
    }
    function desenhaFlor(x,y,d) {
        desenhaCirculo(x, y, d, 'yellow');
        desenhaCirculo(x, y+2*d, d, 'red');
        desenhaCirculo(x, y+4*d, d, 'blue');
        desenhaCirculo(x-2*d, y+2*d, d, 'orange');
        desenhaCirculo(x+2*d, y+2*d, d, 'black');
    }
    desenhaFlor(100, 50, 10)
    desenhaFlor(160, 200, 20)
    desenhaFlor(300, 150, 15)
    desenhaFlor(400, 250, 5)
</script>

Sem utilização de funções

<canvas width="600" height="400"></canvas>
<br>

<script>

    var tela = document.querySelector('canvas');
    var pincel = tela.getContext('2d');
    pincel.fillStyle = 'lightgray';
    pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(x, y, raio, cor) {

        pincel.fillStyle = cor;
        pincel.beginPath();
        pincel.arc(x, y, raio, 0, 2*3.14);
        pincel.fill();
    }

    desenhaCirculo(100, 50, 10, 'yellow');
    desenhaCirculo(100, 70, 10, 'red');
    desenhaCirculo(100, 90, 10, 'blue');
    desenhaCirculo(80, 70, 10, 'orange');
    desenhaCirculo(120, 70, 10, 'black');

    desenhaCirculo(160, 200, 20, 'yellow');
    desenhaCirculo(160, 240, 20, 'red');
    desenhaCirculo(160, 280, 20, 'blue');
    desenhaCirculo(120, 240, 20, 'orange');
    desenhaCirculo(200, 240, 20, 'black');

    desenhaCirculo(300, 150, 15, 'yellow');
    desenhaCirculo(300, 180, 15, 'red');
    desenhaCirculo(300, 210, 15, 'blue');
    desenhaCirculo(270, 180, 15, 'orange');
    desenhaCirculo(330, 180, 15, 'black');

    desenhaCirculo(400, 250, 5, 'yellow');
    desenhaCirculo(400, 260, 5, 'red');
    desenhaCirculo(400, 270, 5, 'blue');
    desenhaCirculo(390, 260, 5, 'orange');
    desenhaCirculo(410, 260, 5, 'black');
</script>

Os dois códigos acima tem o mesmo resultado prático, mas o primeiro me parece bem mais legível, além de ter menos linhas de código.

Se ainda estiver com dúvidas, pode perguntar.

Espero ter ajudado.