Algoritmik Kod

StartsWith metodunu kullanırken hiç kendi StartsWith metodumuzu kodlasaydık nasıl olurdu diye düşündünüz mü ? Bilgisayar Mühendisliği , Yazılım Mühendisliği öğrencisiyseniz veya C# programlama dilini öğreniyorsanız kendinizi geliştirmek adına bu metodu kendiniz kodlamayı deneyebilirsiniz. Bu tarz başka metotları kodladığımız yazılarımıza buradan ulaşabilirsiniz. Öncelikle StartsWith metodu ne işe yarar ve nasıl kullanılır sorularıyla başlayalım.

StartsWith Metodu Ne İşe Yarar ?

Belirlediğimiz metin, seçtiğimiz cümle veya paragrafla başlıyorsa True başlamıyorsa False döndürür. Örneğin “Algoritmik Kodla StartsWith metodunu kodluyoruz.” cümlesinin “Algoritmik” kelimesiyle başlayıp başlamadığını StartsWith metoduyla öğrenebiliriz. Sonucunda True ifadesini döndürecektir. Cümlenin “Algoritma” kelimesiyle başlayıp başlamadığını kontrol ettiğimiz zaman ise False ifadesini döndürecektir. Ayrıca sadece kelime girmek zorunda değiliz mesela cümlemiz “Algo”, “Algoritmik Kodla” gibi metinlerle de başlıyor mu diye kontrol edebiliriz. Verdiğimiz örnek basit bir örnek olsada StartsWith Metodu oldukça işe yarayan bir metottur. Uzun metinler üzerinde kullanılabilir.

StartsWith Metodu Nasıl Kullanılır ?

Kendi StartsWith metodumuzu kodlamaya başlamadan önce nasıl kullanabileceğimize bir göz atalım. Elimizdeki metin “Algoritmik Kodla öğreniyorum.” ve bu metinin “algoritmik” kelimesiyle başlayıp başlamadığını öğrenmek istiyorum fakat dikkat etmemiz gereken bir konu var. Bizim metnimizin “Algoritmik” kelimesindeki “A” harfi büyük yazılmışken kontrol etmek istediğimiz kelimedeki “a” harfi küçük yazılmış. Eğer büyük küçük harfler dikkate alınmasın istiyorsak kontrol metnimizden sonra virgül koyup StringComparison.OrdinalIgnoreCase ifadesini eklemeliyiz. Artık metodumuz harfin büyük veya küçük olmasını umursamayacak. Eğer büyük küçük harfi dikkate almasını istiyorsak bu ifadeyi eklemememiz yeterli olacaktır.

string metin = "Algoritmik Kodla öğreniyorum.";
bool sonuc = metin.StartsWith("algoritmik", StringComparison.OrdinalIgnoreCase);
Console.WriteLine(sonuc);

Kod bloğu çalıştırıldığında True ifadesini yazdıracaktır.

1. Adım Metodun Alacağı Parametreleri Belirleyelim.

Kendi StartsWith metodumuzu kodlamaya başlarken hangi parametreleri alacağını belirleyelim.

  •  StartsWith Metodunu belirli bir metin üzerinde denetim yapacağı için bir metin değişkeni girmeliyiz.
  • Metodumuzun hangi kelimeyi veya cümleyi kontrol etmesini istiyorsak onu belirtmemiz gerekiyor bu yüzden ikinci bir string değişkeni daha girmeliyiz.
  • Metodumuzu kullanırken büyük küçük harfi dikkate alsın mı seçeceğini oluşturmak için bir bool parametresi girmeliyiz ve varsayılan olarak false olmasını istiyorum eğer kullanıcı metodu kullanırken bir parametre girmezse büyük küçük harf uyumuna dikkat edilsin istiyorum. 
  • Son olarak kullanıcı girilen metnin istediği indexinden kontrole başlayabilsin diye bir int parametresi girilmesini isteyeceğiz eğer girilmezse varsayılan olarak 0 yani metnin  en başından başlayarak kontrol edilecek.
static bool StartsWith(string metin, string kontrolMetni, int baslamaNoktasi = 0, bool buyukKucukHarfDikkati = false){ }

2. Adım Büyük Küçük Harf Ayrımı Yapılsın mı ?

Büyük küçük harfe dikkat edip etmeyeceğimiz eğer belirtilmemişse dikkat edilsin olarak varsayılanını ayarlamıştık. Peki kullanıcı dikkat edilmemesini isterse ne yapacağız ? Yapacağımız şey oldukça basit: tüm harfleri küçük harfe çevirirsek büyük küçük harf ayrımı ortadan kalkacak. Bunu bir İf bloğu içinde yapıyorum. Eğer True parametresini alırsak blok çalışacak ve tüm harfleri küçüğe çevirecek.

static bool StartsWith(string metin, string kontrolMetni, int baslamaNoktasi = 0, bool buyukKucukHarfDikkati = false)
{
    if (buyukKucukHarfDikkati)
    {
        metin = metin.ToLower();
        kontrolMetni = kontrolMetni.ToLower();
    }
}

3. Adım Kontrol Döngüsünü Başlatma

Sıradaki adımımızda artık for döngüsüyle harflerimiz aynı mı diye kontrol etmeyi başlatacağız. Öncelikle metodumuzun bir boolean türünde ifade döndürmesi gerekiyor. Bunu varsayılan olarak True kabul ediyoruz. Eğer döngümüz aynı olmayan bir harfle karşılaşırsa False ifadesini alıp döngü kırılacak. Tabii ki metin içerisinde gezerken kontrol metni olarak seçtiğimiz cümlenin harflerinin de sırasıyla değişmesi gerekiyor bu yüzden kontrolMetniHarfSayaci diye bir değişken oluşturuyorum. 

Artık döngüyü yazmaya başlayabiliriz. Döngümüz bir for döngüsü olacak. Kullanıcının istediği indexten başlayacak ve bizim kontrol metnimizdeki karakter sayısı + başlamanoktasına kadar ilerleyecek (Bu kısmın yeterince açık olması için kullanıcının başlamamızı istediği index 4 olsun kontrol metnimizdeki karakter sayısı 5 olsun “i” 4 den başlayıp 9 a kadar gidecek çünkü metindeki indexleri doğru bir şekilde gezmemiz lazım) . Ayrıca az önce bahsettiğim kontrolMetniHarfSayaci da bu döngü her çalıştığında bir arttırılacak çünkü kontrol metnimizin harflerinde de sırayla gezmemiz gerekiyor.

Sıra geldi for döngümüzün içinde harfleri tek tek kontrol ettirmeye. İf bloğunun çalışması için 2 şartımdan birisini yerine getirmesi yeterli. Bu şartlardan birincisi “i” değişkeninin metin.Lenght ifadesinden büyük olması yani kullanıcının metinin karakter sayısından büyük bir index girmesi. İkinci şartım iste metin[i] != kontrolMetni[kontrolMetniHarfSayaci] olması yani aslında aynı olmayan bir harf ya da karakter bulunması ( Örneğin metnim “algoritmik kod” olsun kontrol ifademde “algoritma kod” olsun metindeki “i”harfine geldiğimizde kontrol metnimizde “a” harfi olduğu için if bloğuna girecek). Peki İf bloğuna girince ne olacak ? Başta belirlediğim metodun döndüreceği boolean ifade False olarak değiştirilecek ve döngünün devam etmesine gerek kalmadığı için break ifadesiyle durdurulacak. 

static bool StartsWith(string metin, string kontrolMetni, int baslamaNoktasi = 0, bool buyukKucukHarfDikkati = false)
{
    bool dondur = true;
    int kontrolMetniHarfSayaci = 0;
    if (buyukKucukHarfDikkati)
    {
        metin = metin.ToLower();
        kontrolMetni = kontrolMetni.ToLower();
    }
    for (int i = baslamaNoktasi; i < kontrolMetni.Length + baslamaNoktasi; i++)
    {
        if (i>=metin.Length||metin[i] != kontrolMetni[kontrolMetniHarfSayaci])
        {
            dondur = false;
            break;
        }
        kontrolMetniHarfSayaci++;
    }
    return dondur;
}

Son Adım İnceleme

Böylece kendi StartsWith metodumuzu kodladık. Tabii ki hazır StartsWith metodu optimize edilmiş ve daha kullanışlı olabilir fakat burada amaç kodlama yeteneğimizi geliştirmek ve kendimize yeni bakış açıları katmak. Kodu denemek isteyenler için tam halini aşağıya bırakıyorum. Split metodunu kodladığımız yazımıza ulaşmak için buraya tıklayabilirsiniz. Yazı veya sayfayla ilgili fikir ve yorumlarınızı iletişim sayfamızdan iletebilirsiniz. Bir sonraki yazımızda buluşmak dileğiyle.

 -Enes Türkay

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Algoritmikod
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string metin = "Algoritmik Kodla öğreniyorum.";
            string kontrolMetni = "öğreniyorum";
            bool sonuc = StartsWith(metin, kontrolMetni,17,true);
            Console.WriteLine(sonuc);
          

        }
        static bool StartsWith(string metin, string kontrolMetni, int baslamaNoktasi = 0, bool buyukKucukHarfDikkati = false)
        {
          
            bool dondur = true;
            int kontrolMetniHarfSayaci = 0;
            if (buyukKucukHarfDikkati)
            {
                metin = metin.ToLower();
                kontrolMetni = kontrolMetni.ToLower();
            }
            for (int i = baslamaNoktasi; i < kontrolMetni.Length + baslamaNoktasi; i++)
            {
                if (i>=metin.Length||metin[i] != kontrolMetni[kontrolMetniHarfSayaci])
                {
                    dondur = false;
                    break;
                }
                kontrolMetniHarfSayaci++;
            }
            return dondur;


        }
    }
}