Prime Factors Kata C# – Kod Kata

28 Tem

Prime Factors Türkçe olarak Asal Çarpanlar şeklinde tercüme edilebilir. Prime Factors Kata’sını geliştirirken bir sayının asal çarpanlarının bulunması hedeflenmektedir. Bir sayının asal çarpanları bulunup liste şeklinde kullanıcıya verilmektedir. Aşağıdaki listede örnek olarak verilen sayıların çarpanları listelenmiştir.

Prime Factors (Asal Çarpanlar)

1 => [ ]
2 => [2]
3 => [3]
4 => [2,2]
5 => [5]
6 => [2,3]
7 => [7]
8 => [2,2,2]
9 => [3,3]
10 => [2,5]
24 => [2,2,2,3]

Math Operations (Matematiksel) Kata .Net

19 Kas

Matematiksel işlemler katası

Bu katanın amacı, değişkenleri ve sabitleri belli olan matematiksel formülleri çözebilen bir uygulama geliştirmek.

Örnekler / Examples
————————————————-

1 + 1 => constant + constant
x + y => variable + variable
x + y -1 => variable + variable + constant
(x+y) / 2 =>(variable + variable) / constant
(x*y)-(x/3)=>(variable + variable) – (variable/3)

Microsoft .Net ortamında geliştirilmiş ve Test Driven Development kuralları uygulanmış olan bir kod katasıdır.

Kaynak kodlara github hesabımdan ulaşabilirsiniz.

Not: Bu katada geliştirilen Math Expression örneği, “The C# Programming Language” kitabındaki bir bölümden esinlenerek yapılmıştır.

Tekrar görüşmek dileğiyle.

FizzBuzz Kata NCrunch ve NUnit tools

11 Kas

FizzBuzz Kata

FizzBuzz uygulaması, girilen parametrelerden

3 ile bölünebilen sayılar için sonuç Fizz
5 ile bölünebilen sayılar için sonuç Buzz
3 ve 5 ile bölünebilen sayılar için sonuç FizzBuzz
Ne 3 ile ne de 5 ile bölünebilen sayılar için sayının kendisini veren bir birim test pratiğidir.

Unit Test Assert List

1- Result_ForDivisibleByThree_IsFizz
2- Result_ForDivisibleByFive_IsBuzz
3- Result_ForDivisibleByBothThreeAndFive_IsFizzBuzz
4- Result_ForDivisibleNeitherThreeNorFive

Yukarıda birim testlerin listesi çıkarılmıştır ve bu listeye göre testler icra edilmektedir.

NOT: Makinemdeki donanım (işlemci) yetersizliğinden dolayı hem görüntü kaydı hemde Visual Studio’nun çalışması sırasında NCrunch aracı eş zamanlı derlemelerde biraz yavaş kaldı. Çünkü video kaydı başlar başlamaz işlemci %100’lere dayandı.

Tekrar görüşmek dileğiyle.

Koşullu Mantığın Komutla Değiştirilmesi (Replace Conditional Dispatcher with Command)

5 Eyl

Programcıların öğrenme aşamasındaki alışkanlıklarından dolayı olsa gerek, koşullu mantığın kullanılması hat safhadadır. Olay Nesneye Dayalı programlamaya gelince, koşullu mantık bir takım değişikliklere uğrayabiliyor. Bu değişiklikler, aslında olması gereken değişikliklerdir. Bu değişikliklerle çoğu zaman karmaşık kod yapılarından kurtuluruz. Nasıl mı?


public class PersonManager
{
     public double GetHourlyRate(Person person)
     {
         if (person is Employee)
             return 2.0;
         if (person is Student)
             return 1.0;
         return 0.0;
     }
}

Yukarıda tanımlı GetHourlyRate metodu içerisinde person tipinin Employee veya Student olup olmadığı kontrol ediliyor. Bir süre sonra sisteme yeni bir tip eklendiğinde GetHourlyRate metodunda bir koşul daha eklenerek değişiklikler gerekecek. Bu iyi bir yöntem değil. Zaten Open Closed tasarım ilkesine de uymayan bir durum. Bu durumu değiştirelim.


public class PersonManager
{
       public double GetHourlyRate(Person person)
       {
           return person.GetRate();
       }
}

public class Person
{
     public virtual double GetRate()
     {
         return 0.0;
     }
}

public class Student:Person
{
     public override double GetRate()
     {
         return 1.0;
     }
}

public class Employee:Person
{
      public override double GetRate()
      {
         return 2.0;
      }
}

GetHourlyRate metodunda Person nesnesinin bir komutu olan GetRate kullanılıyor. Bu durumda sisteme istediğimiz kadar yeni tip ekleyebiliriz. Çünkü artık gelişime açık bir kod ortaya koyduk. Open Closed ilkesine uyduk.

Tekrar görüşmek dileğiyle.

Kod Kata

13 Ağu

Kod kata hakkında buradaki yazımızdan bilgi edinebilirsiniz. Kod katalarının videolar şeklinde kaydedilerek toparlandığı bir de web sitesi mevcut. Bu site, Özcan Acar tarafından hazırlanan www.kodkata.com adlı internet sitesidir. Benim de hazırladığım video kataları yayınladığım bir platformdur. Böyle bir çalışmayı üstlenen ve yürüten Özcan Acar’a teşekkür ediyorum.

Kod Kata

6 Ağu

İyi bir futbolcu olmak için, ya da iyi futbol oynamak için sürekli antrenman yapmalısınız. Ya da bir dil öğreniyorsanız sürekli okuma,yazma ve konuşma pratikleri yapmalısınız. Pratikler sayesinde mesleğiniz, gündelik işleriniz gibi bir hal almaya başlar. İyi bir programcı olmak içinde ürekli pratikler yapmak zorundasınız. İş yükünüzün durumuna göre kendinize pratik yapma fırsatları sunabilmelisiniz.

Karatecilik terimi olan kata kelimesi de sporcunun gündelik yaptığı beden hareketleridir. Yani günlük pratikleridir. Tabi bu pratiker sporcunun seviyesine göre değişir.

Programcı olarak biz de kodlarla birtakım pratikler yapmalıyız. Önce basit pratiklerden başlayarak sonralara doğru seviyemize göre pretikleri geliştirebiliriz. Bir probleme ait çözümü hergün deneyerek, probleme farklı açılardan yaklaşmayı öğrenebiliriz. Aynı örnekleri yapmak bizi sıradanlaştırmaz. Aksine geliştirip hızlandırır. Bu pratikler sayesinde geliştirme yaptığmız ortamları (visual studio, eclipse, v.s) daha iyi tanımaya başlarız.

Üniversitede yıllarından hatırladığım bazı hocalarımız, derste iki saat boyunca hiç kitaba bakmadan, yardım almadan en ağır matematiksel ispatları tıkır tıkır çözerdi. Bunda şüphesiz çok tekrar yapmanın etkisi büyüktür. Ustalaşmak, çok tekrar ve çok pratik ile mümkündür. Usta programcı olmakta kod yazma yeteneklerimizi geliştirmekle mümkün olacaktır.

Kod kata hakkında yazılara ve videolara ilerleyen yazılarımızla devam edeiyor olacağız. Ayrıca Özcan ACAR tarafından kurulmuş olan www.kodkata.com internet sitesi üzerinden de kod katalar yayınlanmaktadır. Faydalı bir site olacağı kanısındayım.

Faktoriyel Kata C# – Kod Kata

4 Ağu

Faktöriyel Kata

Bu katanın amacı, faktöriyel işleminin çözümünü Test Driven Development tekniklerini uygulayarak geliştirmektir. Faktöriyel çözümü yapan programın evrimsel bir şekilde ortaya çıkışını bu uygulamada göstermeye çalıştım.

Umarım faydalı olur.