Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Refatoração "exagerada"

Compreendo que o objetivo da aula foi explicar que fica muito mais fácil ler e visualizar o código quando dividimos ele em várias partes( funções ). Mas no nosso caso, não seria melhor criar uma função chamada, por exemplo de "comportamentoBolinha", e então dividir em partes menores usando comentários? Tipo assim:

function comportamentoBolinha(){
//Mostrar a Bola
 circle(xBola, yBola, diametro);

//Movimentação
  xBola += velocidadeXBola;
  yBola += velocidadeYBola;

//Colisões com a borda
  if(xBola + raio >= width ||
     xBola - raio <= 0){
    velocidadeXBola *= -1;
  }
  if(yBola + raio >= height ||
     yBola - raio <= 0){
    velocidadeYBola *= -1;
  }
}
1 resposta
solução!

Bom, o agrupamento em funções não tem como único objetivo melhorar visibilidade... geralmente quando um código repete muitas vezes uma declaração, considera-se que seria melhor prática utilizar um método/função para executar a parte repetida de maneira a enxugar o código. Então, por exemplo, se você tem um código que calcula diversas vezes um tipo de trajetória para diferentes objetos, ao invés de repetir o cálculo por extenso no corpo de cada objeto, convém criar uma função chamada por cada objeto que contenha os passos pra esse cálculo.

O problema de métodos/funções muito grandes em códigos é que, chamando esse método, você terá que rodá-lo em sua integralidade, e não poderá aproveitar partes dele caso sejam necessários. Em códigos menores e programas mais simples isso pode não parecer tão óbvio, mas quanto maior e mais complexo o código, e quanto mais partes do código utilizam-se de uma mesma função, mas fica claro a vantagem da criação de funções especializadas para cada tarefa.

Imagina que no seu jogo agora você decidisse que na fase 2 seria um quadrado e não um círculo quicando na tela. E suponha, por exemplo, que em dada fase decidisse que a bolinha ia "teleportar" para o outro lado da tela ao invés de quicar... Aí por último imagina que depois você faz uma fase onde a bola não tem uma velocidade constante, mas se move apenas enquanto o jogador mantiver a tecla apertada... Em cada um desses casos, você teria que repensar uma função específica para cada fase, elas estando separadas no código. Estando agrupadas, você teria que fazer um código "comportamento bolinha" completo para cada fase.

Enfim, é uma boa ideia sim reunir os métodos/funções que ditam o comportamento da bolinha no corpo do script pra fins de visibilidade e entendimento, mas há uma praticidade em se manter cada função que exerce uma tarefa completa razoavelmente independe para acesso fácil.

Há outras formas de se fazer esses agrupamentos (como a separação de classes na programação orientada a objetos). Mas no momento, uma coisa que talvez aproveitasse a sua ideia sem comprometer a independência das funções, seria marcar com comentário o bloco de funções que estão associadas ao comportamento da bolinha. Por exemplo:

//////////////////////////////////////////////////////////////////////////
///////////// COMPORTAMENTO DA BOLINHA ///////////////////
///////////////////////////////////////////////////////////////////////////

//Mostrar a Bola
function DesenharBola(){
 circle(xBola, yBola, diametro);
}

//Movimentação
function MoverBola(){
  xBola += velocidadeXBola;
  yBola += velocidadeYBola;
}

//Colisões com a borda
function ColisaoComBorda(){
  if(xBola + raio >= width ||
     xBola - raio <= 0){
    velocidadeXBola *= -1;
  }
  if(yBola + raio >= height ||
     yBola - raio <= 0){
    velocidadeYBola *= -1;
  }
}

//////////////////////////////////////////////////////////////////
/////////////////// RESTO DO CÓDIGO /////////////////////
//////////////////////////////////////////////////////////////////