Türkiye’de programcılıktan ve programcılık kitaplarından anlayanlar zahmet edip programcılık kitapları üzerine doğru dürüst bir şey yazmadıkları için yaklaşık 1 yıl önce yayınlanan Delphi 2007 kitabım hakkında bir yazı yazmış ve kişisel sitemde yayınlamıştım. Bugün bu yazıya şöyle bir bakınca kitapla ilgili ince birkaç ayrıntıyı atladığımı fark ettim. Bilgilerim kesin olmamakla birlikte Türkçe yazılan ilk Delphi kitabını 1996 yılında Memik YANIK yazmıştı. Belki o günlerde yayınlanan başka bir Delphi kitabı benim kitaptan 15 önce veya sonra yayınlanmış olabilir. Bu tespiti yaptıktan sonra gelelim Delphi 2007 kitabım hakkında yazdığım yazıda atladığımı sonradan fark ettiğim konulara.
Yaklaşık 1100 sayfa olan kitabı şöyle karıştırınca verdiğim 3-5 satırlık örnek kodlarda bol miktarda i, j, sayi, dosya adında değişkenler tanımladığımı fark ettim. Tanımlama ihtiyacı duyduğum değişkenlere bu adları(çünkü bu değişken adlarını kullanmak suç isnat ediyor) vermek yetmiyormuş gibi bir de sıfıra bölme hatasından söz edip bu hatanın meydana gelmesi için 2 sayıyı birbirine bölmüşüm. Bir birine böldüğüm sayıları bellekte tutan değişkenlere Sayi1, Sayi2 gibi adlar vermişim. Bu orijinal işlemi yani 2 sayıyı birbirine bölüp(ikincisi 0 olmalı tabi) sıfıra bölme hatasını meydana getirmeyi Memik YANIK nasıl akıl edip te kitabında bundan söz etti diye şüphelenen olursa haklılar derim(!). Bana sorarsanız sıfıra bölme hatasını deneysel olarak meydana getirip programcılık öğrencilerine anlatma becerisi olan kişilerin sayısı Türkiye'de bir elin parmakları kadar bile değildir.
Delphi 2007 kitabımla ilgili olarak kabahatlerimin bu kadarla sınırlı olduğunu mu sanıyorsanız yanılıyorsunuz? Ek olarak ne kabahat mi işlemişim? Formun birisine 2 ListBox yerleştirip bu ListBox’lardan birisine rastgele sayılar yerleştirip sonra Selection Sort denen sıralama tekniği ile bu sayıları küçükten büyüğe doğru sıralayıp sıralanmış sayıları 2. ListBox’a aktarmışım. Yani anlayacağınız kullanımı 2 Türk yazarının iznine tabi olan Selection Sort algoritmasını izinsiz kullanmışım. Ötesi bu işlemi yaparken çok sayıda kontrol dururken Delphi’nin ListBox kontrolünü kullanmışım. Nasıl bir tesadüftür ki sıralama işlemi yaparken kullanacağım Button nesnesine “Sirala” adını vermişim. Sanki sıralama işlemini yaparken kullanılacak düğmeye “Sirala” adını vermek mecburi imiş gibi “Sirala” adını vermişim. Kim bilir bu düğmeye ad seçerken hangi kaynaklardan izinsiz yararlandım, hangi kaynaktan nesne adı hırsızlığı yaptım?
Tabii ilk Türkçe Delphi kitabının yazarı Memik Yanık olduğu için bu kabahatlerimden dolayı(Selection Sort’u izinsiz kullanmak, i, j, sayi, dosya adında değişken tanımlamak vs..) henüz dava edilmedi. Hiç belli olmaz bakarsın bir gün karakola davet edilip “1996 yılında yazıp yayınladığın Delphi 1.0 kitabında kullandığın değişken adlarını 2007 yılında yayınladığın kitabında da kullanmışsın” diye hakkında şikayet var denilir. Ne de olsa bu memlekette değişken adı benzerliğinin suç olduğunu rapor edecek yeteri sayıda bilgisayar mühendisi, öğretim üyesi var.
Visual Basic ve Pascal’da işlem yapmak üzere bir araya getirilen kod bloklarına fonksiyon veya Procedure adı verilmektedir. Hazırlanmak istenen kod bloğu işletildiği zaman geriye değer gönderiyorsa Function anahtar kelimesinden, geriye değer göndermiyorsa Procedure(Visual Basic’te Sub) anahtar kelimesinden yararlanılıyor. Bu arada yakın bir zamanda piyasaya verilen Delphi Prism’de Function Procedure ayrımının kaldırıldığını belirtelim. C’de ise fonksiyon procedure ayrımı yoktur. Belli bir işlem yapmak için hazırlanan kod bloklarına fonksiyon adı verilmektedir. Fonksiyon geriye bilgi göndermiyorsa başına void yazılır. Buraya kadar her şey normal ve bilinmedik bir şey yok.
Sonra nesneye yönelik programcılıkta ve .NET Framework uyumlu programla dillerinde işlem yapan kod bloklarına metot denilmeye başlandı. C ve C++ geleneğine dayanan C# için bu bir anlam kargaşasına zaten neden olmazdı. Fonksiyonlara metot demek zor değildir. Ancak geçmişte Pascal veya Visual Basic ile az çok uğraşmış olanlar alışkanlıklarından dolayı geriye değer göndermeyen metotlardan bazen Procedure ve geriye değer gönderenlere fonksiyon demeleri sık rastlanan bir durumdur.
.NET uyumlu Visual Basic’te geriye doğru uyumluluğu sağlamak için geriye değer gönderen metotlar yine Function anahtar kelimesi tanımlanırken değer göndermeyenler ise Sub anahtar kelimesi ile hazırlanıyorlar. Yani garip bir durum var gibi.. Kod bloğunu Function anahtar kelimesi ile tanımlıyorsunuz sonra da bu metottur diyorsunuz. Bu nedenle kitaplarda, makalelerde ve forumlarda Sub anahtar kelimesi kullanılarak hazırlanan metotlardan Procedure(Türkçesi ile yordam) diye söz edilmesini hep normal karşılamak gerektiğini ifade ettim. Visual Basic 9.0 kitabımda ise hem Function hem Sub anahtar kelimesi ile hazırlanan kod bloklarından sürekli metot diye söz ettim. Gelelim bu metni asıl yazma nedenime: Bir süre önce bir kaynakta procedure’lerin fonksiyonlara göre daha gelişmiş bir yapıya sahip olduğu beyan edildiğini fark ettim. Sahi Procedure’ler gerçekten daha gelişmiş bir yapıya mı sahiptir? Yani C#’ta olmayan Procedure’ler olmayan Fonksiyonlardan daha mı gelişmiş oluyorlar. Yorumu size bırakıyorum. Tabi aklı tepelerde yani bir karış havada olanlar “hayır C#’ta procedureler daha gelişmiş bir yapıya sahiptir” demeyi sürdüreceklerdir.