L'esperienza di programmazione pluridecennale ha portato a scrivere il codice usando convenzioni e notazioni "particolari", per cercare di aiutare il programmatore nella comprensione e manutenzione del codice.
Notazione ungherese aumentata
In easyhand adotta la notazione detta ungherese o ungara, implementata con nuove specifiche.
Uno dei problemi della programmazione è la manutenzione del codice nel tempo: dovendo modificare un codice, proprio o di altri, non si ha subito cognizione del tipo di dati che stiamo usando.
In C, come in altri linguaggi, il nome della variabile non permette di capirne il tipo e contenuto: la
notazione nasce per rendere subito identificabile il
tipo (variabile/struttura/puntatore) e permette di risparmiare notevole tempo ed bugs.
Esempi
iNum indica che è la variabile è di tipo interno (SINT iNum).
szTest indice che la variabile è una stringa (CHAR szTest[20]).
Notazione usata
notazione | Descrizione | Esempio |
---|
i | intero con segno 32bit | INT iValore |
ui | intero senza segno 32bit | UINT uiValore |
w | senza segno 16bit 'word' | WORD wValore |
dw | senza segno 32bit 'double-word' | DWORD dwValore |
b | Boolean | BOOL bFlag |
d | double | DOUBLE dValore |
p | puntatore (void) | void * pValore |
sz | stringa statica CHAR szValore[20] | CHAR szValore[100] |
psz | puntatore a stringa CHAR * | CHAR * pszValore |
s | struttura (generico) | S_ELEMENT sElemento |
ps | puntatore ad una struttura | S_ELEMENT * psElemento |
rs | Result Set usato con SQL_RS o similari | SQL_RS rsSet |
id | intero che identifica un record, solitamente un campo in autoincremento | SINT idCode |
ar | array di stringhe EH_AR | EH_AR arValue |
ari | array di interi | INT ariCode[100] |
ars | array di strutture | S_ELEMENT arsValue[100] |
dmi | struttura di tipo DMI | EH_DMI dmiElement |
pdmi | puntatore ad una struttura di tipo DMI | EH_DMI * dmiElement |
dt | Stringa contente data/ora in formato DT | CHAR dtOggi[20] |
eht | Struttura con data e ora in formato EH_TIME | EH_TIME ehTOggi |
lst | List EH_LST | EH_LST lstEsempio |
js | Json EH_JSON | EH_JSON jsInfo |
Convenzioni
Gruppi funzioni easyhand
Se una funzione si dichiara statica, quindi visibile solo nell'ambito del sorgente deve iniziare con underscore '_'.
Putroppo per motovi storici le funzioni hanno nomi non omogenei e nel tempo vengono cambiati.
Attualmente le funzioni si dividono in questo modo:
valore | Descrizione | Esempio |
---|
eh | funzioni del Kernel | ehStart() / ehAlloc() |
file | funzioni che operano sui file | fileOpen() / fileStrWrite |
time | funzioni che operano sui tempo | timeNow() / timeFormat() |
str | funzioni che operano sulle stringhe CHAR | strExtract() / strReplace() |
wcs | funzioni che operano sulle stringhe WCHAR | wcsReplace() |
srv | funzioni che operano in un modo server | srvSetup() |
Modus operandi
- I progetti fatti da più file sorgenti hanno un file che contiene il main() e altri no
Chi contiene il main deve includere #include "/easyhand/inc/eh_main.h"
Gli altri #include "/easyhand/inc/easyhand.h"
- sSetup
Solitamente si crea una struttura genera S_SETUP sSetup indipendente dal programma che contiene tutte le variabili globali condivise dai sorgenti.
Chi si occupa di questa struttura è una srvSetup() di tipo srv.