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…