Validación de Argumentos en Terminal con Clases en Ciel

Clase 36 de 39Curso de Programación Funcional con Java SE

Contenido del curso

Functional Programming en Java

Optional y Streams: Datos mas interesantes

Todo junto: Proyecto Job-search

Resumen

Cuando una aplicación de línea de comandos recibe parámetros, no basta con leerlos: hay que asegurarse de que sean correctos. En este paso se construyen dos validadores usando la interfaz IParameterValidator de JCommander, lo que permite interceptar valores inválidos antes de que el programa continúe su ejecución.

¿Cómo funciona IParameterValidator en JCommander?

JCommander ofrece la interfaz IParameterValidator para definir reglas de validación sobre cada argumento que llega por terminal. Esta interfaz exige implementar un único método: validate, que recibe el nombre de la opción y el valor que el usuario proporcionó. Si el valor no cumple con las reglas, se lanza una excepción que interrumpe el flujo del programa.

Este patrón es útil porque centraliza la lógica de validación en clases independientes, manteniendo el código limpio y reutilizable.

¿Cómo crear un validador para la opción de ayuda?

El primer validador se llama CLIHelpValidator [01:06]. Su propósito es detectar cuándo el usuario solicita ayuda y evitar que esa petición se procese como una opción más del programa.

¿Qué lógica aplica CLIHelpValidator?

  • Implementa IParameterValidator y su método validate.
  • Convierte el valor recibido a boolean usando Boolean.parseBoolean(value) [02:00].
  • Si el valor es true, lanza una excepción con el mensaje "ayuda solicitada" [02:38].
  • Esa excepción actúa como un cortocircuito que interrumpe el proceso normal.

java public class CLIHelpValidator implements IParameterValidator { @Override public void validate(String name, String value) throws ParameterException { boolean actual = Boolean.parseBoolean(value); if (actual) { throw new ParameterException("Ayuda solicitada"); } } }

Para conectar este validador con el argumento de ayuda en la clase CLIArguments, se usa la anotación validateWith apuntando a CLIHelpValidator.class [03:00].

¿Cómo se genera código rápidamente en IntelliJ?

Un atajo práctico es usar el menú contextual Generate dentro de IntelliJ. Al seleccionar Implement methods, el IDE escribe automáticamente la firma del método validate, ahorrando tiempo y evitando errores de escritura [01:38].

¿Cómo validar que una palabra clave sea correcta?

El segundo validador es CLIKeywordValidator [03:18]. Su objetivo es garantizar que el criterio de búsqueda contenga únicamente letras y números, descartando espacios vacíos, caracteres especiales u otros valores inesperados.

¿Qué expresión regular se utiliza?

  • La clase también implementa IParameterValidator.
  • Aplica una expresión regular que verifica que el valor comience con letras y contenga solo caracteres alfanuméricos [03:56].
  • Si el valor no coincide con el patrón, imprime un mensaje indicando que "el criterio de búsqueda no es válido" y lanza una excepción [04:28].

java public class CLIKeywordValidator implements IParameterValidator { @Override public void validate(String name, String value) throws ParameterException { if (!value.matches("^[a-zA-Z][a-zA-Z0-9]*$")) { System.out.println("El criterio de búsqueda no es válido"); throw new ParameterException("El criterio de búsqueda no es válido"); } } }

Finalmente, se asocia al parámetro keyword en CLIArguments usando validateWith = CLIKeywordValidator.class [04:54].

Este enfoque basado en clases validadoras independientes permite escalar fácilmente: si mañana necesitas una nueva regla, solo creas otra clase que implemente IParameterValidator y la conectas con validateWith. Así el código principal permanece legible y cada responsabilidad queda aislada.

¿Has implementado validadores personalizados con JCommander o prefieres otra estrategia? Comparte tu experiencia.