La "mala práctica" existe independientemente de si su idioma está escrito de forma estática. El lenguaje estático hace más para alejarlo de estas prácticas, y puede encontrar más usuarios que se quejan de "malas prácticas" en un lenguaje estático porque es un lenguaje más formal. Sin embargo, los problemas subyacentes están allí en un lenguaje dinámico, y puede determinar si están justificados.
Aquí está la parte objetable de lo que propones. Si no sé qué tipo se devuelve, no puedo usar el valor de retorno inmediatamente. Tengo que "descubrir" algo al respecto.
total = sum_of_array([20, 30, 'q', 50])
if (type_of(total) == Boolean) {
display_error(...)
} else {
record_number(total)
}
A menudo, este tipo de cambio en el código es simplemente una mala práctica. Hace que el código sea más difícil de leer. En este ejemplo, verá por qué es popular lanzar y capturar casos de excepción. Dicho de otra manera: si su función no puede hacer lo que dice que hace, no debería regresar con éxito . Si llamo a tu función, quiero hacer esto:
total = sum_of_array([20, 30, 'q', 50])
display_number(total)
Debido a que la primera línea devuelve con éxito, asumo que total
realmente contiene la suma de la matriz. Si no vuelve con éxito, saltamos a alguna otra página de mi programa.
Usemos otro ejemplo que no se trata solo de propagar errores. Tal vez sum_of_array intenta ser inteligente y devolver una cadena legible por humanos en algunos casos, como "¡Esa es mi combinación de casillero!" si y solo si la matriz es [11,7,19]. Estoy teniendo problemas para pensar en un buen ejemplo. De todos modos, se aplica el mismo problema. Debe inspeccionar el valor de retorno antes de poder hacer algo con él:
total = sum_of_array([20, 30, 40, 50])
if (type_of(total) == String) {
write_message(total)
} else {
record_number(total)
}
Podría argumentar que sería útil para la función devolver un entero o un flotante, por ejemplo:
sum_of_array(20, 30, 40) -> int
sum_of_array(23.45, 45.67, 67.789044) -> float
Pero esos resultados no son tipos diferentes, en lo que a usted respecta. Vas a tratarlos a ambos como números, y eso es todo lo que te importa. Entonces sum_of_array devuelve el tipo de número. De esto se trata el polimorfismo.
Entonces, hay algunas prácticas que podría estar violando si su función puede devolver múltiples tipos. Conocerlos te ayudará a determinar si tu función particular debería devolver múltiples tipos de todas formas.