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/