Bir Kitabı Defalarca Okumak

24 Şub

Bu yazının konusunu oluşturan durum, yani bir kitabı birkaç kez okuma alışkanlığımın oluşması, yazılım kitaplarını ve makalelerini okumaya başladıktan sonra oluştu. Daha önceleri hikaye, roman ya da güncel kitaplar okurken okuduğum kitaptan bir anafikir oluşturduğumda artık amacıma ulaştığımı anlardım.

Son dönemlerde yazılım geliştirme kitaplarını okumaya başladığımda durum değişmeye başladı. Bir kitabı okurken, kitabın içeriğinin bende uyandırdığı merak duygusundan olsa gerek son derece aceleci davranıyorum. Her bölümü merak edip bir an önce vermek istediği bilgileri almaya çalışıyorum. Bu da konuları tam anlayamama sebep oluyor. Kitap bittiğinde kafamda hiç bir bölüm hakkında tam bir fikir oluşmadığını anlıyorum. Bu durumun oluşmasında belki de okuduğum kitapların yabancı dilde (ingilizce) yazılmış olması da rol oynuyor olabilir. Aynı kitabı bir süre sonra tekrar okuduğumda kitabın vermek istedği mesajı tam olarak alabildiğimi hissediyorum. Kitapta verilen örnek uygulamaları daha iyi anlayabildiğimi farkediyorum. Geliştirdiğim uygulamalarda öğrendiğim yöntemleri uygulamam daha kolaylaşıyor. Zaman ilerledikçe kitaptan öğrendiklerimi unutabiliyorum. Tekrar aynı kitaba baktığımda kitaba olan aşinalığımdan dolayı unuttuklarımı hatırlamam ve anlamam kolaylaşıyor.

Yazılımcı milleti, kendi kendini yetiştirmek zorunda olan bir kitle olduğundan kendi derdine kendi çare bulmak zorunda kalıyor. Bilmediklerini kendi kendine okuyarak ve araştırarak bulmak zorunda kalıyor. Sektördeki işe yarar kaynakların da çoğunlukla yabancı dilde yazıldığı göz önüne alındığında yabancı dil öğrenmek ve okumak şart oluyor. Ben okuduğum kaynakları tekrar okuma alışkanlığımın sebebini anlayarak kendi derdimin çaresini kendim bulmuş oldum.

C# if İfadesi Yerine Dictionary Kullanmak

23 Şub

Proje geliştirirken karşılaştığımız sorunlardan biri de “if” kullanımı sırasındaki kod fazlalığından dolayı kodun okunabilirliğinin azalmasıdır. Buna örnek olarak aşağıdaki gibi bir örnek verebiliriz. Bu örnekte matematiksel bir işleme karar vermek için belirlenmiş bir dizi “if” sınaması gerçekleştirilmektedir.


public class OperationData
{
    public int X { get; set; }
    public int Y { get; set; }
    public string Operation { get; set; }
}

public ActionResult Save(OperationData operationData)
{
    if (operationData.Operation == "+")
    {
        // Sum
    }
    else if (operationData.Operation == "-")
    {
       // Sub
    }
    else if (operationData.Operation == "*")
    {
       // Mul
    }
    else if (operationData.Operation == "/")
    {
       // Div
    }
    throw new Exception();
}

}

Bunun yerine daha temiz bir tasarım fikri geliştirmek mümkündür. Bu tasarım fikrine okuduğum kitaplarda ve makalelerde de rastlıyorum. Fikri geliştiren hakkında kaynak göstermek isterdim ama elimde kesin bir kaynağa sahip olmadığımdan net bir kaynak gösteremiyorum. Şimdilik sadece fikri sunana teşekkür etmekle yetiniyorum.


public class MathController
{
    readonly Dictionary<string,Func<OperationData,ActionResult>> handleAction =
       new Dictionary<string, Func<OperationData, ActionResult>>
         {
            {"+", SumAction},
            {"-", SumAction},
            {"*", SumAction},
            {"/", SumAction},
         };

   public ActionResult Save(OperationData operationData)
   {
       if (handleAction.ContainsKey(operationData.Operation))
       {
          return handleAction[operationData.Operation](operationData);
       }
       throw new Exception();
   }

}

Yukarıdaki yaklaşım daha temiz ve okunabilirlik bakımından gayet iyi bir şeçim olacaktır. handleAction kolleksiyonunu uygun operasyon bilgileriyle doldurarak istediğimiz işlemleri başarıyla gerçekleştirebiliriz.