Java: Cadenas de llamadas de métodos
El procesamiento de datos puede constar de una cantidad considerable de pasos que deben realizarse.
Tomemos como ejemplo la tarea de crear una dirección de página web basada en el nombre de un artículo ingresado por el usuario. Esta tarea a menudo surge al publicar artículos en blogs. Estas direcciones se ven así:
https://codica.la/blog/de-obrero-a-programador
La última parte aquí, de-obrero-a-programador, se crea automáticamente con el código que hemos escrito en Hexlet. Por cierto, tiene un nombre especial: se llama slug.
¿Qué pasos se deben seguir para obtener una cadena similar? Aquí hay solo algunos de ellos:
- Convertir todo a minúsculas para evitar la creación accidental de duplicados de páginas en los motores de búsqueda.
- Limpiar el nombre de los espacios en blanco alrededor. Pueden aparecer accidentalmente al ingresar el nombre.
- Realizar transliteración. Es mejor que las direcciones solo contengan caracteres del alfabeto latino.
- Eliminar todos los caracteres especiales, como signos de interrogación, exclamaciones, etc.
- Reemplazar todos los espacios por guiones.
Algunos de estos pasos requieren conocimientos nuevos para nosotros, por lo que los omitiremos. Los demás pasos se verán más o menos así:
// Nombre ingresado por el usuario. En inglés para mayor simplicidad
var name = " How much is the fish? \n";
// Eliminamos los espacios y saltos de línea al final
name = name.trim();
// Eliminamos el signo de interrogación
name = name.replace("?", "");
// Reemplazamos los espacios por guiones
name = name.replace(" ", "-");
// Convertimos a minúsculas
name = name.toLowerCase();
System.out.println(name); // => how-much-is-the-fish
Si observamos detenidamente este código, podemos notar un patrón común. El método devuelve los datos que asignamos a la variable y luego los procesa en una cadena de llamadas de métodos.
Este patrón se puede simplificar eliminando la reasignación intermedia de la variable:
var name = " How much is the fish? ";
name = name.trim().replace("?", "").replace(" ", "-").toLowerCase();
System.out.println(name); // => how-much-is-the-fish
Gracias a que cada método devuelve una nueva cadena, podemos seguir procesándola llamando a los métodos uno tras otro. Si la cadena de métodos se vuelve demasiado larga, se puede dividir en varias líneas:
name = name.trim()
.replace("?", "")
.replace(" ", "-")
.toLowerCase();
https://replit.com/@hexlet/java-basics-methods-chain
A pesar de la conveniencia de este mecanismo, no se debe abusar de él. Las variables intermedias pueden facilitar la comprensión del código.
Tarea
Escriba un código que tome los datos de la variable name
y los capitalice. En programación, esto se llama capitalización, que convierte la primera letra de una palabra en mayúscula y el resto en minúsculas. Por ejemplo: heXlet => Hexlet. El programa debe imprimir el resultado en la pantalla.
Para extraer partes de una palabra, use el método substring():
// El primer parámetro es el índice inicial, el segundo es el índice final (no incluido)
"hexlet".substring(0, 1); // "h"
// Por defecto, hasta el final de la cadena
"hexlet".substring(1); // "exlet"
¿El ejercicio no pasa la prueba, qué debo hacer? 😶
Si te quedaste atascado, es el momento perfecto para hacer una pregunta en las "Discusiones".
* Asegúrate de incluir la salida de las pruebas. Sin ella, es casi imposible entender qué está mal, incluso si muestras tu código. Los programadores tienen dificultades para ejecutar el código en su mente, pero casi siempre es posible entender a dónde mirar a partir del error que recibiste.
Mi código funciona en mi entorno, pero no aquí 🤨
Las pruebas están diseñadas de manera que verifican la solución de diferentes maneras y con diferentes datos. A menudo, una solución funciona con ciertos datos de entrada pero no con otros. Para entender este punto, revisa la pestaña "Pruebas" y presta atención a los mensajes de error, que suelen contener pistas.
Mi código es diferente a la solución del profesor 🤔
Esto es normal 🙆. En programación, una tarea puede tener muchas soluciones diferentes. Si tu código pasa la prueba, cumple con los requisitos de la tarea.
En raras ocasiones, la solución puede estar ajustada para pasar las pruebas, pero esto suele ser evidente.
Leí la lección, pero no entendí nada 🙄
Crear materiales de aprendizaje comprensibles para todos es bastante difícil. Hacemos nuestro mejor esfuerzo, pero siempre hay margen para mejorar. Si encuentras material que no entiendes, describe el problema en las "Discusiones". Es ideal si puedes formular los aspectos que no entiendes en forma de preguntas. Por lo general, necesitamos unos días para hacer mejoras.
Por cierto, tú también puedes contribuir a mejorar los cursos: en la parte inferior hay un enlace al código fuente de las lecciones, que se puede modificar directamente en el navegador.