Refiz esse desafio apenas para testar como ficaria o uso das novas atualizações que fiz na minha biblioteca Java. Ela tem como foco facilitar certas tarefas e evitar repetição de código, além de reduzir a verbosidade do Java — eliminando a necessidade de escrever muitas linhas de código para realizar algo simples.
Código feito pelo Instrutor:
import java.util.Scanner;
public class NomeValido {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String nome;
do {
System.out.print("Digite seu nome: ");
nome = scanner.nextLine();
if (nome.length() < 3) {
System.out.println("Nome inválido. Digite novamente.");
}
} while (nome.length() < 3);
System.out.println("Nome \"" + nome + "\" cadastrado com sucesso!");
scanner.close();
}
}
Abaixo usando minha lib propria publicada no maven central:
package test;
import com.github.rickmvi.jtoolbox.console.IO;
import com.github.rickmvi.jtoolbox.console.util.Scan;
public class ValidName {
public static void main(String[] args) {
String name = Scan.readUntil("Enter your name:", s -> s.length() > 3);
IO.format("Name '{}' registered with success", name);
Scan.close();
}
}
Ela faz a mesma coisa que o código do instrutor, mas você não precisa perder tempo escrevendo tantas coisas para um código que deveria ser simples. Então, com apenas 3 linhas de código, você faz o mesmo que as 11 linhas do outro código, só que de forma bem mais simplificada.
O sistema de Scan possui duas versões, ambas inspiradas no Scan do Golang
, que são o Scan e o Scanf. Com eles, você pode passar diretamente um prompt/message
, evitando ter que escrever uma linha a mais com System.out.println
(...). Ele também possui validação própria de erros/exceções
, portanto não há necessidade de usar try-catch para tratar exceções como NumberFormatException
do scanner.nextInt()
, por exemplo.
Além disso, ele conta com um sistema de auto-initialize
, assim você não precisa ficar sempre chamando Scanner scanner = new Scanner(System.in)
, mas ainda pode inicializá-lo manualmente caso queira ler de arquivos externos com Scan.init("new algumacoisa")
.
Também criei um sistema próprio de prints baseado no JavaScript
, para não precisar usar toda hora System.out.print
(...). Chamei de IO
, e é uma interface utilitária com métodos próprios para saída de dados, como IO.print()
, IO.println()
, IO.printf()
e IO.format()
. O IO.format()
possui um sistema próprio de formatação que utiliza placeholders e tokens baseados em regex. Com ele, você pode usar um placeholder genérico {}, que aceita qualquer argumento — por exemplo: IO.format("Hello {}", "world!")
.
Também é possível especificar a ordem de saída dos argumentos no console, como em IO.format("{1} {0}", "world!", "Hello")
. Mesmo que a ordem dos argumentos esteja diferente, você pode indicar manualmente a posição de impressão por meio dos números: 0 representa o primeiro argumento ("world!") e 1 representa o segundo ("Hello") e voce pode fazer isso para N argumentos.
Há várias outras possibilidades de uso com esse sistema.
Sainda no console: