Olá, escrevi um pequeno programa em que se tem uma calculadora simples com as quatro operações aritméticas. Mas preciso saber se este programa tem qualidade de software boa ( e quando digo isto, se ele tem acessibilidade, código limpo, etc).
Meu código ;
public static void main(String[] args) {
//Initializing the variables because otherwise they can give compile-time error
int num1 = 0;
int num2 = 0;
int res = 0;
String op;
try {
num1 = Integer.parseInt(JOptionPane.showInputDialog("Type a number "));
num2 = Integer.parseInt(JOptionPane.showInputDialog("Type another number : "));
op = JOptionPane.showInputDialog(
"[+] - Addition" +
"\n[-] - Subtraction" +
"\n[*] - Multiplication" +
"\n[/] - Division");
switch(op) {
case "+" :
res = num1+num2;
break;
case "-":
res = num1-num2;
break;
case "*" :
res = num1*num2;
break;
case "/" :
res = num1/num2;
break;
default : JOptionPane.showMessageDialog(null, "Error. You typed something wrong!","Error",JOptionPane.WARNING_MESSAGE);
}
}
catch(Exception er) {
JOptionPane.showMessageDialog(null,"Something is wrong!" + "\nLog of the error : " + er,"Error",JOptionPane.WARNING_MESSAGE); //Show the error log
System.exit(1); //Some error that I know could happen, happened, returning the parameter as that went bad.
}
JOptionPane.showMessageDialog(null, "Result : " + res);
}
Qualidade nao é uma coisa binária (tem ou nao tem), é mais uma escala.
Se quiser código com qualidade, o caminho mais simples é use teste automatizados. Aprenda a usar o junit. Código fácil de testar geralmente é considerado um código mais limpo.
Para obter código limpo geralmente você separa seu código em diferentes classes/métodos/funcoes cada uma fazendo uma coisa específica, assim fica mais fácil entender o que tá acontecendo.
No seu caso o código é pequeno o suficiente para entender, entao nao faz diferença. Mas na realidade, que você tem código muito maiores, fazer tudo dentro do main() é inviável.
O codigo até tá limpo, mas a calculadora esta muito amadora. Se for mesmo fazer uma calculadora com ares de profissionalismo, e’ preciso pensar em usar metodos outros que não main. E tambem nem sempre programa limpo e pequeno e’ eficiente. E’ preciso sempre procurar buscar o equilibrio entre codigo limpo e eficiência profissional.
Na verdade a questão aqui era fazer uma pequena e simples calculadora simples, não profissional. Se fosse para fazer profissional eu teria criado métodos para cada ação/operação e chamado no main, ou criado um único método para fazer todas as operações.
Até que o código parece “limpo”, se com limpo queremos dizer que ele não é confuso e/ou obscuro. Mas eu não diria que tem qualidade, por dois motivos:
“O Principio da Responsabilidade Única” foi violado, pois, num mesmo método você está fazendo várias coisas (receber entradas, processá-las, e ainda exibir o resultado).
int res = 0; você está colocando o resultado (até mesmo de divisões) em um int, sempre perdendo as casas decimais. Sua calculadora não lida com ponto-flutuante, e eu imagino que essa é uma limitação que você não desejou.
Ainda há o problema de não ser fácil testá-lo, que é a questão que o @AbelBueno levantou, se você colocasse o processamento do cálculo em um método à parte já daria pra criar um teste automatizado sobre ele.
Fazendo uma ressalva sobre o que o Abel falou, não pense que ao usar Testes você irá simplesmente conseguir fazer um bom código, se você não souber o que está fazendo (e principalmente porque está fazendo de um jeito ao invés de outro) pode acabar com muito código ruim coberto por testes.