Dobra vychova programatora – Offtopic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dobra vychova programatora – Offtopic – Fórum – Programujte.comDobra vychova programatora – Offtopic – Fórum – Programujte.com

 

olgo0
Věrný člen
23. 8. 2007   #1
-
0
-

zdar mam jeden teoreticky dotaz. vela krat som cital ze je "nepekne" pouzivat globalne premenne v tele funkcie. rad by som vedel co na to nejaky skusenejsi vyvojary. pripadne teda vas nazor na tuto "programatorsku cnost"

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
ChaoticRoman
~ Anonymní uživatel
15 příspěvků
23. 8. 2007   #2
-
0
-

jo, jde o víc věcí (ale zkušený vývojař nejsem):

1.) funkci, která má jen vstup a výstup a nepoužívá nic z vnějšku, můžeš snadno použít v jiném programu. stačí zkopírovat. co potřebuje z globálních ji předej parametrem a máš to.

2.) je to přehlednější. máš hlavní funkci a ta volá podprogramy. víš, co se kde s čím děje a snáz se debugguje.

3.) globální proměnné je dobré používat na udržování dat nutných v celém běhu, lokální pro potřeby právě běžící fce. takže globální upravovat jen jako výstup nějaké fce (návratová hodnota nebo parametr odkazem), číst jako parametr lokální proměnné.

ale z každého pravidla existuje vyjímka. pokud je to nesmyslné plýtvání pamětí, pracuj s globální proměnnou (nebo můžeš použít parametr odkazem).

Nahlásit jako SPAM
IP: ...–
Zdeny
~ Korektor
0
Grafoman
23. 8. 2007   #3
-
0
-

1b) Například používáš rozsáhlou knihovnu, ve které máš nějaké globální proměnné. Rozhodneš se tuto knihovnu využít s jinou knihovnou, která taky používá globální proměnné, a naneštěstí stejně pojmenované...

Nahlásit jako SPAM
IP: ...–
www.devtea.cz | zdenekvecera.cz | @ZdenekVecera
Redaktor Programujte.com a Živě.cz
mephi0
Expert
23. 8. 2007   #4
-
0
-

- zaciatocnikovi to moze byt jedno
- pokrocili sa rozhodne sam
- expertovi do zdrojakov vela ludi nechodi

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
sn3d0
Věrný člen
24. 8. 2007   #5
-
0
-

mephi píše:- expertovi do zdrojakov vela ludi nechodi


Expertovy chodi do kodu viac ludi ako by si si myslel ;)

Globalne premenne vo funkciach? No zalezi od pouzitia. Napriklad v klasickom Cecku je bezne pouzivat globalnu premennu errno. Taktiez rozne file descriptory alebo v C++ cin cou cerr.. Lenze to su take tie ako to povedat, proste standardizovane premenne ktore maju svoje opodstatnenie. Niekedy s pohladu funkcnosti je treba nieco vysunut ako globalnu premennu. Tu je lebsie pouzivat Singletony(ak ide o OOP). Napriklad trieda reprezentujuca konfiguraciu aplikacie alebo logovane alebo nejaky language-dictionary. Tieto veci sa vecsinou mozu pouzivat kdekolvek v kode a predavat si ich argumentom by zase nebolo velmi pekne. To by potom snad kazda funkcia mala ako povinny parameter odkaz na tu triedu.

Vydel som vsak kod ktory pouzival hojne globalnych premennych aj tam kde nemusel. Toho cloveka co to napisal nakopat do zadku a nikdy ho nepustit ku klavesnici. Neskutocne zle sa ten kod lustil. Proste vsade tam boli nejake premenne a clovek ani za boha nevedel odkial sa tam tie data beru, kde sa presne plnia, kde sa dalej pouzivaju..

Moj nazor teda je: radsej sa tomu vyhnut!

Nahlásit jako SPAM
IP: ...–
shutdown -h now
olgo0
Věrný člen
24. 8. 2007   #6
-
0
-

no ja som skor myslel pouzivat globalne premenne (a tahat data od nikial) alebo vsetko volat odkazom

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
sn3d0
Věrný člen
24. 8. 2007   #7
-
0
-

ked mozes tak radsej tahaj odkazom... fakt globalen premenne su strasny hnus ked si na to clovek zvykne.

Nahlásit jako SPAM
IP: ...–
shutdown -h now
olgo0
Věrný člen
24. 8. 2007   #8
-
0
-

To sn3d: zameslel som sa nad tym ked som otvaral viac adresarov. mal som dinamicke pole ukazatelov na dir_deskriptory (tzn **DIR) potreboval som to pole dostat do funkcie ktore ho podavala dalsej funkcii. pole mohlo dinamicky menit rozmer a teda aj polohu v pameti. tak mi nezostalo nic ine bud globalna premenna alebo viacnasobne volanie odkazom (v tomto pripade som mal teda ****DIR)

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Tomcat
~ Anonymní uživatel
53 příspěvků
24. 8. 2007   #9
-
0
-

olgo píše:#
# To sn3d: zameslel som sa nad tym ked som otvaral viac adresarov. mal som dinamicke pole ukazatelov na dir_deskriptory (tzn **DIR) potreboval som to pole dostat do funkcie ktore ho podavala dalsej funkcii. pole mohlo dinamicky menit rozmer a teda aj polohu v pameti. tak mi nezostalo nic ine bud globalna premenna alebo viacnasobne volanie odkazom (v tomto pripade som mal teda ****DIR)


No myslim, ze resenim by byl treba spojovy seznam ne? Ten sice muze mit prvky ruzne rozhazene po pameti, ale prvni prvek zustava vzdy na stejne adrese, coz ti staci na predani reference. Zatimco pokud prealokujes cele pole, tak muze byt umisteno nekam jinam. Mozna jsem te spatne pochopil, neuvedl si jazyk o ktery jde, tak me ber kdyztak s rezervou.

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
24. 8. 2007   #10
-
0
-

To Tomcat: pochopils to dobre. ja ale pridavam a odoberam prvky iba z koniec pola (v podstate fifo) a bol by dost velky problem sa pokazde prekusavat az na konic zoznamu. okrem ineho kedze je to pole ukazatelov velkost by sa zdvojnasobila. takto mi staci jedent int na index posledneho prvku.

EDIT: je to ciste c

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
sn3d0
Věrný člen
24. 8. 2007   #11
-
0
-

hmm ale ved mozes pouzit kruhovy obojstranny zoznam. Cize kazdy prvok pola bude odkazovat na ten pred nim a na ten za nim. S tym ze prvy bude ukazovat na posledny a naopak posledny na prvy.

Inac osobne. Este ked je **premenna (aj pri takychto pripadoch by som radsej uz pouzil typedef koli prehladnosti) tak je to v poriadku ale Hardcore typu ***premenna alebo ****premenna uz zavana zlym navrhom.Takemu by som sa tiez snazil vyhnut.

A ako som spominal. Ak potrebujes mat teda pristup k tomu polu dri descriptorov z aplikacie a ide o OOP jazyk tak si vytvor Singletonovu triedu.

Nahlásit jako SPAM
IP: ...–
shutdown -h now
Tomcat
~ Anonymní uživatel
53 příspěvků
24. 8. 2007   #12
-
0
-

olgo píše:#
# To Tomcat: pochopils to dobre. ja ale pridavam a odoberam prvky iba z koniec pola (v podstate fifo) a bol by dost velky problem sa pokazde prekusavat az na konic zoznamu. okrem ineho kedze je to pole ukazatelov velkost by sa zdvojnasobila. takto mi staci jedent int na index posledneho prvku.#
##
#EDIT: je to ciste c


No tak v tom pripade bych asi pouzil bud oboustranny seznam, jak rika kolega, coz te bude stat neco pameti, nebo bych to poresil nulovym prvek. Tzn. mit v tom spojaku jeden nulty prazdny prvek, ktery bych nemenil (aby zustavala reference) a za nej cpal jednosmerne prvky do FIFO. Je otazkou, zda to co do citelnosti nebude horsi, nez ta globalni promenna a v C bych skoro rekl, ze i jo. V C bych se jim osobne ani moc nebranil - ale v C sem toho vskutku moc nenapsal.

Nahlásit jako SPAM
IP: ...–
olgo0
Věrný člen
24. 8. 2007   #13
-
0
-

To sn3d: ono samotny problem implementacie je vyrieseni bavime sa tu len o "krase" kodu. dik za rady ale vsetci mame svoje postupy :). trosku som to upravil a vyzera to uz trochu k svetu. misim ze zostanem u globalnych premmenych

Nahlásit jako SPAM
IP: ...–
"Boze, dopraj mi, prosim ta, petdesiat rokov prace a zabavy, a potom nahlu smrt v spanku." J. Grisham
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Dobrá kniha o C/C++ — založil ospaly.stanislav

Je Dictionary dobrá volba? — založil JiriVavru

Dobra kniha k Cčku — založil fixa

Fakt dobra HRA — založil wollverin

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý