Visual Basic Fonksiyonlar

Herkese merhaba, Visual Basic yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda fonksiyon oluşturma ve kullanmayı anlatacağım. Hadi başlayalım !
Fonksiyonlar bir programlama dilinde olmazsa olmazlardan biri. Dilin kendine özgü fonksiyonları olduğu gibi yazılımcının da kendi fonksiyonlarını yazması gerekmekte. Bugüne kadar yazılmış programlama dillerinin belkide hepsinde fonksiyonlar bulunmakta. Tabi Visual Basic’te de fonksiyonlar bulunmakta. Veritipine bağlı fonksiyonlar ve sınıflara bağlı sistem fonksiyonları olduğu gibi yazılımcının kendi fonksiyonlarını yazmasına da izin veriyor. Şimdi fonksiyonların Visual Basic’te yazımlarına bakalım.
Fonksiyonlar iki şekilde oluşturulabiliyor; geriye değer döndürenler ve döndürmeyenler. Geriye değer döndüren fonksiyonlar Function, döndürmeyenler Sub başlığı altında oluşturuluyor. Geriye değer döndüren fonksiyonların sonucunda bir veri oluştuğu için bu veriyi herhangi bir değişkene atanabiliyor. Geriye değer döndürmeyen fonksiyonlarda belirlenen işlemleri yapıp tamamlandığı için bir değişkene atama işlemi yapılamamakta. Fonksiyon oluşturma kalıbı şu şekilde yapılabilmekte.
Function|Sub fonksiyon_adı()
' Fonksiyon içerisinde yapılacak işlemler
End Function|Sub
Geriye değer döndüren bir fonksiyon oluşturacaksanız Function ile oluşturmanız gerekmekte. Geriye değer döndürmeyenlerde ise Function yada Sub kullanabilirsiniz. Yani messagebox olarak “Hello World !” gösteren bir fonksiyon yazmak istediğimizde yapının şu şekilde olması gerekiyor;
Sub helloWorld()
MsgBox "Hello World !"
End Sub
Geriye bir değer döndüren fonksiyonda geriye dönüş ifadesini fonksiyonun adına eşitlememiz gerekiyor. Bu sayede fonksiyon, belirlediğiniz ifadeyi geriye döndürüyor ve döndürdüğü şeyi de sonradan kullanabiliyorsunuz. Yani günümüz dillerinden alışık olduğumuz return ifadesi bulunmamakta. Örneğin “Hello World !” ifadesini geriye döndüren bir fonksiyon yazmak istediğimizde yapının şu şekilde olması gerekiyor;
Function helloWorld()
helloWorld = "Hello World !"
End Function
Fonksiyonu çağırmak için ise bulunduğu sınıftan yeni bir nesne türetip o nesne üzerinden erişmemiz gerekiyor. Fonksiyonu bulunduğu sınıf içerisinde çağırmak içinse o sınıfın yeni bir nesnesini türetmeye gerek yok. Yani Form1 adında bir sınıf olsa ve az önce yazdığımız helloWorld() fonksiyonu bu sınıf içerisinde olup bu fonksiyonu yine Form1 içerisinde çağırmak isteseydik direk helloWorld() şeklinde yazmamız gerekiyordu fakat fonksiyonu Form2 adında başka bir sınıfta çağırmak isteseydik o zaman Form1 sınıfından yeni bir nesne türetip onun üzerinden erişmemiz gerekecekti. Yani örneğin;
Dim form as New Form1
form.helloWorld()
Visual Basic ile parametre alan bir fonksiyon yazmamız da mümkün elbette. Bunun için diğer programlama dillerinde de olduğu gibi fonksiyon adından sonra gelen parantezler içerisine istediğimiz parametreleri yazmamız yeterli olacaktı. Sonrasında fonksiyon içerisinde o parametrelere doğrudan erişebiliriz. Fakat diğer dillerde olduğu gibi fonksiyonun istediği parametreler yerel parametreler yani sadece o fonksiyon içerisinden erişilebilir olacağı için fonksiyon dışından erişmek mümkün değildir. Fonksiyonlara parametre eklerken o parametrenin olması gereken veritipini belirtebilir yada istersek belirtmeyedebiliriz. Parametrenin veritipini belirtsekte fonksiyonu çağırırken o veritipine uymak zorunda değiliz. Yani String olarak belirlediğimiz bir parametreyi fonksiyon içerisinde Integer olarak kullanabiliriz. Aynı zaman String veritipinde bir parametre alan fonksiyona Integer tipinde bir değerde gönderebiliriz. Burada dikkat etmemiz gereken tek şey, veri uyumu. Yani fonksiyonda String parametre istedik ve fonksiyon içerisinde Integer olarak kullandık ama fonksiyonu çağırırken sayısal olmayan bir parametre gönderirsek “Type mismatch” hatası alırız. Örneğin aldığı parametreyi messagebox içerisinde gösteren bir fonksiyon yazalım.
Sub goster(mesaj)
MsgBox mesaj
End Sub
Sub goster2(mesaj as String)
MsgBox mesaj
End Sub
Burada yazdığımız iki fonksiyonda çalışacak ve çağırmamız durumunda aldığı parametreyi messagebox içerisinde gösterecektir. Ayrıca örneğin goster2() fonksiyonunu goster2(5) şeklinde yani mesaj parametresini Integer tipte çağırırsakta hata almayacak ve messagebox içerisinde 5 yazdığını göreceğiz.
Fakat örneğin goster() fonksiyonunda olan mesaj değişkenini goster() fonksiyonunun dışarısında çağırırsak hata almayız fakat Empty tipte yani içerisinde veri olmayan bir şekilde kullanabiliriz. Aslında burada kullandığımız mesaj değişkeni goster() fonksiyonu içerisinde istediğimiz ve kullandığımız mesaj değişkeni ile aynı değişken değil. Fonksiyon içerisinde kullandığımız değişken fonksiyon içerisinde yerel, dışarıda kullandığımız değişken ise bulunduğu yere göre yerel değişkendir. Dışarıda kullandığımız mesaj değişkeni Empty tipte olacağı için değişkene veri ataması yapmadan kullanırsak işte o zaman hata alırız 😊
Fonksiyonları çağırmak ise biraz farklı. Fonksiyonu doğrudan çağırmak istediğinizde 2, fonksiyon altında çağırmak istediğinizde ise tek seçeneğiniz var. Öncelikle doğrudan çağırma ne ve 2 seçeneğimiz nedir ona bakalım. Fonksiyonu doğrudan çağırmadan kastım, fonksiyon() şeklinde bulunduğu sınıftan yada sistem fonksiyonlarından birini çağırmaktı. Böylesi bir kullanımda fonksiyon parantezlerini koymamıza gerek yok, doğrudan fonksiyon şeklinde çağırabiliriz. Parametre alan fonksiyonları ise aralarında virgül olacak şekilde ayırmamız gerekiyor. Örneğin fonksiyon oluşturma aşamasında yazmış olduğumuz helloWorld() fonksiyonunu helloWorld() şeklinde çağırabildiğimiz gibi helloWorld şeklinde de çağırabiliyoruz. goster() fonksiyonunu ise goster yada goster “deneme” şeklinde çağırabilmemiz mümkün. Burada dikkat etmeniz gereken tek nokta; o fonksiyonun isminde bir başka değişken bulunmamalı. Yani goster fonksiyonu var ya hani, bide goster adında bir değişkenimiz olsaydı eğer “Ambigious name detected” hatası alacaktık. Visual Basic burada, yazmış olduğunuz ifadeyi sayfa içerisinde arayıp değişken ise değişken olarak tanımlanmışsa değişken, fonksiyon olarak tanımlanmışsa ise fonksiyon özelliği aldırıyor ve bu şekilde kullanım sağlıyor. Aynı isimde hem değişken hemde fonksiyon olması durumunda hangisini kullanacağını bilemediği içinde hata veriyor.
Fonksiyonu fonksiyon altında çağırmaktan kastım ise, iç içe kullanılan fonksiyonlar. Örneğin Replace(Split(“hell world”, ” “), “hell”, “hello”) gibi Replace() fonksiyonu içerisinde bide Split() fonksiyonunu çağırma gibi bir şey yapacaksanız işte o zaman fonksiyon parantezlerini koymanız gerekiyor. Aksi halde “Expected: end of statement” hatası alırsınız. Evet Visual Basic ile fonksiyonlar bu kadardı. Tüm Visual Basic yazılarımıza <a href=”/kategori/programlama-dilleri/visual-basic” target=”_blank”>buraya tıklayarak</a> ulaşabilirsiniz. Herkese hayırlı günler.