Değişkenlerin Kapsam ve Ömürleri : Local, Public Domain, Global, Private Değişkenler

From Belgeleme Projesi

Jump to: navigation, search

Konu başlıkları

Değişkenlerin Kapsam ve Ömürleri

OpenOffice.org Basic'te değişkenleri tanımlarken belirli bir kapsamda geçerli olmalarını ve/veya ömürlerinin ne kadar olduğunu belirtebilirsiniz. Tanımlanacak değişkenin sadece belirli bir bölgede geçerli olacağı veya tüm programın genelinde geçerli olup olmayacağını ayarlayabilirsiniz. Şimdi bu tip tanımlamaları yaparken kullanacağınız yöntemleri sırasıyla görelim.

LOCAL (Yerel) Değişkenler

Bu tip değişkenler sadece tanımlandıkları prosedür veya fonksiyon içerisinde etkilidirler ve işlevseldirler. Prosedür veya fonksiyon bittikten sonra değerleri 0 (Sıfır) olur. Diğer bir deyişle tanımlanan yerel değişkenin ömrü, ilgili prosedür veya fonksiyonun çalışma süresi kadardır.

Örnek;

 Sub Test
   Dim Katsayi As Integer
   ' ...
 End Sub

Burada Katsayi olarak tanımlanan değişken sadece Test prosedürü içerisinde değer alır ve işlem yapılabilir. Test prosedürü bittikten sonra değişkenin değeri her zaman 0 (Sıfır) dır. Eğer Katsayi değişkeninin Test prosedüründe tanımlanmadan önceki değerini aynen miras alıp işlemlere devam etmek istiyorsanız o zaman tanımlamayı aşağıdaki gibi yapmalısınız.

 Sub Test
   Static Katsayi As Integer
   ' ...
 End Sub

Static olarak tanımlanan Katsayi değişkeni eğer daha önce kullanılmış ise son değerini içerisinde barındırmaya devam eder. Bu sayede prosedür veya fonksiyonlar arasında değer transferini yapabilirsiniz. Ancak elbetteki asıl amaç bu değil.

Önemli Not : Eski ofis yazılımınızdan süregelen alışkanlıklarla tanımlamaları yaparken dikkat etmeniz gereken bir konu var. Değişkenlerin kapsam ve ömürleri konu olduğunda OpenOffice.org Basic, VBA gidi değildir. VBA'da yerel değişkenler ile genel değişkenler aynı isme sahip olabilirler ancak Openoffice.org Basic'te buna izin verilmez. Bu sebeple eğer eski ofis yazılımınızdan, OpenOffice.org'a bir aktarım söz konusu olacak ise bu değişkenlerin isimlerini değiştirmenizi öneririm. Eski ofis yazılımınızda Test adında bir prosedür içerisinde Katsayi adında bir değişken tanımladıysanız ve aynı isimde değişkeni ayrıca Global olarak tanımladıysanız bu size OpenOffice.org Basic'te sorun çıkartacaktır. En azından bir tanesinin adını değiştirip sonra OpenOffice.org'a aktarmak sorunu çözecektir.


PUBLIC DOMAIN (Kamu/Ortak Etkili) Değişkenler

Genel Etkili değişkenler içerisinde bulundukları modülün başında DIM komutu ile tanımlanırlar ve modül içerisindeki tüm prosedür ve fonksiyonlarda geçerlidirler.

Örnek;

 Dim Katsayi As Integer
   '...
 Sub Test
   Katsayi=Katsayi+1
   '...
 End Sub
 '...
 Sub Eksilt
   Katsayi=Katsayi-1
   '...
 End Sub

Örnekten de anlaşılacağı üzere Katsayi değişkeni modülün başında bir defa tanımlanmış ve modül içerisindeki tüm prosedür ve/veya fonksiyonlarda (Test, Eksilt) kullanılabiliyor. Üstelik değişkeninin değeri prosedür veya fonksiyon bittikten sonra sıfırlanmadan bir sonrakine aktarılarak devam ediliyor. Ancak diyelim ki siz yukarıdaki örneği A modülü içerisinde yaptınız ancak B modülü içerisinde de Katsayi değişkenini kullanmak istiyorsunuz. Yukarıdaki şekilde yapılacak tanımlama buna izin vermemektedir. Tüm modüllerde de geçerli olmasını istiyorsanız örneği aşağıdaki şekilde değiştirmelisiniz. Değişken tanımını DIM yerine PUBLIC komutu ile yapmanız gerekir.

Örnek;

A Modülü içerisinde

 Public Katsayi As Integer
 '...
 Sub Test
   Eksilt
   Arttir
   '...
 End Sub
 '...
 Sub Eksilt
   Katsayi=Katsayi-1
   '...
 End Sub

B Modülü içerisinde

 Sub Arttir
   Katsayi=Katsayi+1
   '...
 End Sub

Public olarak tanımlanan Katsayi değişkeni artık hem A hem B modüllerinde geçerlidir.

GLOBAL (Genel) Değişkenler

Tüm modüllerde ve tüm prosedür/Fonksiyonlarda geçerli olacak değişkenlerin tanımlanma yöntemidir. Bu yöntemle tanımlanan değişkenler için herhangi bir kapsama alanı ve/veya etki ömrü yoktur. Tüm modül, prosedür ve fonksiyonlarda geçerlidir. Herhangi birinde aldığı son değer, sürekli etkilidir ve bir sonraki prosedür/fonksiyona girdiğinde veya çıktığında sıfırlanmaz. Modüller arasında da aynı etkiyi oluşturur. Bu tip değişkenler GLOBAL komutu ile tanımlanmalıdır.

Örnek;

A Modülü içerisinde

 Global Katsayi As Integer
 '...
 Sub Test
   Eksilt
   Arttir
   '...
 End Sub
 '...
 Sub Eksilt
   Katsayi=Katsayi-1
   '...
 End Sub

B Modülü içerisinde

 Sub Arttir
   Katsayi=Katsayi+1
   '...
 End Sub

Örneği incelediğinizde Public komutu ile yapılan tanımlamaya çok benzediğini görebilirsiniz. Aralarındaki tek fark ise; Public değişkenler işleri bittikten sonra sıfırlanırlar, ancak Global değişkenler makronuz çalışıp bittikten sonra da hafızada son değerleri ile kalmaya devam ederler.

PRIVATE (Özel) Değişkenler

Bu şekilde tanımlanan PRIVATE (Özel) değişkenler sadece içerisinde bulundukları modüllerde geçerlidir. PRIVATE değişkenler ile PUBLIC değişkenler birbirlerine benzemekle birlikte ufak bir farklılık içerirler. PRIVATE değişkenler modül içerisindeki tüm prosedür ve fonksiyonlarda kullanılabilirler ancak diğer modülden çağrılamazlar. PUBLIC değişkenler ise daha önce anlattığımız gibi tüm modüllerden çağrılabilirler.

Örnek;

A Modülü içerisinde

 Private Katsayi As Integer
 '...
 Sub Test
   AyarlaA	' A modülünde Katsayi değişkenine değer atanıyor = 10
   AyarlaB	' B modülünde Katsayi değişkenine değer atanıyor = 20
   GosterA	' A modülündeki Katsayi değişkeni gösteriliyor
   GosterB	' B modülündeki Katsayi değişkeni gösteriliyor
   '...
 End Sub
 '...
 Sub AyarlaA
   Katsayi=10
   '...
 End Sub
 '...
 Sub GosterA
   MsgBox Katsayi
   '...
 End Sub

B Modülü içerisinde

 Private Katsayi As Integer
 '...
 Sub AyarlaB
   Katsayi=20
   '...
 End Sub
 '...
 Sub GosterB
   MsgBox Katsayi
   '...
 End Sub

Örnekte gördüğünüz gibi hem A hem B modüllerinde Katsayi değişkeni PRIVATE (Özel) olarak tanımlanıyor. Bunun anlamı Katsayi değişkeni A modülü içerisindeki tüm prosedür ve fonksiyonlarda geçerli, ancak B modülü içerisinde yine aynı isme sahip olmasına karşın farklı değerler alacak demektir. Unutulmaması gereken bir konu da Katsayi değişkeninin makrolardan çıkışta sıfırlanacağıdır. <b>


--Hakan HAMURCU 01:28, 2 Nisan 2011 (MSD)