Parçalama, büyük bir görevi daha küçük, yönetilebilir alt görevlere veya fonksiyonlara ayırmaktır. Tarihsel olarak, parçalama, modüler programlama ilkesinin temelini oluşturur: karmaşıklığı yönetmeyi, test edilebilirliği ve kodun yeniden kullanımını kolaylaştırır.
Sorun: Parçalama olmadan kod "monolit" haline gelir: okunması, bakımı ve değiştirilmesi zorlaşır, test yazmak ve programın parçalarını yeniden kullanmak güçleşir.
Çözüm: Python'da parçalama, mantığı fonksiyonlara, sınıflara, modüllere ayırma; net adlandırmalar kullanma; kompozisyon ve soyutlamalar kullanma ile gerçekleştirilir. Bu, okunabilir ve ölçeklenebilir kod yazmayı sağlar.
Kod örneği:
# Yoğun monolitik kod numbers = [1, 2, 3, 4] squares = [] for n in numbers: if n % 2 == 0: squares.append(n**2) print(squares) # Parçalanmış versiyon def is_even(n): return n % 2 == 0 def square(n): return n ** 2 def filter_and_apply(numbers, predicate, func): return [func(n) for n in numbers if predicate(n)] numbers = [1, 2, 3, 4] result = filter_and_apply(numbers, is_even, square) print(result)
Temel özellikler:
Küçük bir iş mantığını gerçekleştiren tek bir fonksiyon yazılabilir mi?
Sıklıkla, bir görevin küçük olması durumunda "100 satırlık bir fonksiyon" yazmanın kabul edilebilir olduğu düşünülür. Bu bir anti-desendir: hatta küçük bir görev en küçük değişikliklerle karmaşık hale gelir; mikro fonksiyonlar test edilmesi ve bakılması çok daha kolaydır.
Farklı isimlere sahip aynı mantığı taşıyan fonksiyonlar parçalama olarak mı değerlendirilir?
Hayır, kodun kopyalanması kötü bir parçalamadır. Tekrarlayan kod, alt görevlerin yanlış sınırlarını gösterir. Her zaman tekrarlanan işlevselliği yardımcı fonksiyonlara taşımak gerekir.
Örnek:
def add_user(): pass # mantık def add_admin(): pass # yukarıdaki mantık aynı!
Sadece bir yerde kullanılan yardımcı görevler parçalanmalı mı?
Evet, bazen böyle fonksiyonlar, tekil kullanımlarda bile kodu daha basit hale getirebilir (örneğin, koşulları veya filtrelemeyi ayrı bir fonksiyona ayırarak).
Veri işleme projesi, 300 satırlık büyük bir fonksiyon üzerinden akıyordu. Her hata paniğe neden oluyordu: neyin ve nerede olduğunu hızlıca anlamak imkansızdı, test edilmesi neredeyse mümkün değildi.
Artılar:
Eksiler:
Aynı proje, refaktörizasyon — kod, temel mantığa (okuma, doğrulama, işleme, veri yazma) dayalı olarak daha küçük fonksiyonlar ve sınıflara ayrıldı.
Artılar:
Eksiler: