Newsgroup: it.comp.lang.delphi
Titolo: Variabili pubbliche

Come posso fare per dichiarare una variabile di tipo public, ovvero voglio
la stessa variabile sia visibile a più UNIT?
Saluti Enrico

 la stessa variabile sia visibile a più UNIT?
La dichiari nella sezione INTERFACE di una unit (e non in implementation)
O nella sezione PUBLIC di una classe.
Ciao, Davide DG

 Ciao, Davide DG
Grazie per il consiglio :))
Enrico

perņ la unit deve essere visibile dalle altre (con l'uses)
Mi permetto, comunque, di sconsigliare l'uso di variabili globali.
--
Andrea Laforgia (ICQ 87230455)

 Andrea Laforgia (ICQ 87230455)
Sarebbe gradito un commento esplicativo a riguardo...
Ciao, Davide DG

Sarebbe gradito un commento esplicativo a riguardo...
Le variabili globali, in quanto tali, possono essere modificate in
qualunque punto del programma e questo e' contro i principi di
"information hiding" (sono fonti possibili di bug).
Oggigiorno, con l'OOP, si sconsiglia sempre l'uso delle variabili


 globali.
Come ragionamento potrebbe essere corretto in linea di principio, ma nella
realtà dei fatti utilizzo costantemente variabili sia locali che globali
senza alcun problema.
--
- Carlo -
c.b...@libero.it

senza alcun problema.
Come ragionamento protrebbe essere corretto, se applicato a progetti
piccoli. E' una questione oggettiva, non soggettiva : le variabili
globali introducono dei rischi in programmazione e questo e' risaputo
(almeno i programmatori dovrebbero saperlo). Specie in quei tipi di
progetti che hanno una certa dimensione. Se ne sconsiglia l'uso ed e'
bene seguire i consigli. Che poi uno le possa utilizzare senza avere
particolari problemi, e' un altro discorso.
Non e' detto che i problemi non nascano.
--
Andrea Laforgia (ICQ 87230455)
"programmatori si nasce, non si diventa".


Il fatto che tu le usi senza problemi non significa affatto che i problemi
non possano nascere.... e poi... come dice Andrea Laforgia... non è un
affare usare le variabili globali.... credimi... chiunque le usi
rischia...usare le variabili globali significa esporre il programma a rischi
altissimi in fase di mantenimento dello stesso... non pensare alla
manutenzione di oggi... ma pensa a quella dell'anno prossimo.
Se poi proprio hai il naturale istinto ad usarle... documentale non bene ma
benissimo...  altrimenti è la fine.
Ciao !
Andrea

 altissimi in fase di mantenimento dello stesso...
Dipende da come le utilizzi ... personalmente documento in maniera pressochè
perfetta tutti gli applicativi che richiedano parecchio codice e future
revisioni.


 Non e' detto che i problemi non nascano.
Questo punto non lo condivido, come ho già detto a "The DeerBear" (leggi
anche la sua risposta per completezza), se un programma oggi funziona alla
perfezione mediante l'utilizzo di variabili globali non vedo come queste
ultime possano influire sul futuro funzionamento del programma.


 queste ultime possano influire sul futuro funzionamento del programma.
condivido (anche tu pero' come "scatenatore di flames non sei male! ;),
scherzo! :))
penso che Andrea e Deerbear facciano riferimento a cose del tipo
var i: integer;
procedure pippo;
begin
 for i:=1 to 10 do ...
end;
meglio:
procedure pippo;
var i: integer;
begin
 for i:=1 to 10 do ...
end;
anche se nel thread si sta parlando addiruttura da unit a unit,
penso che quando possibile non si debbano usare, in alcuni casi sono pero'
indispensabili e non penso che nascano problemi perche' si utilizzano
Ciao,
Alan Solo

ultime possano influire sul futuro funzionamento del programma.
Non sai che il 75% del ciclo di vita del software consiste nella
manutenzione dello stesso ? 
E per manutenzione si intende modifiche e operazioni varie che possono
essere fatte sul codice originale.
La questione, ripeto, e' oggettiva : le variabili globali sono
pericolose.


indispensabili e non penso che nascano problemi perche' si utilizzano
Le variabili globali SONO OGGETTIVAMENTE pericolose e NON SONO affatto
indispensabili.
Tutto e' fattibile senza il loro utilizzo (basta incapsulare in classi
che controllino la corretta gestione dei dati).


revisioni.
Certo, dipende da come le utilizzi, ma resta (oggettivamente) il loro
rischio. E' come se cammini con una macchina senza sportelli, non vuol
dire che non e' rischiosa, anche se tu ti metti nelle condizioni per
non cadere.


 "programmatori si nasce, non si diventa".
pppppffffffffhhhhhhhhhhhhaahahahhaahhahahahaa!!!

pppppffffffffhhhhhhhhhhhhaahahahhaahhahahahaa!!!
Ti fara' ridere, ma e' vero (purtroppo)...
Abbiamo un calo demografico, ultimamente...
;)
--
Andrea Laforgia (ICQ 87230455)
"programmatori si nasce, non si diventa".

Dipende da come le utilizzi
http://www.inf.unitn.it/lezioni/richiamidic/sld019.htm
"Le variabili globali sono cattive, almeno quanto il goto, perche'
violano il principio della localita' dell'informazione (information
hiding). E' impossibile gestire correttamente progetti "grossi" nei
quali si faccia uso di variabili globali. Principio del NEED TO KNOW :
Ciascuno deve avere TUTTE E SOLO le informazioni che servono per
svolgere il compito affidato".
http://www.cs.may.ie/courses/cs310/sld040.html
"modification of a global variable by a function is called a
"side-effect" ... to be avoided".
http://users.swing.be/francois.piette/midwareuk.htm
"Code must be written to be fully reentrant. Do not use global
variables, but instead put all the variables in the TServerObject
class."
http://elwww.cc.purdue.edu/~cs180/java.programming.standards.html
"Avoid declaring globally-visible variables. Globally-visible
constants, enumerated types, classes, and file names are okay, but do
not use global variables unless the project assignment specifically
tells you to do so."
http://www.elwoodcorp.com/alu/table/style.htm
"[1-3] How can I improve my Lisp programming style and coding
efficiency?
...
Use local variables in preference to global variables whenever
possible."
http://www.abxsoft.com/rules.htm
"4.3.1 Do not use global variables. 
Justification: Global variables create the opportunity for unintended
and unexpected side-effects when code is altered. Static members
should be used rather than global variables whenever possible. One
exception: use of static members can cause concurrency problems when
you are working in a multi-threaded environment. 
Reference: Paragraphs 4.20 and 4.22.5, XYZ C++ Guidelines."
http://www.cs.byu.edu/courses/cs290/style.html
"Do not use global variables"
http://www.csc.calpoly.edu/~tpederse/Courses/win99/standards.html
"Do not use global variables." 
http://www.cs.siue.edu/programs/styleguide.htm
"DO NOT use global variables (unless your instructor says it is
o.k.)."
...
...
...
e come questi, altri 100.000....


 Alan Solo
Io mi riferisco al fatto che se oggi la variabile X utilizzata nei moduli A
e B verrà utilizzata in un futuro modulo C ed in questo modulo C le vengono
assegnati valori inconsistenti poi trovare il problema diventa un casino.
Andrea

 end;
Beh.. questo caso č _caldamente_ sconsigliato dal compilatore stesso!! ;PP
(da D3 in sů mi pare...)
Ciao, Davide DG

 Abbiamo un calo demografico, ultimamente...
Di questo non ne sarei molto sicuro invece ;P
Ciao, Davide DG

> La questione, ripeto, e' oggettiva : le variabili globali sono pericolose.
Oggettiva, eh?
Che bel flame che ne è nato !
Io adoro i flamez: ne vengono fuori opinioni più disparate su argomenti solo
in apparenza superficiali.
Qui si discute degli <stili> di programmazione.
Stili che possono essere assai differenti, ma ognuno perfetto (o cmq
perfettibile) per chi lo adopera (mentre goffo o pericoloso per qualcun
altro).
Sinceramente non adoro le variabili globali... generalmente preferisco l'uso
di funzioni che ritornino un valore procedure per impostarlo... che è poi il
principio di getters&setters ... sono più "sicuri" perchè forniscono maggior
controllo. Maggior controllo perchè permettono di intervenire (e di
prevenire) a monte, in un unico punto, senza dover, in ogni parte del
programma, assicurarsi di _poter_ cambiare un valore o essere sicuri della
consistenza di quel valore.
Tuttavia... potrebbero esserci casi in cui l'uso di variabili globali
potrebbe tornare molto più utile e comodo per un programmatore, anche solo
dal punto di vista di organizzazione mentale. E forse solo per _quel_
programmatore.
Se tu ritieni che l'uso di variabili globali sia _oggettivamente_ pericoloso
(come penso anch'io, ma solo in progetti molto molto complessi e soprattutto
se gestiti in team), ciò potrebbe non esserlo _per_ un altro programmatore,
che magari (siamo in casi di idealità), avendo una padronanza magistrale del
linguaggio e una memoria di ferro (oppure semplicemente uno stile
programmazione molto standardizzato), lo porta a usare le variabili globali
in modo corretto (cioè ad evitare sapientemente i "pericoli" delle var.
globali)
Non ritenendomi tale programmatore, cmq, preferisco "andare sul sicuro"...
senza però affermare che il _mio_
stile di programmazione sia "oggettivamente" migliore, o più sicuro. Lo sarà
per me (e per altri, probabilmente!),
ma è impensabile pensare che lo debba essere per tutti.
Finchè si è nella correttezza sintattica e funzionale, un linguaggio
permette di "giocare" attorno al codice con molte sfumature, tutte
contemporaneamente corrette e altrettanto sicure, se per noi lo sono.
--- tenendo conto che sono le 3.50 ... se ho scritto qualche cosa di
incomprensibile ... chiedo perdono!!! ---
Ciao, Davide DG
P.S.: mi interesserebbero le opinioni di tutti a riguardo :))

 svolgere il compito affidato".
Resta il fatto che ne sono convinto anch'io (vedi altro post), ma, come già
detto in passato (se ti ricordi),
io preferisco pensare di avere (e lasciare) più libertà di pensiero nello
stile di programmazione. Ovvio che i nosti stili sono differenti... ma ti
sei chiesto *se* ne esista uno di migliore?
Ciao!! Davide DG

 ;PP
si' lo so e' un esempio banale ;)
per fare un esempio pratico che utilizzo molto spesso,
uso una variabile globale chiamata FileDB (o simile) che contiene il nome
fisico del file del databse su cui sto lavorando, nel create del
datamodule leggo dall'alias del BDE appunto il nome del file e lo metto
in una variabile globale nel data module, infatti questa viene utilizzata
in piu' parti del programma come in form di backup, di restore, ecc...
Non dico che e' un metodo pulito, anzi ora che ne stiamo discutendo forse
sarebbe meglio metterlo come membro dell'oggetto datamodule (magari con
getters/setters), pero' con il mio metodo "grezzo" non mai avuto
problemi.
Come hai detto tu (in un altro post) i problemi aumentano
esponenzialmente se il lavoro e' fatto da un team
beh, ciao! :)
Alan Solo
ps: che bello flamare!
(no dai questo non e' un flame, almeno si discute di cose utili... ;))

 pericolose.
Per quel che mi riguarda posso solo dire che condivido il principio, ma non
vedo nulla di pericoloso nell'utilizzo delle variabili globali.


 indispensabili e non penso che nascano problemi perche' si utilizzano
Anche io la vedo in questo modo.
Infatti ho detto che come principio lo condivido, anche se poi non lo ho
applicato completamente nelle mie applicazioni.
Ciao! :)


 e come questi, altri 100.000....
Andrea, non ho detto quanto dici sia sbagliato, anzi, ti ho detto pure che
condivido quel principio (che non conoscevo)!
Forse non ho mai sviluppato progetti sufficientemente grossi da essere
manutenuti con difficoltà, ma nella realtà della MIA esperienza (e non di
quello che "dicono gli altri") non ho mai avuto problemi a manutenere un
programma che facesse utilizzo di variabili globali. Sto solo dicendo quelle
che sono le mie esperienze, giuste o sbagliate che siano ....


ma è impensabile pensare che lo debba essere per tutti.
Uh???
Se un rischio c'e', e' un rischio per tutti, non per UN solo
programmatore.
--
Andrea Laforgia (ICQ 87230455)
"programmatori si nasce, non si diventa".

vedo nulla di pericoloso nell'utilizzo delle variabili globali.
Auguri.


sei chiesto *se* ne esista uno di migliore?
UFFAAAA !!!
NON STO PARLANDO DI MIO STILE DI PROGRAMMAZIONEEEEE, lo volete capire
o no ? Sto parlando del giudizio UNIVERSALE che viene espresso sulle
variabili globali. Io mi sono permesso di sconsigliarlo, mi e' stato
chiesto il perche', ho spiegato il perche' e poi mi si critica perche'
si pensa che il fatto che sia UNIVERSALMENTE accettato che le
variabili globali NON VADANO usate sia solo un MIO stile di
programmazione, che non va imposto agli altri!!!! Ragazzi, ma vi
rendete conto di quanto e' assurdo il vostro modo di porvi in queste
discussioni ???


che sono le mie esperienze, giuste o sbagliate che siano ....
Le TUE esperienze non contano. Cosi' come non contano le MIE. Cosi'
come non contano quelle PARTICOLARI di nessun altro.
L'informatica e' fatta di standard "de facto". 
E' universalmente noto che le variabili globali sono rischiose e vi ho
anche spiegato il perche', dandovi anche dei riferimenti. Ora sta a
voi fare buon uso dei consigli.
Io non sto parlando di un MIO punto di vista.
Ti faccio presente che "quello che dicono gli altri" e' importante a
mio avviso, quando con "altri" si intende gente che ha costruito il
mondo informatico di oggi.
Poi, fate come volte, in fondo che mi interessa ???


 ???
che centra, sono punti di vista, ad esempio lo "standard coding style"
vuole una sintassi del tipo
if condizione then
 FaiQualcosa...
io preferisco (o meglio ormai sono abituato) a
if Condizione
 then ...
 else ...
tanto per dire un'altra, mi vuoi uccidere per questo? :)
Ciao, senza rancore ;)
Alan Solo

problemi perche' uno usa variabili globali
Apprezzo la precisazione, per quanto superflua, e faccio presente che
io non ho affermato che i problemi NASCONO PER FORZA AL 101%, quanto
invece che C'E' UN'ALTA POSSIBILITA' che il codice diventi di
difficile manutenzione.


 programmatore.
[Premettendo che mi va di scrivere parecchio così perdo un po' di tempo
(sono in pausa studio)...]:
Qui avrei dovuto specificare : è impensabile che lo debba essere per
tutti... e in tutte le occasioni.
Se la strada è asciutta e il traffico poco intenso, sarà più "pericoloso" (e
quindi più propenso a creare incidenti) un automobilista novello, magari con
altre persone che lo distraggono (lavoro in team)... o un automobilista
esperto che conosce la strada e guida solo ?
Se poi la strada è bagnata, il pericolo aumenta... ma aumenta di poco per
l'automobilista esperto e molto di più
per quello novello.
La strada bagnata, oggettivamente "pericolosa", potrà essere gestita in 2
modi differenti : in quello sicuro dell'automobilista esperto e in modo
insicuro da quello novello
Allo stesso modo, se un programmatore sa gestire in modo sicuro e affidabile
le var. globali, neutralizzerà il fattore di pericolosità, che può
presentarsi però in situazioni diverse anche a lui (programmi molto
complessi ecc).
Del resto anche il programmare in sè è "pericoloso" perchè si possono
commettere sbagli. Ma non dirai certo che programmare è _oggettivamente_
pericoloso ?
Non so se riesci a seguire il filo della differenza tra la pericolosità
_oggettiva_ di un'operazione (che si presenta in modo uguale a _ogni_
programmatore) e quella _soggettiva_, che può essere neutralizzata diminuita
o aumentata dallo stile e dall'esperienza di un programmatore e dalla
complessità del progetto.
Detto questo, riconfermo per l'ennesima volta che, in linea generale,
anch'io preferisco non adottare var globali ma fare affidamento su sistemi
diversi (di cui già si è parlato); ciò non toglie, tuttavia, che le var
globali possono risultare più pericolose o meno pericolose in situazioni
diverse o addirittura non esserlo affatto, anzi migliorare il programmatore
... ma se la pericolosità (**) può essere variata, allora non è oggettiva ma
opinabile.
** : Si può anche intendere, a questo punto (per conciliare le 2 visioni),
una pericolosità "assoluta" (oggettiva), come un "coefficente" di difficoltà
che rimane _costante_ e gli "effetti" di questa pericolosità (soggettivo),
che possono essere agli estremi, resi enormi o nulli.
In questo caso però puoi vedere che anche l'uso di puntatori è
oggettivamente pericoloso... dipende dal tipo di programmatore (e programma,
ma forse meno in questo caso).
Ciao!! Davide DG

 Auguri.
Siamo un po' lontani da Natale, non trovi? O forse č il compleanno di Carlo?
Ciao, Davide DG

 discussioni ???
Cioè ? Solo perchè non ti "diamo" ragione ma ci piace criticare, discutere,
rivedere, mettere sotto accusa
un parere per poter valutare meglio la situazione... il nostro modo di porci
è assurdo?  Io credo piuttosto
che sia assurdo credere nella "politica" dell' ipse dixit...
Ciao, Davide DG

 Mi avvilisce vedere che, invece, sono in pochi a saperlo.
Anche chi magari è da poco sul ng? Chi cerca di imparare qualcosa dalle
discussioni,
che non siano semplicemente "Come si pulisce un TMemo?" o "Come metto
un'icona nella barra vicino
all'orologio?"
Andiamo... il ng è fatto per imparare gli uni dagli altri... non ha molto
senso dire "Si fa così" ...
Anche se per molti (o per pochi) può risultare noioso perchè lo sanno già, è
sempre meglio
esprimere il perchè di un certo tipo di scelta, per chi magari non lo sa,
non trovi?
Ciao, Davide DG

> ... il nostro modo di porci è assurdo?
oink oink!! (:8)
scusatemi ho perso il filooooo sto fondendoooooooo!!!!!
[mi permetto di sconsigliare thread cosi' lunghi!!]
Ciaooo!

 oink oink!! (:8)
;PPPP  Ops!!  E' che sono abituato ad usare la "o" chiusa... :-)
Davide DG

pericoloso ?
Accidenti se lo e'.


e allora "il gioco vale la candela".
Stai confondendo.
I puntatori costituiscono un elemento del linguaggio che fornisce un
utilita' indispensabile. L'uso delle variabili globali puo' essere
aggirato.


è assurdo?  
No, mi spiace ma non e' cosi'.
Non e' necessario discutere, rivedere e mettere sotto accusa. 
E' da stupidi mettere sotto accusa qualcosa che e' UNIVERSALMENTE noto
a tutto il mondo informatico.
A volte bisogna avere l'umilta' di dire : questa cosa non la sapevo e
cerchero' di seguire il consiglio di chi ne sa piu' di me (per i
fanciulli che potrebbero fraintendere : non sto facendo riferimento a
me, chiaramente, ma a quei "molti", di cui si mettono in dubbio le
parole). Non bisogna accusare gli altri di voler imporre il proprio
modo di pensare, solo perche' vi e' stato rimarcato che il vostro modo
di utilizzare un aspetto del linguaggio puo' essere pericoloso.
E non ci si nasconda dietro un "io le uso perche' a me non hanno mai
dato problemi", perche' significa mettersi una benda sugli occhi e non
focalizzare il problema che, ripeto per la trecentocinquantasettesima
volta non e' soggettivo, ma e' oggettivo, a prescindere da qualsiasi
esperienza personale.


non trovi?
E' esattamente quello che ho fatto, se rileggi con attenzione il
thread dall'inizio. Mi e' stato chiesto il perche' sconsigliassi una
certa tecnica, ho spiegato il perche' ed ora mi si dice che non ha
senso dire "si fa cosi'".
Avete preso un consiglio per un "si fa cosi'".
Bella predisposizione ad accettare i consigli, complimenti.


 Io non sto parlando di un MIO punto di vista.
E' questo il punto, tu continui un discorso sulla base dell'Ipse Dixit, cosa
che io non faccio.


 Siamo un po' lontani da Natale, non trovi? O forse è il compleanno di
Carlo?
Già fatto .... ;)


 Auguri.
Devo rispondere?


 predisposizione ad accettare i consigli, complimenti.
ti ho gia' dato ragione e ti ho assicurato che da ora in poi su tuo
suggerimento saro' cauto con le vg (variabili globali ;) e di questo ti
ringrazio perche' sono qui per migliore (ma anche per discutere e non
solo per prendere le cose "perche' si fa cosi'")
Ciao,
Alan Solo

Cosi' come non contano le MIE.
avete cosi' poca considerazione di voi stessi ???
le mie contano ma, a questo punto, non le dico
a nessuno altrimenti mi saltano tutti addosso !!!
           :-O

 a nessuno altrimenti mi saltano tutti addosso !!!
Ognuno deve tenersi le proprie esperienze, tuttal+ si può barattare
qualcosa! :)
Ciao! :)


 voglio la stessa variabile sia visibile a più UNIT?
risposta definitiva:
non farlooooooo!! ti potrebbe scoppiare il Picccciiiiiiiiiiiiiiiiiii!!!
ahahhahhahah uhuhuhuhhu
con un flame del genere mi posso permettere di tuttooo
aahhahahah!!! buu biiii aaahhh! eueueue uauauaua
iuiu iiuiui SBONK!

qualcosa! :)
si, ma con estrema cautela ;-)

 qualcosa! :)
Carlo, devi stare attento a quello che scrivi,
"tuttal+" e' molto diverso da "tuttal++" ;))
Ciao!
Alan

 wrote in message
8v9hv1$3ssji$1...@ID-44131.news.dfncis.de...

ALAN !!!!!
SEI FUSO !!!!!!!!!!!!!!!!!
SEI GRANDE !!!!!!!!!!!!!!!!!!!!!!!!
^______________________________^
( sorriso marziano !!! )
Andrea

 ha scritto nel messaggio
news:8v9j5e$3q10b$1...@ID-44131.news.dfncis.de...

Ahia, se mi sentisse Laforgia mi direbbe che tuttal+ è molto indietro
rispetto a tuttal++, quindi bisogna fare molta attenzione! ;-))
Grazie per la segnalazione! ;-)


 si, ma con estrema cautela ;-)
Tu cosa offri?
Ciao! :-)


 ovviamente non stava parlando per se
Andrea ha il vizio di fraintendere spesso... ma preferisco pensare di
essermi espresso male io. 8)
Ragazzi, come al solito (anche mea culpa) questo thread si sta trasformando
in un flame ... e Outlook si sta
perdendo i messaggi dopo un certo livello di ramificazione... sigh... non
potrň seguire l'avvincente seguito
di questo thread!! ;PPP
Ciao, Davide DG

Tu cosa offri?
sostanzialmente sono d'accordo con il povero Andrea (avrei presentato la
cosa in modo diverso...), e' vero che Andrea non ha un bel modo di proporsi
(sembra che se le cerchi proprio) ma... insomma...
a presto,
il tuo omonimo  ;-)

 il tuo omonimo  ;-)
:-)
Ciao! :)


programmatore.
L'unico caso in cui le variabili globali tornano utili e' quando il
programmatore diventa pigro :)
Non c'e' nessun motivo che le giustifichi, diciamo che sono un
retaggio della programmazione procedurale.
Ciao
--
Piero Bonanno
bop...@libero.it
pie...@tiscalinet.it
bop...@tin.it
bpie...@hotmail.com
______________________________________________
"Madame, lei ha tra le gambe uno strumento
che puo' offrire piacere a migliaia di persone,
e tutto quello che sa fare e' grattarlo"
- Sir Thomas Beechan a una violoncellista

un giorno all'altro rendendo la tua applicazione "inutile".
Perche' qualsiasi sw e' destinato a cambiare, per 10000 motivi. Quando
si vuole realizzare un buon sw, la prima cosa da tenere in conto e'
l'apertura alle possibili modifiche. Un buon sw deve essere quanto +
aperto possibile a future espansioni o riscritture. Che puntualmente
si presenteranno.
Ciao
(ma hai ricevuto la mia ultima mail con l'esempio della mailslot?)


Se sì, perchè non le eliminano? Certo... non eliminano neanche il tabacco!!
Una volta esisteva la programmazione procedurale, non c'erano le
classi e certe cose erano necessarie. Con il tempo ci si accorse di
quanti problemi portavano con se' e non e' un caso che uno dei
linguaggi + recenti, Java, non le prevede
Ciao
