Reescrevendo código de forma mais estruturada e organizada
- #JavaScript
Ultimamente visualizando um pouco sobre clean code, e a questão de uma manutenção de um código, além de deixa ló mais organizado, estruturado e prático, me deparei com um desafio de fazer reduções do uso do if ou uso de switch case , e também visualizando uma possível implementação de mais linhas no código futuramente, o que com um código não bem estruturado, séria necessário alterações no que já se encontrava pronto, e mais tempo para realizar a atividade. Então comecei a vê sobre ampliar o uso de objetos , utilizando o conceito de polimorfismo.
Utilizei um código recente, de um desafio a qual realizei aqui no bootcamp de lógica de programação, onde deveria realizar a seguinte problemática:
Instruções para entrega
# 3️⃣ Escrevendo as classes de um Jogo
**O Que deve ser utilizado**
- Variáveis
- Operadores
- Laços de repetição
- Estruturas de decisões
- Funções
- Classes e Objetos
## Objetivo:
Crie uma classe generica que represente um herói de uma aventura e que possua as seguintes propriedades:
- nome
- idade
- tipo (ex: guerreiro, mago, monge, ninja )
além disso, deve ter um método chamado atacar que deve atender os seguientes requisitos:
- exibir a mensagem: "o {tipo} atacou usando {ataque}")
- aonde o {tipo} deve ser concatenando o tipo que está na propriedade da classe
- e no {ataque} deve seguir uma descrição diferente conforme o tipo, seguindo a tabela abaixo:
se mago -> no ataque exibir (usou magia)
se guerreiro -> no ataque exibir (usou espada)
se monge -> no ataque exibir (usou artes marciais)
se ninja -> no ataque exibir (usou shuriken)
## Saída
Ao final deve se exibir uma mensagem:
- "o {tipo} atacou usando {ataque}"
ex: mago atacou usando magia
guerreiro atacou usando espada
Código anterior :
class Hero {
constructor(name, age, type){
this.name = name,
this.age = age,
this.type = type
}
Attack(){
switch(this.type){
case 'wizard':
console.log('The wizard attacked using magic');
break;
case 'warrior':
console.log('The warrior attacked using sword');
break;
case 'monk' :
console.log('The monk attacked using martial arts');
break;
default:
console.log('The ninja attacked using shuriken');
break;
}
}
}
let heroOne = new Hero('Marcelo', 25, 'wizard');
heroOne.Attack();
Código atual:
class Hero {
constructor(name, age){
this.name = name;
this.age = age;
}
Attack(){
console.log('The hero attacked');
}
}
class Wizard extends Hero {
Attack(){
console.log('The wizard attacked using magic');
}
}
class Warrior extends Hero {
Attack(){
console.log('The warrior attacked using sword');
}
}
class Monk extends Hero {
Attack(){
console.log('The monk attacked using martial arts');
}
}
class Ninja extends Hero {
Attack(){
console.log('The ninja attacked using shuriken');
}
}
let heroOne = new Wizard('Marcelo', 25);
let heroTwo = new Ninja('João', 26 );
heroOne.Attack();
heroTwo.Attack();