Kısa Sınav – 12
Kod yazma yeteneklerimizi ölçebileceğimiz sitelerden Codility‘de test olarak yapabileceğiniz bir soru bulunuyor. Aşağıdaki görselde soruyu görebilirsiniz.
Benim çözümüm devam eden sayfada. Sizde çözümünüzü yazın bakalım.
Kod yazma yeteneklerimizi ölçebileceğimiz sitelerden Codility‘de test olarak yapabileceğiniz bir soru bulunuyor. Aşağıdaki görselde soruyu görebilirsiniz.
Benim çözümüm devam eden sayfada. Sizde çözümünüzü yazın bakalım.
COUNT() sistem fonksiyonu, parametre olarak aldığı alandaki satır sayısını INT tipinde geri döndürür.
COUNT_BIG() sistem fonksiyonunun COUNT() fonksiyonundan farkı, elde ettiği sonucu BIGINT tipinde geri döndürmesidir.
INT veritipinin sınırları : -2^31 (-2,147,483,648) – 2^31-1 (2,147,483,647)
BIGINT veritipinin sınırları : -2^63 (-9,223,372,036,854,775,808) – 2^63-1 (9,223,372,036,854,775,807)
Eğer elde edeceğiniz sonucun INT veritipinin sınırlarına sığmayacağını düşünüyorsanız, yapmanız gereken COUNT_BIG() fonksiyonunu kullanmaktır.
Bütün gün, dizilerde filtrelemeler yaptıktan sonra, bu konu ile ilgili bir yazı yazmaya karar verdim. Elimizde bir List<int> olsun, dizideki 0‘dan büyük rakamları döndüren fonksiyon yazmak istediğimizi varsayalım;
Önce Kötü Yol;
private static List<int> FiltrelemeninKotuYolu(List<int> t)
{
List<int> arrReturn = new List<int>();
foreach (int i in t)
{
if (i > 0)
{
arrReturn.Add(i);
}
}
return arrReturn;
}
Umarım artık böyle kodlar yazmıyorsunuzdur!!..
Çirkin Yol;
Önce bir Predicate Function tanımlarız;
private static bool Karsilastir(int i)
{
if (i > 0)
{
return true;
}
return false;
}
Sonra, Predicate Function‘ı kullanırız;
private static List<int> FiltrelemeninCirkinYolu(List<int> t)
{
Predicate<int> pred = new Predicate<int>(Karsilastir);
return t.FindAll(pred);
}
Kötü Yol‘dan daha doğru olduğu ortada, ama Güzel bir yol değil.
Son olarak İyi Yol;
private static List<int> FiltrelemeninIyiYolu(List<int> t)
{
return t.FindAll(n => n > 0);
}
İyi Yol aslında sadece Çirkin Yol‘un iyileştirilmiş hali. Predicate Method kullanacağımıza Lambda Expression kullanıyoruz. n => n > 0 : n‘nin 0‘dan büyük olduğu durumlar anlamına geliyor.
VB.NET programcılarının kullanabildiği, ama C#‘ta bulunmayan isNumeric() fonksiyonunu kendimiz yazacağız;
public static class ExtensionManager
{
public static bool isNumeric(this string value)
{
double oReturn = 0;
return double.TryParse(value, out oReturn);
}
}
Artık C# kodumuzun herhangi bir yerinde
string Deger = "5"; bool Rakamsal = isNumeric(Deger);
veya
string Deger = "5"; bool Rakamsal = Deger.isNumeric();
kullanabiliriz.