1
resposta

Usando minha lib para o desafio de validar nome com do while

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:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá Rick.
Gostei bastante como abordou o problema!
E criar uma lib é realmente genial.
Que evolução incrível.
Continue esse excelente trabalho.
Bons estudos.