Buenos días Pedro
En el ejercicio 1 esta función
function comprobarNombres($resultados) {
if ($resultados !=NULL) {
return strncmp($resultados['nombre'], 'M', 1);
}
else {echo "<br/>No hay más datos!!! <br/>";}
}
Si se entra en la primera parte del if el resultado es que se devuelve un valor false ó true (o su equivalente numérico 0 ó 1) mediante la sentencia return. Si se entra en el else el resultado es que no hay sentencia return, y a cambio hay una sentencia echo con una cadena de texto.
Esto es una situación que en líneas generales debe evitarse. De hecho, muchos lenguajes de programación no permiten situaciones de este tipo. PHP sí lo permite porque es más relajado en el control de tipos. Sin embargo, a no ser que tengamos un fuerte motivo para hacerlo no es recomendable. El motivo es que la función debe realizar una tarea homogénea (devolver un mismo tipo de dato siempre con un return) en lugar de hacer unas veces una cosa y otras veces otra. Si la función no hace siempre lo mismo es más fácil incurrir en errores a la hora de llamarla, porque la respuesta podría no ser la que esperamos y no obtener la respuesta esperada dar lugar a errores.
El ejercicio 2 funciona correctamente y puede verse como un ejercicio donde has ejercitado el uso de funciones. El diseño realmente no me parece óptimo por varios pequeños detalles.
Por ejemplo:
function dameNumeroHabitantes($resultados) {
if ($resultados !=NULL) {
return $resultados['habitantes'];
}
}
Una función que hace una tarea elemental quizás no merezca la pena ser definida como función, sino incluir su código directamente ya que no supone ahorro de código.
En esta función tenemos un condicional de modo que si se cumple hay un return, y si no no hay nada. Estamos en un caso parecido al comentado antes: la función se comportará de distinta manera, no tiene una respuesta homogénea, y esto a la larga puede traer problemas.
Esta función: function muestraResultado($numeroHabitantes, $ciudades, $tienenMetro)
parece concebida para ser llamada una sola vez. En general una función tendrá interés cuando se vaya a llamar más de una vez. Aunque no está prohibido, es raro definir funciones pensadas para ser llamadas una sola vez. Podría usarse en casos justificados si por ejemplo mejoran la ordenación y legibilidad del código.
Para este ejercicio 2 no le veo ventajas al uso de funciones (aunque tampoco está establecido que no se puedan usar, de hecho en general es preferible usarlas, pero tampoco siempre). En este post hay una solución más compacta sin funciones
https://www.aprenderaprogramar.com/foros/index.php?topic=1598.0Saludos