![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
#1
|
|||
|
|||
Uso de nil
Saludos a todos,
Por favor, alguien podría explicarme brevemente que significa el nil? Normalmente yo acostumbro a poner por ejemplo:
pero veo a menudo que los ejemplos y la ayuda coloca:
En realidad no entiendo para que es esa comparación con nil. Gracias. |
#2
|
||||
|
||||
Hola,
La palabra reservada "nil" indica en Delphi una dirección indeterminada en la memoria. Vale asignar "nil" a un puntero, de manera que este no apunte a ninguna dirección de memoria en concreto. Una variable cuya referencia es un tipo de clase es en realidad un puntero que referencia a determinado objeto, de ahí que pueda asignarse también a este tipo de variables "nil". En el caso que te ocupa se está preguntando (más o menos) lo siguiente: "¿SerialPort apunta a alguna dirección de memoria en concreto? Sí es así, ejecútese la instrucción siguiente; si no es así deje de ejecutarse la misma". Lo mismo no me expliqué correctamente pero eso tengo yo entendido que significa la palabra reservada "nil". Por poner un ejemplo, cuando se destruye un determinado objeto su variable no apuntará ya a la dirección de memoria en que se hacía referencia (si alguna vez fue instanciada la clase de objeto en cuestión) a dicho objeto, y, por lo tanto, la variable de marras será "nil". |
#3
|
||||
|
||||
Cita:
Tambien el código: se puede traducir como: ¿el Objeto SerialPort ha sido creado previamente?: - Si, por tanto se puede acceder a su propiedad Caption, así que la modificamos. - No, entonces, si intentamos acceder a una propiedad (Caption en este caso) que en realidad no existe en memoria, estamos traspasando un puntero nulo y obtendríamos un Access Violation. Como se puede apreciar, es una pregunta de seguridad. Al tiempo de destruir el objeto SerialPort, seguro que pone FreeAndnil(SerialPort). Resumiendo: - Si declaramos una variable que desciende de Tobject, como valor primario debe tener nil (delphi ya lo hace por nosotros), aunque yo prefiero poner Objeto := nil (para clarificar el código) - Cuando vamos a crear el objeto, miramos si tiene nil:
Las funciones Assigned y FreeAndnil nos ayudan bastante en nuestro código: Assigned(objeto) es identico a poner if Objeto <> nil then
saludos |
#4
|
||||
|
||||
Hola.
Aquí dejo otro ejemplo:
En definitiva, la comparación de un objeto con nil es para saber si existe y si tiene una dirección de memoria asignada. Hasta luego.. ![]()
__________________
No todo es como parece ser... |
#5
|
||||
|
||||
Cuidado con ese código, no es standard (lo digo por otro hilo que habla de stardares
![]() el TOracleDataset.Create está dentro del bloque try, esto quiere decir que si se produce una excepción al tiempo de crear ese objeto, irá al bloque except, e intentará liberar un objeto que aún no se ha creado. Además no se usa FreeAndNil en el except, así que de nada nos servirá Assigned. Código propuesto:
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
||||
|
||||
Hola:
Lepe, Sinceramente tienes toda la razón ![]() Saludos.. ![]()
__________________
No todo es como parece ser... |
![]() |
|
|
![]() |
|