Forum > Spanish

como usar registros avanzados

(1/1)

zelda16bit:
No he usado nunca registros avanzados y me gustaria que me explicarias en profundidad que es lo que tienen y como usarlos correctamente.

Tambien me gustaria saber que diferencia tienen con las clases y que tipo de contenedores hay en generic collection para trabajar con estos registros avanzados.

Edson:
Tampoco he usado Registros avanzados, pero sí he usado los clásicos Objetos (type Object) de Free Pascal.

Los registros avanzados son estructuras de datos que se comportan como los clásicos RECORD pero que tienen la posibilidad de incluir también funciones o procedimientos como las clases:
 

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---type  TSomeRecord = record    FSomeField: integer;    function SomeMethod: integer;  end; 
Aquí un ejemplo: https://blog.dummzeuch.de/2017/10/31/advanced-records-in-lazarus-fpc/

Como estructura de datos, se parecen más a los RECORD que a las clases, sobre todo porque se crean de forma estática y no soportan herencia (si mal no recuerdo).

Pero en Free Pascal también se tiene el tipo OBJECT para crear algo similar a los ADVANCED RECORD.

En resumen, los OBJECT son la estructura inicial de objetos que apareció en Pascal como un paso para la implementación final de clases. Por otro lado Delphi creó los Registros Avanzados como una mejora o ta vez como una copia de la funcionalidad que ofrecía C++. Pero fomo Free Pascal trata de seguir la compatibilidad con Delphi, terminó incluyendo, también, a los Registros Avanzados, aunque se necesita un modo especial.

Aquí una discusión al respecto: https://forum.lazarus.freepascal.org/index.php?topic=30686.0

En cuanto a los contenedores, lo que recuerdo es que no se llevan bien con Objetos o Registros Avanzados, porque han sido diseñados para manejar clases, así que mi sugerencia es que uses Clases si piensas usar contenedores, y así te evitarías algunos líos como: https://fpc-pascal.freepascal.narkive.com/6I67LNUK/generic-tfpglist-record-type-gives-me-compiler-error-operator-is-not-overloaded
 

zelda16bit:
Gracias por la ayuda Edson.  :)

Ñuño_Martínez:
Efectivamente, los registros avanzados son como objetos pero sin constructor, destructor ni herencia.  En cierto modo sí son como las struct de C++.

Lo digo como confirmación, ya que yo sí las he usado y sigo usando de vez en cuando.

Navigation

[0] Message Index

Go to full version