Visual Basic'den farklılıkları

Gambas Microsoft Visual Basic kopyası olmayı amaçlamamasına rağmen, hala BASIC ve iki dil arasında birçok benzerlik ve özellikleri arasında birebir bağlantılar var.

Muhtemelen farklarından daha çok benzerlikleri vardır, ama VB kodunu hiçbir şekilde değiştirmeden kopyala/yapıştır yaparak Gambas altında çalışmasını beklemeyin.

Bazen bu belgelerde, bu dilden Gambas diline geçmek isteyen programcılara yardımcı olmak için, sayfadaki aynı özelliği VB üzerinde nasıl kullanılacağına ilişkin notların olduğunu işaret etmek için %vb% simgesini göreceksiniz.

Dilden-bağımsız Farklılıklar

  • VB her form için sınıf kodunu form tanımlaması olarak aynı dosyaya gömer. Gambas bunları, .form ve .sınıf dosyasında ayrı tutar.

  • File uzantıları:

Dosya Tipi Visual Basic Gambas
Proje tanımlama dosyası .vbp .project (sadece .project, bir dizin altında)
Modül .bas .module
Class dosyası .cls .sınıf
Form tanımlama dosyası .frm .form
Binary kaynak dosyası .frx Proje klasöründeki herhangi diğer dosyalar.

  • Gambas projeleri, içerisinde .project dosyası ve bu klasördeki tüm diğer dosyaları barındırarak tanımlanır. VB'de her bir klasörde birden fazla proje dosyası olabilir ve aynı kaynak dosyayı, farklı dizinlerden çekip farklı projelerde kullanabilir, ki bunun da kendi avantaj ve dezavantajları vardır.

  • VB'de ekran ölçeklendirilmesi "twip" birimi kullanılarak yapılır, bir inçin 1/1440 i kadardır; Gambas'ta ise gerçek pikseller kullanılır.

  • Varsayılan değer olarak Gambas'ta Form kontrolleri 'Private' dır. Bunu, Proje Özellikleri dialog kısmına gidip Make form controls public checkbox'ını işaretleyerek değiştirebilirsiniz.

  • Str$, Val, CStr... dönüşüm fonksiyonları farklı davranış sergiler. Örneğin, Str$ ve Val Gambas içerisinde yerelleştirme ayarlarını kullanır, ki Visual Basic'de böyle değildir. Daha fazla bilgi için belgelendirme kısmını dikkatlice okuyun. Gambas'ın davranışının daha mantıklı olduğunu da not etmek lazım :-).

Visual Basic'de var, Gambas'da yok

  • Gambas break modunda kodu değiştiremezsiniz; programın çalışmasını durdurmanız gerekmektedir.

  • Gambas , basit veritipleri (integer, string, vs.) prosedür ve fonksiyonlara değer olarak gönderilir (By Value). Visual Basic'deki gibi referans olarak (By Reference) gönderilmez. ByVal ifadesini kullanmazsanız, VB parametreleri referans olarak gönderirir bunu göz önünde bulundurun, yani VB projesini Gambas'a aktarırken dikkatli olun. Ayrıca, veritipinin (array types, collections, objects) içeriği her iki dilde de her zaman referans olarak gönderilir!

Geliştirme versiyonunda parametreleri referans olarak göndermek artık mümkün.

  • Gambas proje-genelinde Global değişken diye bir şey yoktur. Buna geliştirilmiş bir çözüm olarak, Global adında bir sınıf yaptığınızı farzedin; bu sınıf içerisinde, global değişkenlerinizi statik public değişken olarak tanımlayın ve sonra Global.degiskenadi olarak projeniz içerisinde kullanın. Bu hala zayıf bir programlama pratiği ama en azından ne zaman kullanırsanız kullanın, global değişken olarak tanımlanmış olacaktır ;)

  • Bir VB modülünde Option Explicit kullanmadığınız müddetçe , değişkenleri kullanmadan önce tanımlamanıza gerek yoktur. Gambas sanki Option Explicit her zaman aktifmiş gibi davranır, bu da biraz fazla işin sonucunda daha iyi kodlama anlamına gelir.

  • VB form kontrollerinde Index Gambas'da bir karşılığı yoktur. Kolaylıkla kontrollerin dizisini oluşturabilirsiniz, ama bunu kodun içerisinde yapmanız gerekir. Şu an grafik olarak bunu yapmanın bir yolu yok. Bundan dolayı, formdan bir kontrolü kopyalayıp yapıştırdığınızda , size bu kontrollerden bir dizi yapmak isteyip istemediğinizi sormak yerine, yeni bir isimde kontrol oluşturacaktır.

  • Şu an Gambas içinde transparan etiketler oluşturamazsınız; arkaplan her zaman donuktur, şeffaf değildir.

Geliştirme versiyonunda, şu an bu da mümkün.

  • Gambas'da MouseMove sadece bir mouse butonu bırakıldığında tetiklenir. Tek istisna, DrawingArea kontrolüdür, bu kontrolde Tracking mouse butonu basılı olmasa bile mouse hareketlerini (mousemove) almaya izin verir.

  • VB'de, iki stringi + sembolü ile birleştirebilirsiniz. Gambas'da + işareti sadece matematiksel toplama için kullanıldığından, bir stringi diğer string ile birleştirirken & işaretini kullanmalısınız.

  • : kodunuzu ayırmaz. Bunun yerine, yeni bir satırdan başlamanız gerekir.

  • VB 3.0'da print komutu, satır besleme (LineFeed) yapmıyordu. Eğer bir metni, printer.print ile yazdırmaya kalktığınızda, kayboluyordu. Gambas'da print komutu hepsini tek satırda toplar.Kaybolacak birşey yok.

  • VB'de Mid$() komutunu, alt-string çıkartıp yerine başka bir string koymak için kullanabilirsiniz. Gambas'da bunu, string içerisine başka bir alt-string sokmak için kullanamazsınız. Mesela VB'de :
    VBde Stringim = "Bir köpek zıplar" MID(Stringim, 5, 5) = "tilki" PRINT Stringim ---- Bir tilki zıplar

Bu Gambas'da çalışmaz. Şöyle birşey yapmanız lazım:
'Gambas'da
Stringim= "Bir köpek zıplar"
Stringim= LEFT(Stringim, 4) & "tilki" & MID(Stringim, 10)
PRINT Stringim

Bir tilki zıplar

Bu Mid$() sözdizimi geliştirme versiyonunda artık mümkün.

  • olmayan karakterler; VB tanımlamalarında kullanılabilir, Gambas'da bu kabul edilemez.

  • Çok şükür ki, Gambas'da hataları yakalamak için GOTO kullanamazsınız! Bunun yerine, CATCH, FINALLY veya TRY kullanın.

  • ENUM, integer sabitlerini belirlemek için kullanılmaz. Bunun yerine, her ENUM elamanını sabit olarak tanımlayın.

Examples

 CONST TOPLAMA AS Integer = 1
 CONST CIKARMA AS Integer = 2

Gambas'da var, Visual Basic'de yok

  • VB'den farklı olarak, eğer Gambas komut satırı uygulaması yazmak istiyorsanız, GUI desteğini derlemenize gerek yoktur. Yalnızca Proje Özellikleri'nden gb.qt4 bileşen seçimini iptal etmeniz ve SUB Main() tanımladığınıza emin olmanız yeterlidir.

  • WITH EVENTS anahtar kelimesinin yerine, olay oluşturan nesnelere " name" tanımlamanız yeterlidir. NEW belgelerini inceleyerek daha fazla bilgiye ulaşabilirsiniz.

  • Gambas'da kontrol grupları kavramı vardır, bu da size herhangi bir sayıdaki farklı kontrolleri, tek altyordam handler'ı altında yönetme imkanı sunar. Gerekenden fazla kod parçalarından kurtulur ve VB kontrol indekslerinin yapabildiği, ve VB'nin yapamadığı birçok şeyi kullanabilirsiniz.

  • VB, programı senkronize olarak çalıştırıp program çıktısını alırken ,bunu API çağrıları yapmayı öğrenmeden başarmayı imkansız kılar.(Shell basitçe programı arkaplanda çalıştırır), Gambas bunu SHELL ve EXEC kullanarak yapmanızı sağlar, çalıştırdığınız işlemi Process sınıf ile kontrol etmenizi, ve hatta ona yazıp-okumanızı , kolaylıkla yardımcı uygulamalara işlevsellik kazandırmanızı sağlar. Neredeyse tüm komut-satırı prosedürler için, Gambas ön-uçlarına yazmayı inanılmaz şekilde kolaylaştırır.

  • Yukarıdakilerin hepsini Unix aygıtları ve özel dosyalar ile de yapabilirsiniz, seri veya paralel portlar gibi. Örneğin RAID monitöre yazmak için /proc dosya sistemini kullanın , veya başka bir dildeki arka-uç bir programdaki bilgiyi , birden fazla kanal ile almak için adlandırılmış kanalları kullanın.

  • Garip şekilli bir pencere oluşturmak için, sadece mevcut pencerenin ME.Picture ve ME.Mask transparan bölgeleri olan bir resime ayarlayın. VB ancak, API çağrıları ve biraz fazladanm iş ile bunu yapabilir.

  • Dinamik olarak sadece NEW ifadesi ile örneklendirerek, kontrol ve menü oluşturabilirsiniz.

  • Bir Gambas formunu diğerinin içine gömebilirsiniz: birinciyi örnek gösterdiğinizde,ikincisini ebeveyn olarak gösterin.

  • Kontrollerin giriş ve ayrılma olayları vardır, bu size mouse'un bu kontrolün üzerine geldiğini veya ayrıldığını bilmenizi sağlar. Mouse ile üzerine gelince efektler oluşturan bir kontrolü kolaylıkla tasarlayabilirsiniz.

  • Binary dosyalardan veri okuyabilir ve Stream sınıf ByteOrder kullanarak, otomatikman endianness'ın kendi biçimini yönetebilirsiniz.

  • Gambas, içerisinde karakter setlerini kullanır, ve böylelikle projeler tamamen ve kolayca ulusallaştırılabilir.

  • Gambas geliştirme ortamı; kendi dili ile yazılmış , sadece BASIC yeteneklerinizi kullanarak, size çok yüksek seviyelere kadar özelleştirme yapabilmenize izin verecek şekilde tasarlanmış Özgür Yazılımdır.

Ve çok çok daha fazla şeyler... Sadece istediğiniz gibi ekleyin! :-)

Aynı İşlevsellik, Farklı Terminoloji

  • End Sub=/=End Function: bkz. END.

  • Exit Sub=/=Exit Function: bkz. RETURN. Ayrıca , fonksiyon ismi ile aynı isimde bir değişken tanımlayup daha sonra fonksiyondan çıkmak yerine, basitçe istenen dönüş parametresini RETURN parametresi olarak dahil edin.

  • End (end program): bkz. QUIT.

  • Diziler parantez yerine köşeli parantez kullanırlar. Yani DIM x(9) AS Float yerine, DIM x[9] AS kullanın.

  • Diziler indekslemede 1..n gibi ekstra dizi elemanlarına ihtiyaç duymazlar, indeks her zaman 0..(n-1) olmalıdır.

  • On Error Goto: bkz. TRY, CATCH ve FINALLY.

  • Msgbox: bkz. Message. Normalde şöyle istersiniz: Message.info.

  • VB'nin varsayılan InputBox fonksiyonunun (ekrana bir dialog çıkartıp kullanıcıya bir giriş yaptıran), şu an Gambas'da tam olarak bir karşılığı yok , ama aynı hizmeti (ve daha fazlasını) InputBox sayfasındaki sınıfı indirip projenize dahil edebilirsiniz. Geliştirme sürümünde bir InputBox var.

  • DoEvents: bkz. WAIT. WAIT ayrıca sıklıkla kullanılan Windows API'si "sleep" fonksiyonun da yerini tutar.

  • Stringlere çift tırnak ekleme: VB'deki gibi ard arda iki çift tırnak eklemek yerine , C veya Perl'deki gibi ters kesme işaretini (") kullanın.

  • VScrollBar, HScrollBar: Gambas' ScrollBar bunların ikisinin de yerini tutar. Otamatik olarak, yatay mı yoksa dikey mi istediğinizi kontrolün boyutlarına bakarak anlar : geniş yapın, ve yatay bir scrollbar'ınız olsun; boylamasına uzun yapın , bu sefer de dikey olanı elde ettiniz.

  • Aç ve Kaydet diyalogları: Windows common dialog yerine; ya qt ya da geliştirilmiş KDE diyaloglarını kullanın.. Bazı özellikleri farklı adlandırılır ve filtreler String dizisi ile şöyle tanımlanır: [ "Filter 1 (*.foo)" , "Filter 2 (*.bar)" ]. Geliştirme sürümünde sözdizimi değiştirildi.

  • Metin girişini onaylama: VB'de, belirlenmiş olaylarda, işlemini tamamlanmadan iptal eden Cancel parametresi vardır, böylece mesela sadece sayısal girişlere izin verebilir, alan doğrulaması yaptırabilir, veya tüm karakterlerin küçük harf olmasına zorlayabilirsiniz. Gambas'da bu , STOP EVENT komutu ile yapılır.

  • Klavye ve mouse handler'ları parametre almazlar.Bunun yerine Mouse ve Key sınıflarının statik public üyelerini kullanırlar. Örneğin:
    • Mouse.X ve Mouse.Y : Mouse koordinatları için.

    • Mouse.Left : Sol tuşun basılı olup olmadığını kontrol etmek için.

    • Key.Code : Bir tuşun kodunu almak için.

    • Key.Shift : SHIFT'in basılı olup olmadığını anlamak için.

    • vs ...

  • Gambas'da, Timer yordamı program başladığından bu yana geçen saniye değerini verir. VB'de, gece yarısından bu yana geçen saniye değerini verir.

  • Form.Load 'unu kullanmayın. Çünkü Visual Basic Load komutundan tamamen farklı bir . Gambas'da, sadece örnekten impliciti oluşturan statik bir metod .