globaalit

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?
1203
Äänestä

Muut lukivat myös

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ä!

Äänestä

Kommentoi aloitusta


muuttujat kirjoitti:

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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu