Comentários
Documentação do código utilizando javadoc, declaração de constantes utilizando enumeração, descrição de utilização do código executado pelo terminal e execução de uma lista de comandos automaticamente com a utilização de for each e varargs.
Fonte: Shutterstock.
Deseja ouvir este material?
Áudio disponível no material digital.
A startup em que você trabalha lhe passou diversas tarefas:
Como forma de iniciar o trabalho, você decidiu revisar o Código 3.11 para adicionar os recursos que lhe foram designados. Observando o seu código, você percebeu que um tipo Enum podia ser criado para agrupar as constantes FRENTE, ATRAS, ESQUERDA e DIREITA, e notou que, após isso, seu código ficou melhor estruturado. No Código 3.22, mostrado abaixo, nas linhas 1 a 3, temos a definição dessa enumeração, e nas linhas 6 a 22, temos o código que foi adaptado para receber a nova estrutura de dados.
Em seguida, você decidiu imprimir algumas informações que dão uma descrição da aplicação caso especificado durante a execução por meio do terminal. Dessa maneira, você criou as opções: --author, --version, --help, --commands e –move, que podem ser vistas nas linhas 38 a 56 do Código 3.22.
Após isso, você decidiu trabalhar na opção –move, que modela as movimentações agendadas, usando uma lista de comandos passados pelo terminal. O método que manipula os movimentos agendados pode ser visto nas linhas 23 a 30. Repare que esse método utilizou a ideia de argumentos variados (varargs) e o comando for each, conforme sugerido.
O Código 3.22 destacou apenas as principais alterações feitas. O código completo pode ser acessado no GitHub do autor. Lá, você encontrará a documentação do código utilizando javadoc.
Caro aluno, faça as devidas implementações e execute o código para que possa entender melhor o seu funcionamento.
public enum Orientacao {
FRENTE, ATRAS, ESQUERDA, DIREITA;
}
public class Robo extends RoboIdeia {
public void setOrientacao(char tecla) {
if (tecla == 'w') {
super.orientacao = Orientacao.FRENTE;
moveY(5);
} else if (tecla == 's') {
super.orientacao = Orientacao.ATRAS;
moveY(-5);
} else if (tecla == 'a') {
super.orientacao = Orientacao.ESQUERDA;
moveX(-5);
} else if (tecla == 'd') {
super.orientacao = Orientacao.DIREITA;
moveX(5);
} else {
throw new IllegalArgumentException("Arg não válido");
}
}
public void movimentosAgendados(String... moves){
for (String tecla : moves){
if (!tecla.equals("--move")) {
setOrientacao(tecla.charAt(0));
printPos();
}
}
}
//foi omitido o código do restante da classe Robo.
}
public class App {
public static void main(String[] args) {
if (args.length != 0){
args[0] = args[0].toLowerCase();
if (args[0].equals("--author")) {
System.out.println("Autor: Jesimar S. Arantes");
} else if (args[0].equals("--version")) {
System.out.println("Versão: 1.0.0");
} else if (args[0].equals("--help")) {
System.out.println("Exec. Movimentos Agendados:");
System.out.println("\t--move w a w w s d d a");
} else if (args[0].equals("--commands")) {
System.out.println("Comandos suportados:");
System.out.println("\tw: move para cima");
System.out.println("\ta: move para esquerda");
System.out.println("\ts: move para baixo");
System.out.println("\td: move para direita");
System.out.println("\t0: sair da aplicação");
} else if (args[0].equals("--move")) {
Robo robo = new Robo();
System.out.println("Movimentos agendados: ");
robo.movimentosAgendados(args);
} else {
System.out.println("Argumento não válido");
}
System.exit(0);
}
//foi omitido o código do restante da aplicação.
}
}