Written by nomorelogic Luglio 15, 2014, 06:22:00 pm19686 ViewsRating: 0 (0 Rates)Print
Con la versione 2.6.0 di fpc è stata introdotta, tra le altre, una nuova caratteristica che vale sicuramente la pena di conoscere: Advanced recod syntax (sintassi record avanzata).
E' stata introdotta come elemento di compatibilità con Delphi e quindi è utilizzabile con la direttiva:
Solitamente quando si programma si ha in mente uno schema ben preciso: record + procedure = classe
e quindi, dovendo lavorare con le liste di record o oggetti, dobbiamo quasi subito risolvere un problema: implementare un "manager" che gestisca i record o utilizzare le classi?
E' bene sapere che i record possono avere funzioni e procedure, equivalenti a quelli che in OOP sono conosciuti come metodi!
Record e oggetti quindi si avvicinano mantenendo però una profonda diversità.
ereditarietà i record non supportano l'ereditarietà
contenuto variante con i record si possono definire contenuti varianti, con le classi no
memoria e passaggio dati
Caratteristica
Record
Oggetto
tipo dati
valori
puntatori
assegnamento
tramite l'assegnamento il loro contenuto viene copiato
con l'assegnamento sono passati per riferimento
come parametro
sono passati per valore
sono passati, quando parametri, per riferimento
memoria
sono allocati nello stack (a meno che non si faccia uso di New e Disposte che lavorano nello heap)
sono allocati nello heap
operator overloading i record permettono l'operator overloading, le classi no
gestione memoria i record sono costruiti automaticamente mentre le classi devono essere istanziate esplicitamente
costruttore i record hanno un costruttore di default senza argomento (volendo dichiararne uno bisogna che abbia uno o più parametri)
distruttore i record non hanno distruttore
metodi virtuali i record non possono avere metodi virtuali e non possono usare la keyword "message"
interfacce i tipi record non implementano le interfacce
Ho anche fatto una verifica personale (in quanto non ho trovato documentazione in merito) che però voglio approfondire e, quindi, non prendetela ancora per oro colato ma aspettate che a breve fornirò i risultati della prova. Mi sono domandato se nello stack la memoria occupata da ogni singolo item fosse al netto di funzioni e procedure oppure se lo spazio allocato comprendesse pure il codice. Non è una differenza da poco se applicata ad un array. Sembra che l'implementazione sia come ci si aspetterebbe: solo i dati nello stack.
Le differenze sono quindi sostanziali e come già accennato è importante conoscerne l'esistenza. Da quì i ragionamenti che si possono fare sono molteplici. Pensate ad esempio al classico accesso ai file con record tipizzato: si potrebbe incapsulare qualche funzione/procedura per trasformare una semplice struttura dati in un cursore (esempio: First, Next, Last, Prior, EOF, ecc...). Pensando invece alla gestione della memoria (ricordo che i record sono nello stack) ed ai fanatici dei garbage collector di cui il pascal è (a mio avviso) fortunatamente privo, possiamo essere certi di avere fatto un altro passo avanti in favore dell'efficenza e della facilità di programmazione allo stesso tempo. Altra riflessione obbligatoria va fatta per le liste, decisamente diverso l'approccio che questa funzionalità permette.
Si chiude quì questa breve introduzione sulla nuova caratteristica del compilatore fpc. Seguirà a breve un articolo con un esempio pratico.
About the author
nomorelogic registered at Italian community of Lazarus and Free Pascal on Marzo 10, 2012, 12:27:59 pm and has posted 2907 posts in the boards since then. Last visit was Oggi alle 11:21:45 am.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.