OOo Basic ve Visual Basic Uyumu

From Belgeleme Projesi

10:34, 7 Ağustos 2009 tarihindeki hali; en güncel halini göster
← Önceki hali | Sonraki hali →
Jump to: navigation, search

Konu başlıkları

OOo Basic ve Visual Basic Uyumu

OpenOffice.org kullanan arkadaşlarımızın sürekli şikayetçi oldukları bir konudur Basic ile makro yazmak. Sık sık bana sorulan sorulardan bir tanesi “Ben Microsoft Office’te VB kullanarak birçok işimi hallediyordum ama OpenOffice.org’da nasıl yaparım?” sorusu olmuştur. Elbette bu iki ayrı yazılım arasında %100 uyumdan bahsetmek mümkün değil ancak BASIC program yazmasını bilen arkadaşlar için de durum bu kadar vahim değil. Çok kısa bir uyum sürecinden sonra eski belgelerini OOo BASIC’e rahatlıkla çevirebilirler. Üstelik bununla da yetinmeyip, Basic dışında Java, Python, BeanShell gibi diğer programlama dillerini de kullanabilirler.

OpenOffice.org BASIC ile Visual BASIC dil yapıları çok benzerdir. Ancak az önce de bahsettiğimiz gibi benzer olmaları, %100 aynı olmalarını gerektirmiyor. Takdir edersiniz ki, her iki ofis paketi, farklı felsefelere sahip iki farklı yazılımlardır. Bu yüzden aralarında farklılıklar olması gayet doğaldır. Burada amacım, sizlere yardımcı olabileceğini düşündüğüm benzerlikler ve farklılıkları tablolar halinde vererek, VB bilen arkadaşların OOo BASIC ile program yazmalarına yardımcı olmaktır.

Öncelikle Microsoft Office içerisinde kullandığımız Basic programlama dilinden biraz bahsedelim. Birçok arkadaşımızın sadece Visual Basic diyerek geçiştirdiği programlama dili, aslında son zamanlarda epeyce farklılıklar göstermiş ve kendi içerisinde de bir uyum problemi yaşamaktadır. VB bildiğiniz gibi Windows üzerinde program geliştirmenizi sağlayan bir IDE ortamıdır. Benzer kelimelerle MS Office içerisinde ise Scripting Language dediğimiz VB’nin bir türevi olan VBA (Visual Basic for Applications) kullanırsınız. VBA ile MS Office’ten bağımsız programlar yazmanız mümkün değildir. Günümüze geldiğimizde VB ve VBA’ya bir de VB.NET eklenmiştir. Buradan da anlaşılacağı üzere genellikle VB deyip geçiştirdiğimiz konu aslında kendi içerisinde de farklı parçalara ayrılmıştır. Bu yüzden sizlere tabloları verirken elimden geldiğince tüm VB türlerini vermeye çalışacağım.

VB makrolarını OOo Basic’e dönüştürürken ilk yapılması gereken, yazım hatalarını düzeltmek olacaktır. Eski ofis programınızda yazdığınız VB makroları doğrudan OOo Basic ile uyumlu olmadığından, elle yazım hatalarını düzeltmeniz gerekecektir. Bu düzeltim için aşağıda sizlere verdiğim tablolardan faydalanabilirsiniz.

İkinci adım ise diller arasındaki davranış farklılıklarından doğan hataları yok etmeniz gerekmektedir. Bu hatalar bazı durumlarda aynı komutu kullanmasına karşın her iki ofis’inde farklı davranışlar göstermesinden kaynaklanıyor olabilir. Özellikle ince hataların dikkatle kontrol edilmesi gerekmektedir. Tam bir dönüşüm için sadece aynı yazım kurallarını çevirmek yerine anlamlı kod değişikliklerini yapmalısınız.

İlk tablomuz OOo Basic’in kullandığı ancak VB’den VB.NET’e geçiş sırasında değişikliğe uğrayan ve OOo Basic ile farklılık gösteren komutların bulunduğu tablo.

Resim:OOOBasic_1.png

Veri Tipleri



Resim:OOOBasic_3.png

Değişkenler

  • VB.NET, Variant değişken tipini desteklemez, bununla birlikte değişkenler zaten nesne olarak tanımlanmışlardır. Diğer VB versionları OOo BASIC ile uyumludur.
  • VB.NET, Currency veri tipi yerine Decimal veri tipini kullanıyor. Diğer VB versionları OOo BASIC ile uyumludur.
  • VB.NET, DefBool, DefDate, DefDbl, DefInt, DefLng, DefObj, ve DefVar veri tiplerini desteklemez. Diğer VB versionları OOo BASIC ile uyumludur.
  • VB.NET, Set ve Let komutlarını desteklemez.
  • VB.NET, NULL ve Empty komutlarını desteklemez.
  • OOo BASIC, sabit uzunluktaki String veri tipini desteklemesine karşın (Dim s As String * 100), aslında değişken uzunluğa sahip bir String’tir. Tüm VB versionları sabit uzunluğa sahip String’leri destekler.
  • OOo BASIC, String veri tipinin limiti 65,535 Unicode karaktere kadardır. VB, değişken uzunluklu String veri tipi ise yaklaşık 2 Milyar Unicode karakterdir.


Diziler

  • VB.NET, Option Base’i desteklemesine karşın diğer VB versionları OOo BASIC ile tam uyumlu değildir.
  • VBA ve VB6 Option Base’i destekler ancak, OOo BASIC’teki gibi değildir. Dizinin üst sınırını belirlemek yerine, sadece alt sınırını ayarlıyor.
  • VB, sadece ReDim’i kısıtlı olarak destekler. OOo BASIC ise çok boyutlu diziler dahil tüm boyut değişikliklerini destekler.
  • VB, sadece ReDim’i kısıtlı olarak destekler. Özellikle dizinin boyutunu değiştirmek ancak dizi boyutunun açıkça tanımlanmamış olması durumunda mümkündür. OOo BASIC daha esnektir.


Subroutine ve Function Yapıları

  • VB, Sub veya Function’a, Public gibi opsiyonel kapsam komutlarının önünde olmasına izin verir. OOo BASIC vermez.
  • VB, opsiyonel komut olan ByRef’i destekler. Bu komut OOo BASIC tarafından desteklenmez.
  • VB, ParamArray komutunu destekler, OOo BASIC desteklemez.
  • VB, default parametreleri destekler, OOo BASIC desteklemez.
  • VB.NET, IsMissing fonksiyonunu desteklemez; bu default parametrelerle birlikte tanımlanır. Diğer VB sürümleri OOo BASIC ile uyumludur.


Operatörler

  • VB.NET, EQV veya IMP operatörlerini desteklemez. Diğer VB versionları OOo BASIC ile uyumludur.
  • VB.NET, Like, AndAlso ve OrElse gibi ekstra operatörleri destekler.
  • VB’te öncelik kurallarında farklılılar vardır. Örneğin, AND’in önceliği OR’dan öncedir, aynı şekilde XOR’dan da öncedir.
  • VB, String’lerin karşılaştırılmasını kontrol eden Option Compare’i destekler. Bu OOo BASIC ile uyumlu değildir. Bunun yerine StrComp fonksiyonunu kullanın.
  • VB.NET standart matematik düzenini kabul etmesine karşın üs almak konusunda bir farklılık vardır. Örneğin, VB’de -2^2 = -4 olurken OOo BASIC’te 4 olacaktır.


Akış Kontrolü

  • VB, For Each ... Next Loop yapılarını desteklemesine karşın OOo BASIC desteklemez.
  • VB.NET, GoSub komutunu desteklemez.
  • VB.NET, On GoTo ve On GoSub komutlarını desteklemez.


Hata Yakalama

  • VB, hataları yakalayabilmek için Err nesnesini kullanır.OOo BASIC ise Err, Error, ve Erl adında üç farklı fonksiyon kulanır.
  • VB’nin bazı sürümleri On Error GoTo -1 yapısını destekler.
  • VB’nin bazı sürümleri tüm hata yakalamalarının benzersiz isim kullanmasına ihtiyaç duyarken, OOo BASIC buna ihtiyaç duymaz.
  • OOo BASIC, Subroutine veya Function dışındaki On Error komutlarını desteklemez.


Subroutine ve Function


Sayısal Subroutine ve Functionlar


VB ve OOo Basic büyük oranda uyumlu olmalarına karşın VB.NET ile birlikte ortak bazı Subroutine ve Functionlarda değişiklikler olmuştur. Farklılıklar için aşağıdaki tabloyu inceleyiniz.

Resim:OOoBasic_2.png

Sonuç

Yukarıdaki tablolarda görebileceğiniz gibi OOo Basic ve VB türevleri arasında gerek yazım olarak gerekse işlev olarak ufak farklılıklar mevcuttur. Bu yüzden eskiden hazırlamış olduğunuz ve içerisinde VB makroları kullandığınız dokümanlarınızı %100 uyum ile OpenOffice.org’ta açmanız pek mümkün değildir. Bu yüzden yukarıdaki tavsiyelerimize uyarak öncelikle makrolarınızı yeniden gözden geçirmeniz ve OOo Basic ile uyumlu hale getirmeniz gerekmektedir.
Bu konuyla ilgili olarak İnternet’te çok sayıda belge bulabilirsiniz. Ben de makaleyi hazırlarken 3-4 farklı belgeden bir derleme yaptım. Umarım işinize yarar.


--Hakan HAMURCU 14:34, 7 Ağustos 2009 (MSD)