Kun puhutaan että globaaleja muuttujia ei pitäisi olla lainkaan, mitä sillä tarkoitetaan?
Esimerkiksi, kun Borlandin Ide perustaa ja alustaa projektin, se julistaa globaalissa tilassa, siis kaikkien funktioiden ulkopuolella:
TForm1 *Form1;
Sehän on globaali muuttuja. Joskin hyvin paketoitu.
Itse olen noudattanut sellaista linjaa että yleensä yksi itse rakentamaani luokkaan kuuluva muuttuja on globaalinia, ja siinä on pakattuna/kapseloituna valtavasti dataa.
Pitäskö muuttuja esitellä main funktiossa ja suunnitella ohjelma niin että missä tahansa funktioketjussa olion osoite on välitetty paramerina?
Olen kokenut asian niin, että jos data ei olisi saatavilla mistä tahansa(luokkaan kuuluvasta) funktiosta, ohjelman suunnittelu olisi valtavan vaikeaa. Erityisesti kun ohjelmani yleensä alkavat pienestä ja kehittelen niitä vuosien saatossa.
Niin, mitäpä sanotte?
Esimerkiksi, kun Borlandin Ide perustaa ja alustaa projektin, se julistaa globaalissa tilassa, siis kaikkien funktioiden ulkopuolella:
TForm1 *Form1;
Sehän on globaali muuttuja. Joskin hyvin paketoitu.
Itse olen noudattanut sellaista linjaa että yleensä yksi itse rakentamaani luokkaan kuuluva muuttuja on globaalinia, ja siinä on pakattuna/kapseloituna valtavasti dataa.
Pitäskö muuttuja esitellä main funktiossa ja suunnitella ohjelma niin että missä tahansa funktioketjussa olion osoite on välitetty paramerina?
Olen kokenut asian niin, että jos data ei olisi saatavilla mistä tahansa(luokkaan kuuluvasta) funktiosta, ohjelman suunnittelu olisi valtavan vaikeaa. Erityisesti kun ohjelmani yleensä alkavat pienestä ja kehittelen niitä vuosien saatossa.
Niin, mitäpä sanotte?
Vastaukset 1
Vanhimmat
Jos on olemassa joku muuttuja joka käytetään laajasti eri luokissa, oikea tapa on määritellä sitä globaaliksi (yksinkertainen esimerkki: piirtoohjelma jossa on "globalinen" skalaus. Voit tietysti jokaiselle elementille (suorakulmio, ympyrä...) välittää piirtokutsussa skaalauskerroin parametrina, mutta tämä pinopompottelu hidastaa toimintaa. Tavallisesti hyvin rakennetussa ohjelmassa on ainakin yksi globaali muuttuja, gApplication, eli itse ohjelma, jotta ei tarvitsisi hakeutua ylöspäin hierarkiassa mielettömiä matkoja).
Globaali-muuttujat ovat olemassa siksi että joskus niitä tarvitaan. Silloin niitä käytetään. Ei kukaan koskaan ole sanonut että niiden käyttö olisi kieletty, ainoastaan että niiden käyttö pitäisi järjellä rajoittaa, koska ne tekevät ohjelman virheherkemmäksi (virheet vaikeammin jäljittettävissä) sekä koodi on vaikeampilukuisempi.
Sama asia koskee goto-lausetta. 99% tapauksissa jossa käytetään lauseketta se on osoitus huonosta ohjelmointitaidosta. 1% tapauksista se on osoitus hyvästä ohjelmointitaidosta. Siksi se on kielessä olemassa.
Tee rauhassa miltä tuntuu luontevalta. Ei ohjelmointi ole mikään maranata-asia, kaikki taplaa tyylillänsä!