![]() |
problema con funciones
hola de nuevo, tengo un medio problema con las funciones (al final voy usando casi todo el armamento de delphi, pero poco a poco):):)
Cree una funcion
se supone que le entra el valor key y me devuelve un valor word, en si mismo es el mismo key. El programa me funciona pero me da un aviso: [Warning] habitacion.pas(200): W1035 Return value of function 'Tfhabitacion.verificaanadircliente' might be undefined pero no se como resolverlo. gracias O mejor me explico lo que necesitaba por si se os ocurre como resolverlo. tengo esta procedure procedure Tfhabitacion.anadirnomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); ahi recoge el key, pero dentro de esa procedure he realizado otra llamada a otra procedure, pero ya no me conserva el valor key (estoy partiendo el programa en procedures tal y como recomendabais) y para eso he creado la funcion anterior, para conservar el valor del key, imagino que el aviso me sale porque en esa funcion no hay asignacion del valor key, es asi?. |
Ya la declaraste en el Type de TFHabitacion??
algo asi
Salud OS. |
No has definido el valor resultante de la función, colocare un ejemplo muy sencillo de lo que puedes hacer:
1:
o 2:
Espero te sirva ;). |
Cita:
Por ejemplo,
te generará esa advertencia, porque la función no regresa nada cuando b = 0. // Saludos |
Una costumbre que tengo al crear funciones es asignarle un resultado por defecto en la primera linea, así me aseguro de que la función no devuelve nada inesperado. Es algo personal, pero me atrevo a recomendarlo:
Siguiendo el ejemplo de roman:
|
gracias, asi si funciona, son cositas que van saliendo.
|
Cita:
Cita:
:D Aunque menos "dañino", no me gusta que aparezca ninguna advertencia. // Saludos |
Bueno roman, yo empiezo poniendo esa linea, luego si la cosa se tuerce se quita y en paz :p
|
Hola,
Yo suelo hacer lo que hace Seoane, ciertamente. La primera línea es una instrucción: "Result := false" o "Result := true", según si se supone que la función ha de retornar "false" o "true" por defecto. Sin embargo, últimamente, programando en PHP, las cosas cambian amigos. :) ¿Cómo? Pues porque en PHP no vale algo como "return false" al principio de la línea, puesto que el "return" impedirá que se ejecute lo que venga después, es decir, que no es lo mismo que el "result" de Delphi. Lo siento. :) Ahora, aún así sigo utilizando a veces algo como: Código PHP:
|
Hola,
A decir verdad me extraña un poco este tipo de técnicas, o la necesidad de ellas. Parece que damos un valor por defecto para "cubrirnos las espaldas" ante algún posible caso no considerado. Pero el valor por defecto no arreglará tal omisión- de haberla -, de tal suerte que el problema seguirá latente. En el caso de Delphi, al menos, prefiero que el compilador me notifique que hay un problema, a ocultar el mensaje con un valor por defecto. // Saludos |
Hola,
Bueno. Tú eres mucho más experto que yo, Román, empero, yo no trato de ocultar ningún problema o mensaje de error... sino que, simplemente, asigno un valor de retorno por defecto para una función: nada más y nada menos. Cuando escribo una función, digamos, "EsUsuarioAdministrador()", a veces (así lo he hecho más a menudo en Delphi que en PHP, eso sí), nada más comenzar la función, escribo un "Result := False", por ejemplo. Es una forma de decir "ningún usuario será considerado administrador a no ser que se cumplan X condiciones... en un primer momento ningún usuario es considerado administrador". No sé. Tal vez incluso sea una forma de hacer más legible la función, no sé si me explico. Pero, ya digo, la intención no es esconder errores, ni ocultarlos, ni nada de eso. :) |
Cita:
// Saludos |
Cita:
no me sirve, porque si mi algoritmo no cubre todos los casos, el valor por defecto tendrá igual de posibilidades de ser adecuado que inadecuado. // Saludos |
Cita:
Lo dicho, son manías que uno tiene, pero que no tengo problemas en cambiar si la función lo requiere :) |
Hola,
Creo que todos estamos más o menos de acuerdo. Es cierto que no en todos los casos un valor de retorno por defecto puede no ser del todo "intuitivo"... yo creo que me limito a preparar un valor de retorno por defecto cuando por el contrario es intuitivo... ya digo, creo que me sirve para "leer" mejor la función... pero, ya digo que esto es algo que surje de un modo más o menos natural... no es forzado. De hecho alguna vez se me ocurrió que todas las funciones tuvieran un valor de retorno por defecto: todas, todas las funciones. Y esto no funcionó. Es decir, que no programo de esa manera, sino que a veces lo hago así, y otras veces no. Tengo cierta confianza en que sé elegir qué función es menester de un valor de retorno por defecto y cuál no. :) PD. Y no tengo abuela. :D |
Yo creo que no es necesario inicializar el valor de retorno, la regla es que no haya ningún "vacio" en el retorno de la función.
De esta manera no hay ningún "vacio" para el retorno de la función de cualquier tipo. Salud OS. |
Hola,
Estamos de acuerdo egostar. Pero también puede verse como distintas formas de codificación... porque una cosa es lo mismo que la otra al fin y al cabo:
Ignoro si una forma es más correcta, elegante o aconsejable que la otra, pero, las dos formas son posibles y al cabo se consigue lo mismo... Así que es cuestión de la costumbre de uno, o de si se han establecido ciertas normas al respecto,... qué sé yo. Yo no abogo ni por una forma ni por otra. Creo que esto significa que es cuestión de gustos... en este caso creo que no me equivoco si digo esto, vamos. :) |
Pues si, estoy de acuerdo amigo David, todo depende del estilo de programar de cada uno y por supuesto que es válido, lo que no creo que sea bueno es dejar esos "huecos" en tu código.
Salud OS. |
Hola,
Bueno. Como ha recordado antes Román el propio compilador se encargará de advertirte de que hay un "hueco" en tu código que puede ser contraproducente. O sea, que llevas razón, que no tiene que ser muy recomendable ir dejando huecos por ahí... :) |
A mi me gustaría puntualizara algo.
Una cosa es que hay dos formas de poner un valor por defecto, como el caso del else y la asignación inicial; y otra cosa es usar como técnica para crear una función, el asignar un valor por defecto de incio y partir de ahí. En el primer caso, ya conocemos bien la función y simplemente estamos escogiendo una u otra forma de programar, y eso es cuestión meramente de gustos. En el segundo caso, podemos proceder como seoane, dando de antemano un valor erróneo. Nótese la diferencia sustancial: un valor erróneo, que no por defecto. Ese valor es el que le va a cuidar las espaldas. Pero en otro caso, corremos el peligro de no advertir el error y es donde no me acomodaría esa técnica. Ahora, en el caso de PHP, que no detecta ese tipo de cosas, quizá sea muy recomendable entonces la técnica de seoane, porque al no haber un compilador que nos eche la mano, ese valor erróneo nos ayudará. De cualquier forma, es más- en mi opinión -una técnica para cuando estamos apenas probando o diseñando la función, que para el código final // Saludos |
La franja horaria es GMT +2. Ahora son las 06:10:14. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi