[python] Brainstorm request: Vyuka programovani na gymplu

superman feed na centrum.cz
Sobota Červen 7 12:59:33 CEST 2008


>     Globální proměnné nejsou prasení v rozumném počtu. Stejně tak jako
>     leccos dalšího.
>
>
> V tomhle si dovolim nesouhlasit. Pokud programator potrebuje pouzit 
> globalni promennou, udelal v navrhu datovych struktur chybu.
>

Já tenhle názor nesdílím. Globální proměnná je zkrátka jenom datová 
proměnná viditelná pro všechny moduly programy. Někdy se použití 
globální proměnná zastírá tím, že se vytvoří třída se statickými daty, a 
nebo třída s jedinou instancí (singleton), ale to nic nemění na faktu, 
že je to de facto globální proměnná rovněž.

Je fakt, že globální proměnné se nechutně nadužívají, a že lze pomocí ní 
docílit kódu, který nejde udržovat, protože kam sáhnete, tam se to 
rozsype následkem side effectů, které není šance vychytat. Nicméně 
globální proměnné užitečné jsou, jako vše v dobrých rukou při 
promyšleném použití.

Představte si třeba, že máte multithreadovou aplikaci, která po startu 
neudělá nic jiného, než rozjede x threadů (třeba několik tisíc), a 
všechny thready budou synchronizovány v určitých fázích pomocí jednoho 
synchronizačního objektu. Pak nevidím důvod, proč synchronizační objekt 
neprohlásit za globální proměnnou, byť uznávám, že je to věcí názoru.

Stejně tak jsou přirozené globální proměnné - například parametry 
procesu, nebo třeba časové pásmo používané vaším procesem, jazyk ve 
kterém pracuje proces, aktuální adresář procesu, stavy obsluh signálu a 
obslužné funkce, proměnné procesu (myšleno environment procesu), a řada 
dalších.

Ale jinak souhlasím, že každá globální proměnná ve smyslu "all process 
scope" by měla být sakra zdůvodněná, a mělo by se držet hesla 
"nepoužiješ globální proměnnou nadarmo".

Miloslav Ponkrác


Další informace o konferenci Python