Yorum Yaz

Visual Basic'ebildiklerim, C Sharp'amadıklarım 1...

M. Baykal, 08 Ağustos 2008 saat 08:14'de yazdı.

Kategoriler: Microsoft

Microsoft teknolojileri üzerine yazılım geliştiren yazılımcılardan birisine (yanlışlıkla) "hangi dille başlamalıyım" sorusunu sorarsanız;

- tabii ki, c#!

cevabını alırsınız. Peki neden? Microsoft'un henüz ergenlik çağına bile giremeyen dili, Visual Basic'ten daha mı hızlı? Daha mı pratik? Bu yazımda bunu anlamaya çalışacağız...

Öncelikle, bu diller elinizde yoksa ve öğrenciyseniz DreamSpark programı kapsamında Visual Studio 2008'i buradan indirebilirsiniz. DreamSpark hakkında bir fikriniz yoksa onunla ilgili yazdığım yazıları buradan inceleyebilirsiniz. Eğer benim gibi üşengeç birisiyseniz, Visual C# .Net Express'i ve Visual Basic .Net'i buradan indirebilirsiniz.

Kısa Tarihçeler

Öncelikle bu iki dilin kısa tarihçelerine verelim (tarihçeler azalan alfabetik sırada alınmıştır. :p)

Visual Basic .Net

Basic, 1963'de Darmouth College’de John G. Kemeny ve Thomas E. Kurtz tarafından geliştirilmiştir. Microsoft bu dili daha sonra Quick Basic olarak kişisel bilgisayarlara uyarlamıştır. Zamanla COM ve ActiveX gibi teknolojiler dile eklenmiş, adı Visual Basic olarak değiştirilmiştir. Visual Basic daha en başından üzerinde hızlı uygulama geliştirilmesine izin verdiği için bir çok programcının tercihi olmuştur. 6. sürümünden sonra .Net ailesine katılıp nesne yönelimli bir dile dönüşmüş ve arkasına Framework kütüphanesinin gücü almıştır.

C#

C#, ilk olarak 2002 (yanılıyorsam düzeltin) de Visual Studio 2003 ve .Net Framework 1.0 ile piyasaya sürüldü. Microsoft; C, Java, Delphi, vs.ç iyi dillerin iyi özelliklerini toplayıp bu dilde birleştirdiğini öne sürüyordu. (idda nasıl yazılır bulamadım :p) Bu dil için büyük bir reklam kampanyası başlatılmıştı. Hatta tümleşik geliştirme ortamı'da (Visual Studio) bu dille yazılmıştı. Yine o günlerde Microsoft Office'in yeni sürümünün C# ile yazıldığı dedikiduları vardı...

Karşılaştırmalara başlamadan önce şunu söylemek isterim. İki dil arasında kesinlikle bir performans farkı yoktur. İki dilde de yazılan programlar derleme esnasında MSIL koduna dönüştürülür, bu nedenle bir performans farkı söz konusu değildir.

Karşılaştırmalar

Case Problemi

Visual Basic'i kullanırken, Case yapılarını çok rahat bir şekilde aşagıdaki gibi kullanabilirsiniz.

Module Program
    Public Function Main() As Integer
        Dim sayi As Integer = Val(System.Console.ReadLine)
        Dim mesaj As String
        Select Case sayi
            Case 0
                mesaj = "Sifir girdiniz."
            Case 1 To 100
                mesaj = "Bir ile yuz arasinda bir sayi girdiniz.."
            Case Is > 900
                mesaj = "Abarttiniz!"
            Case Else
                mesaj = "diger"
        End Select
        Console.WriteLine(mesaj)
    End Function
End Module

Peki ya aynı kodu C#'da yazmak isteseydik ne yapacaktık?

namespace csharpamadiklarim
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            string mesaj;
            int sayi = (int)Math.Round(Conversion.Val(Console.ReadLine()));
            switch(sayi)
                {
                case 0:
                        mesaj = "Sifir girdiniz.";
                        break;
                case 1 to 100:
                        mesaj = "Bir ile yuz arasinda bir sayi girdiniz..";
                        break;
                case is > 900:
                        mesaj = "Abarttiniz!";
                        break;
                default:
                        mesaj = "diger";
                        break;
                }
            Console.WriteLine(mesaj);
        }
    }
}

Yukarıda ki gibi yazabilir miydik? Eğer biraz C# biliyorsanız altı çizili satırların yanlış olduğunu hemen farketmişsinizdir. Çünkü C#'da switch ifadelerinde is ve to gibi anahtar sözcükler kullanamıyoruz. Bunu c# kullanarak aşağıda ki gibi yapmalıydık.

namespace csharpamadiklarim
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            string mesaj;
            int sayi = (int)Math.Round(Conversion.Val(Console.ReadLine()));
            if (0 == sayi)
            {
                mesaj = "Sifir girdiniz.";
            }
            else if ((sayi >= 1) && (sayi <= 100))
            {
                mesaj = "Bir ile yuz arasinda bir sayi girdiniz..";
            }
            else if (sayi > 900)
            {
                mesaj = "Abarttiniz!";
            }
            else
            {
                mesaj = "diger";
            }
            Console.WriteLine(mesaj);
        }
    }
}

Bunu switch kullanarak yapmak isteseydik, ikinci case'imiz şu şekilde olacaktı:

case 1:
case 2:
case 3:
...
case 99:
case 100:
     mesaj = "Bir ile yuz arasinda bir sayi girdiniz..";
        break;

Sizde fark ettiniz ki bu biraz ameleliğe kaçıyor...

Parametre Alan Özellikler (property'ler)

C#'da geliştirdiğim bir projeden XML dosyasında ayarları yükleyen bir sınıf yazıyordum. XML dosyasında birden çok ayar saklanıyordu. Dosya temel anlamda aşağıda ki gibiydi.

<?xml version="1.0" encoding="utf-8"?>
<applications>
  <application id="fos">
    <information name="FaturaOdeme"><![CDATA[Aciklama]]></information>
    <settings>
      <setting key="username"><![CDATA[serilestirilmis nesne]]></setting>
      <setting key="password"><![CDATA[serilestirilmis nesne]]></setting>
    </settings>
  </application>
  <application id="secu">
    <information name="blabla"><![CDATA[Aciklama]]></information>
    <settings>
      <setting key="username"><![CDATA[serilestirilmis nesne]]></setting>
      <setting key="password"><![CDATA[serilestirilmis nesne]]></setting>
    </settings>
  </application>
</applications>

Yazdığım kodla söyle bir yapı kurmak istiyordum. Applications.Application("fos").Settings.Setting("username") bunu nasıl yapacaktım?

public ApplicationBase Application(string ApplicationKey)

Gibi bir özellik tanımlayacaktım, tabii c# buna izin vermedi. Buna benzer bir yapıyı c#'da kurabilmek için, ApplicationBase sınıfının numaralandırıcı operatörünü aşırı yüklemeliydim, ölme eşeğim ölme...

Oysa, Visual Basic'te bunu

Public Property Application(ByVal ApplicationKey As String) As ApplicationBase

kadar basit bir şekilde halledebiliyoruz.

Bu kadar da değil. Daha bir çok şey var. Onları da zamanla yazacağım. Bu yazının son sözü olarak, C#'ın üretkenliği düşürdüğünü düşündüğümü söylemek istiyorum. Yalnızca burada anlattıklarım bile bazen çok ciddi dert olabiliyor. Bunlar henüz başlangıçtı. Visual Basic'e yeni eklenen Inline XML gibi özellikler üretkenliğe çok fayda sağlıyor. Bu özellik sayesinde LINQ to XML, Visual Basic'te çok pratik. Bunu da bir daha ki yazımda anlatacağım.


Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Yorum yaz

Yazi hakkinda ne dusundugunuz, benim icin cok onemli. Lutfen bir iki cumle de olsa yorum yaziniz...


(Gravatar simgesini gösterecek)






  Günlüğümden bır yazıyı alıntılamadan önce, telif bilgilerini okuyun...

Telif Bilgileri

Son 3 Yazım

Etiket Bulutu

Son 5 Yorum

Comment RSS
Bu sitenin tüm içeriği, yazarinin görüşlerini yansıtmaktadır. Başka hiçbir kurumu ya da kuruluşu bağlamaz.
Site ve içeriğinin içeriğinin her hakkı Muhammed Medeni Baykal'a aittir, kaynak gösterilmek şartı ile alıntı yapılabilir.
Bu döküman en iyi, Internet Explorer 8 Beta 2 ile izlenir. Fırefox 3.0 ile de izlenebilir...
Bu site BlogEngine.NET ile gücüne güç katıyor.