Re: [Linux-programlama] Re: Python'da Global Değişkenler

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Recai Oktas (roktas@omu.edu.tr)
Date: Wed 16 Mar 2005 - 13:50:02 EET


* Volkan YAZICI [2005-03-15 21:56:05+0200]
> > Global degisken kullanmayan bir cozum bulmani
> > oneririm.
>
> Performans açısından bir artısı eksisi olur mu?

Olcmeden bilemeyiz :-) Tahmin yurutmeyelim, olcelim.

> Aslında primeList'i ve primeCount'u checkIfPrime fonksiyonunun içinde
> saklayabilirdim, fakat fonksiyon binlerce kez gimmiOneMorePrime'ı
> çağıracağından, her seferinde bu fonksiyona primeCount'u ve
> primeList'i parametre ile yollamanın performans açısından hoş bir şey
> olmayacağını düşündüğümden global bir değişken kullanmayı tercih
> ettim. Sizce iyi mi etmişim, kötü mü? Ve mümkünse neden?

Kacinilacak yerleri bilmen kaydiyla kullanabilirsin. Bu hususta
yapilacak mubalagali uyarilarin "asla goto kullanma!" deyisine benzer
bir dogma olusturma tehlikesi var. (Yeri gelir "goto" en uygun cozum
olur.) Global degiskenlerin "reentrant" (yineli girilebilen) ve/veya
"multi-thread" islevler acisindan sakincali yonleri var. Bu isin
fazlasiyla teknik yonu. Kanaatimce en buyuk sakincasi _dogru olmayan_
kullanimin kod okunurlugunu kotu yonde etkilemesi. Islev cagrilarinda
ortaya cikan turde bir fazlaliligi gidermek, "bunu global yapayim"
kararina asla gerekce olmamali. Eger zarar gorecekse okunurlugu hicbir
seye tercih etme, olcmemissen hic yapma :-)

Yazdigin kodla (biraz abartarak) orneklendirmem gerekirse, mesela ben o
islevlerde gecen haliyle 'primeList' ve 'primeCount'un global oldugunu
hemen farkedemedim. Global niyetle kullanildigini anlamak icin birkac
satir yukariya cikmam gerekti. Kod uzun olsaydi bu zorluk cok daha da
artacakti. Neyseki Python niyetleri daha acik hale getirmek icin her
turlu yonteme basvuruyor ;-)

Yazdigin kodda okunurlugu azaltan bir diger unsur yerel baglamda
kullandigin degisken isimlerinin fazla uzun olmasi ve global isimleri
yerel isimlerden ayirmak icin herhangi bir caba sarfetmemen: Or.
lastPrimeIndice (yerel), primeList (genel). Halbuki global isimlerin
okunabilirligi(nin telafisi) icin cok_uzun_bir_ad halinde yazilmasi
yaygin bir pratiktir; kullanim gayesi acik harc-i alem degiskenlerin
alisildik kisa isimlere sahip olmasi pratiginde oldugu gibi: 'indice'
yerine basitce 'i', indeks degiskenine asina gozleri yormayan bir secim.

Global degiskenlerin uygun kullanimi icin guzel ornekler verilebilir.
Program genelinde gecerli bir secenek degiskeni mesela. Ama on da bile
global degiskene erisimi bir dizi sarmalayici islevle gerceklestirmek
okunurluk adina daha uygun bir yaklasim olabilir. Python'un OOP
ozelliklerini tamamen goz ardi eden cok kotu bir ornek vermem gerekirse:

    options.is_user_dumb = True

yerine

    def make_user_dumb()
        options.is_user_dumb = value

islevini kullanmak gibi.

-- 
roktas
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.