Kodun Yeniden Düzenlenmesi 1: Fonksiyonel Ayrıştırma ile Okunabilirlik ve Bakım Kolaylığı

220 Kişi Okudu
Kodun Yeniden Düzenlenmesi
Kodun Yeniden Düzenlenmesi Yazı Görseli

Kodun Yeniden Düzenlenmesi 1 Giriş

Yazılım geliştirme sürecinde, kodun okunabilirliği ve bakım kolaylığı büyük önem taşır. Bu amaçla, fonksiyonları ayırarak kodun daha düzenli ve anlaşılır hale getirilmesi yaygın bir uygulamadır. Bu yazıda, belirli bir koşula göre farklı işlemler gerçekleştiren bir kod bloğunu iki ayrı fonksiyona ayırarak nasıl daha temiz ve bakım dostu hale getirdiğimizi açıklayacağız.

Problem Tanımı

Elimizde, belirli bir bayrak (flag) değerine bağlı olarak farklı işlemler gerçekleştiren bir kod bloğu bulunuyor. Bu kod bloğu, bir veri mesajından alınan bilgileri iki farklı veri yapısına aktarıyor ve ardından bu verileri gönderiyor.

Mevcut Kod

İlk olarak, mevcut kodu inceleyelim:

if (flag == false)
{
    classA.status.data_one = message.data_one;
    classA.status.data_two = message.data_two;
    classA.status.data_three = message.data_three;
    classA.status.data_four = message.data_four;
    classA.status.data_five = message.data_five;
    classA.status.data_six = message.data_six;
    classA.status.data_seven = message.data_seven;
    classA.status.data_eight = message.data_eight;
    classA.status.data_nine = message.data_nine;
    classA.sendData();
}
else
{
    classB.status.data_one = message.data_one;
    classB.status.data_two = message.data_two;
    classB.status.data_three = message.data_three;
    classB.status.data_four = message.data_four;
    classB.status.data_five = message.data_five;
    classB.status.data_six = message.data_six;
    classB.status.data_seven = message.data_seven;
    classB.status.data_eight = message.data_eight;
    classB.status.data_nine = message.data_nine;
    classB.sendData();
}

Kodun Ayırılması

Kodun daha temiz ve tekrar eden bölümlerden arındırılmış hale getirilmesi için, işlemleri iki ayrı fonksiyona ayırdık.

Fonksiyon Tanımları

İlk olarak, updateStatus adında bir fonksiyon tanımladık. Bu fonksiyon, classA veya classB nesnesine verileri aktarır ve gönderir.

void updateStatus(ClassType& obj, const MessageType& msg) {
    obj.status.data_one = msg.data_one;
    obj.status.data_two = msg.data_two;
    obj.status.data_three = msg.data_three;
    obj.status.data_four = msg.data_four;
    obj.status.data_five = msg.data_five;
    obj.status.data_six = msg.data_six;
    obj.status.data_seven = msg.data_seven;
    obj.status.data_eight = msg.data_eight;
    obj.status.data_nine = msg.data_nine;
    obj.sendData();
}

Daha sonra, handleStatusUpdate adında bir başka fonksiyon tanımladık. Bu fonksiyon, flag değerine göre hangi ClassType nesnesinin kullanılacağını belirler ve updateStatus fonksiyonunu çağırır.

void handleStatusUpdate(bool flag, const MessageType& msg) {
    if (!flag) {
        updateStatus(classA, msg);
    } else {
        updateStatus(classB, msg);
    }
}

Sonuç

Yapılan bu işlem, kodun okunabilirliğini ve bakımını kolaylaştırmak amacıyla “Fonksiyonel Ayrıştırma” olarak adlandırılır. Bu teknik, kodun tekrarlanmasını önler, anlaşılmasını kolaylaştırır ve gelecekteki değişiklikleri daha az hataya açık hale getirir.

Bu yöntemle, karmaşık ve tekrar eden kod bloklarını daha küçük, anlamlı ve yeniden kullanılabilir fonksiyonlara ayırarak kodunuzu daha temiz ve yönetilebilir hale getirebilirsiniz. Ana kodunuzda artık bu fonksiyonları tek bir satırla çağırabilirsiniz:

handleStatusUpdate(flag, message);

Bu sayede, kodun genel yapısı daha sade ve anlaşılır hale gelmiş olur.

Derlenebilir Örnek Kod İçin, https://godbolt.org/z/M4e3f5Td4

Aşağıdaki Yazıya Göz Atabilirsiniz.
https://ahmetyasincivan.com/cpp-sinifi-icinde-global-ve-yerel-degisken/

Yayınlayan

Ahmet Yasin CİVAN

Mekatronik Mühendisi, Gömülü Yazılım Geliştiricisi.