Estoy estudiando Javascript con FreeCodeCamp, hasta ahora todo está claro pero tengo una pregunta tonta que no he entendido:
function lookUpProfile(name, prop) { for (let x = 0; x < contacts.length; x++) { if (contacts[x].firstName === name) { if (contacts[x].hasOwnProperty(prop)) { return contacts[x][prop]; } else { return "No such property"; } } } return "No such contact"; } ¿Por qué return "No such contact"; es después del ciclo for y no el if que controla el nombre del contacto?!
Si el return "No such contact"; estaría en la rama else de if (contacts[x].firstName === name) , la función dejaría de procesar los nombres después de que el primer nombre en la matriz de contactos no sea el que está buscando con la función:
buscarPerfil( nombre , propiedad)
Pero como está escrito, devolverá "No hay tal contacto" solo cuando se verifiquen todos los nombres de la matriz de contactos. Es por eso que tiene que ejecutar el ciclo completo para poder saber si el nombre que está buscando no está en la lista de contactos.
Esto se debe a la función (método) que tiene un valor de retorno, solo para obtener más explicaciones, las funciones pueden tener un tipo de retorno o vacío, que no devuelve nada a la persona que llama.
entonces, aquí su función lookUpProfile (nombre, propiedad) devuelve una cadena, por lo que en la función, la palabra clave de retorno debe tener y devolver el valor de los contactos de retorno [x] [prop]; , o la cadena devuelve "No existe tal propiedad"; o devolver "No existe tal contacto";
para la parte Por qué de su pregunta, el bucle proporciona la palabra clave de retorno , pero tómela así, que no es una forma académica de decirlo, pero lo hago de todos modos, el compilador dice "Sé que ha proporcionado retorno pero no saber si tiene algún error de tiempo de ejecución y no devuelve el valor en absoluto". En el compilador de C# , le muestra Código de gravedad Descripción Estado de supresión de línea de archivo de proyecto
string test() { for (int i = 0; i < 5; i++) { if (i == 3) { return i.ToString(); } } } **Error CS0161 'ClassName.test()': not all code paths return a value**en C# cuenta como un error del compilador, lo que significa que no permite compilar a menos que lo solucione.
Básicamente, no le permite ingresar a algunos compiladores como C#, para garantizar que la función devuelva un valor.