String sinifi

Merhabalar.

Bundan önceki makalemde String sinifina giris yapmistim. Bu makalede hem bu konuyu biraz daha açmak hem de StringBuilder sinifina giris yapmak istiyorum.

Ayrica etkin (efektif) programlamaya güzel bir örnek olacak bir uygulama yapacagiz.

 .

Öncelikle StringBuilder nedir, kisaca deginelim. StringBuilder birden fazla String’in birlestirilmesi gerektigi zaman kullanacagimiz siniftir ve String sinifindan çok daha hizlidir. Bir nevî, String’lerden olusan kolleksiyondur diyebiliriz.

 

Örnek verecek olursak:

Dim ad, soyad, kimlik As String

ad = "Ahmet"

soyad = "Tanriverdi"

kimlik = ad + " " + soyad

 

Eger String ile çalisacaksak bu sekilde yapabiliriz. Fakat tercihimiz StringBuilder olacaksa:

Dim kimlik As StringBuilder = New StringBuilder()

kimlik.Append("Ahmet")

kimlik.Append(" Tanriverdi")

 

seklinde olur. Sonuç aynidir. Fakat kullanilan komponentler (String – StringBuilder) degisiktir.

 

StringBuilder‘i kisaca tanidiktan sonra, daha kapsamli bir örnek ile String – StringBuilder karsilastirmasi yapip, aradaki asil farkin ne oldugunu görelim.

  .

Uygulamamizin amaci 0’dan, disaridan verilen bir sayi arasindaki asal sayilari bulmak olsun.

 

 

Görüldügü gibi 6 tane textbox, 3 tane de button kullanacagiz. Bulunan asal sayilarin yazilacagi textbox’lari ‘multiline‘ yapmayi unutmuyoruz!

 

Kodlarimiz ise su sekilde:

 

Imports System.Text

‘StringBuilder içn gerekli

Public Class Form1

    Private Sub btnHesapla1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHesapla1.Click

        Dim i, j, x, intSayi As Integer

        Dim AsalSayi As Boolean

        txtSonuc1.Text = vbNullString

        intSayi = txtSayi.Text

        For i = 1 To intSayi

            AsalSayi = True

            j = i – 1

            For x = 2 To j

                If i Mod x = 0 Then

                    AsalSayi = False

                    Exit For

                End If

            Next x

            If AsalSayi = True Then

                txtSonuc1.Text = txtSonuc1.Text & i & vbCrLf

            End If

        Next i

    End Sub

    Private Sub btnHesapla2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHesapl2.Click

        Dim J, I, X As Integer

        Dim AsalSayi As Boolean

        Dim intSayi As Integer

        Dim Sayi As String = String.Empty

        txtSonuc2.Text = vbNullString

        intSayi = CInt(txtSayi2.Text)

        For I = 1 To intSayi

            AsalSayi = True

            X = I – 1

            For J = 2 To X

                If I Mod J = 0 Then

                    AsalSayi = False

                    Exit For

                End If

            Next J

            If AsalSayi = True Then

                Sayi &= I & vbCrLf

            End If

        Next I

        txtSonuc2.Text = Sayi

    End Sub

    Private Sub btnHesapla3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHesapla3.Click

        Dim J, I, X As Integer

        Dim AsalSayi As Boolean

        Dim intSayi As Integer

        Dim Sayi As New StringBuilder

        txtSonuc3.Text = vbNullString

        intSayi = CInt(txtSayi3.Text)

        For I = 1 To intSayi

            AsalSayi = True

            X = I – 1

            For J = 2 To X

                If I Mod J = 0 Then

                    AsalSayi = False

                    Exit For

                End If

            Next J

            If AsalSayi = True Then

                Sayi.Append(I & vbCrLf)

            End If

        Next I

        txtSonuc3.Text = Sayi.ToString

    End Sub

End Class

 

 

Kodlarin tek tek açiklamasini yapmayacagim. Fakat çalisma mekanizmasina biraz deginmek istiyorum.

Hesapla 1 butonuna tikladigimizda, evvela 0 ile verilen sayi arasindaki asal sayilar For – döngüleri ile bulunuyor; bulunan sayi hemen ilgili textbox’a yaziliyor.

 

Hesapla 2 butonuna tiklandiginda, yine asal sayilar tesbit ediliyor, fakat bu sefer hemen ilgili textbox’a yazilmiyor. Peki ne oluyor? String seklinde tanimladigimiz Sayi degiskeninine ekleniyor. Bu programimiza bir hayli hiz kazandirir. Çünkü her asal sayi bulundugunda gidip textbox’a yazmak zorunda kalmaz.

 

Hesapla 3 butonuna tiklandiginda ise StringBuilder kullaniliyor. Bu da Hesapla 2 butonunun kodlariyla benzer sekilde calisir. Fakat basta da belirttigimiz gibi StringBuilder String’den daha hizlidir.

 

Programi yazip çalistirdiktan sonra 3 ayri kodun çalisma hizlari arasindaki büyük farki siz de göreceksiniz.

 

Bu uygulamayi daha iyi anlatabilmek için gündelik hayattan bir sey ile benzetme yapacagim. Temsilde hatâ olmaz derler; bilgisayar pogramlarinin isleme mekanizmasi ile gündelik islerimizinki bire bir uymasa da büyük benzerlikler gösterebiliyorlar 🙂

  .

Bir kahvehane düsünün. Çaycimiz 20 tane çay siparisi aliyor.

Bu çaylari Hesapla 1 butonunun altina yazilmis kodlarin isleme mekanizmasiyla servis ederse: Önce çay ocagina gelir, çayi doldurup sekeri, kasigi, vs koyar ve o tek çay bardagini ilgili masaya götürür. Bu islemi tam 20 kere yapar; 20 kere çay doldurur, 20 kere masa ile çay ocagi arasinda gider gelir…

 

Hesapla 2 butonuna ait kodlar gibi çalisirsa: Eline bir tepsi alir, 20 bardak çayi yavas yavas tepsiye dizer ve ilgili masalara acele etmeden götürür…

 Hesapla 3′e ait kodlardaki gibi çalisirsa (StringBuilder): Yine eline bir tepsi alir, çaylari hizlica doldurur ve servis eder…

 String ile StringBuilder arasindaki fark da buna benzer.

Proje kaynak kodlari

 Baska bir makalede görüsmek üzere…

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir