1
resposta

[Sugestão] Entendendo a diferença da resolução do instrutor VS a minha.

Olá!

Estou fazendo esse post voltado principalmente para meus colegas de estudo. Haha, eu particularmente tive muita dificuldade em compreender quais são as diferenças entre o método if feito no método e a aplicação do instrutor que é diretamente no construtor...

Olhando muitos posts, houve uma clareza, mas principalmente mediante pesquisa, obtive muitas respostas. Então, irei fazer um sistema aqui onde eu indico minha pergunta e a resolução já com a conclusão que obtive da resposta, vamos lá ;)

Qual a diferença entre ter esse if no construtor ou no nosso public static Avaliacao Parse(string texto)?

R: Simples, chamando ele no public static Avaliacao, cometemos alguns "erros".

Apesar de criar um if aqui que informe ao usuário que ele não pode digitar um número negativo ou acima de 10, ou até mesmo como no meu uso do TryParse, alguma letra, acabamos por permitir que isso seja feito ainda no program.cs (de forma manual) caso o programador tentar fazer como fizemos no caso do Ira!, onde definimos 3 notas iniciais para a banda Ira!, você pode alterar uma por exemplo para -5 e ainda sim vai funcionar pois ele só faz a validação do if em casos enviados pelo ReadLine.

Sempre que você instancia uma classe, a primeira coisa que ele irá rodar é o construtor. Entendendo isso, te faz validar isso de uma vez só sem precisar validar isso todas as vezes com o Parse. Para esse caso exclusivamente, é o melhor uso nesse programa, te fazendo validar de forma única um exemplo que posso citar é se você tivesse várias chamadas (vamos imaginar que esse programa é usado ao público e tem 100 pessoas dando nota ao mesmo tempo). No método Parse, teríamos de validar constantemente agora no próprio construtor ele valida todas as entradas que forem usadas pelo construtor já de uma vez, validando onde recebe e não onde chama.

Colocando no construtor, o diferencial que eu não notei inicialmente é que ele não permite de maneira muito simples. Se a nota for exemplo -10, ele vai mudar automático para 0 e caso seja por exemplo 15, ele vai automaticamente mudar para 10. Garantindo que independente da nota fornecida ser superior a 10 ou inferior a 0, ele sempre vai ficar dentro da nossa regra estipulada de 0 a 10. Ou seja, a questão de exibir que a nota não foi computada como no meu código e pedir novamente uma nota é um caminho, mas o feito no construtor faz com que de forma automática ele sempre iguale a nota dentro da nossa regra. Mesmo que ele tente enviar 150, ele vai entender como um 10. Assim segue com o negativo, mesmo que o usuário informe uma nota -9192, ele vai automaticamente enviar a nota 0 sem a necessidade de ficar sempre repetindo ao usuário para ele escrever alguma nota (o que pode se tornar um loop).

Espero ter ajudado!

Meu codigo anteriormente feito de forma "errada" Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá Gabriel

Quando você coloca o if no construtor, como no exemplo que você mostrou, você está garantindo que a validação das notas seja feita logo no momento em que a classe Avaliacao é instanciada. Isso significa que, ao criar um objeto do tipo Avaliacao, você já tem a garantia de que a nota estará dentro do intervalo válido (de 0 a 10). Se alguém tentar criar uma avaliação com uma nota menor que zero, por exemplo, o construtor irá automaticamente ajustar essa nota para zero. Da mesma forma, se alguém tentar criar uma avaliação com uma nota maior que dez, o construtor irá ajustar essa nota para dez.

Por outro lado, se você colocar o if no método Parse, a validação das notas será feita apenas quando esse método for chamado. Isso significa que, se alguém criar uma avaliação com uma nota inválida e não chamar o método Parse, essa nota inválida não será corrigida. Essa abordagem pode ser útil em situações em que você precisa validar a nota em momentos específicos, por exemplo, quando o usuário digitar a nota em um campo de texto e clicar em um botão para salvar a avaliação.

No seu caso, pelo que entendi, a melhor opção é colocar o if no construtor, pois você quer garantir que todas as avaliações criadas estejam dentro do intervalo válido. Dessa forma, você evita que notas inválidas sejam registradas e garante que todas as notas estejam corretas desde o momento em que a avaliação é criada.

Espero ter ajudado a esclarecer a diferença entre as duas abordagens. Se tiver mais alguma dúvida, é só me dizer!

Espero ter ajudado e bons estudos!