Aslında, OO kodu daha az tekrar kullanılabilir ve tasarım gereğidir. OOP'un ardındaki fikir, belirli veri parçaları üzerindeki işlemleri, sınıfta veya miras hiyerarşisindeki uygun yerdeki belirli ayrıcalıklı kodlarla sınırlandırmaktır. Bu değişkenliğin olumsuz etkilerini sınırlar. Bir veri yapısı değişirse, kodda sorumlu olabilecek çok fazla yer vardır.
Değişmezlikle, belirli bir veri yapısı üzerinde kimin çalışabileceği umrunda değil, çünkü hiç kimse veri kopyanızı değiştiremez. Bu, mevcut veri yapıları üzerinde çalışmak için yeni fonksiyonlar yaratmayı çok daha kolaylaştırır. Siz sadece fonksiyonları yaratır ve etki alanı açısından uygun görünen modüller halinde gruplandırırsınız. Miras hiyerarşisine nasıl sığacakları konusunda endişelenmenize gerek yok.
Diğer bir kod yeniden kullanımı, mevcut işlevler üzerinde çalışmak için yeni veri yapıları oluşturmaktır. Bu, jenerik ve tip sınıfları gibi özellikler kullanılarak işlevsel dillerde işlenir. Örneğin, Haskell'in Ord tipi sınıfı, sortişlevi bir Ordörnekle herhangi bir türde kullanmanıza izin verir . Zaten mevcut değilse, örnekleri oluşturmak kolaydır.
AnimalÖrnek alın ve bir besleme özelliği uygulamayı düşünün. Anlaşılır OOP uygulaması, bir Animalnesne koleksiyonunu sürdürmek ve feedher biri için yöntemi çağırarak, hepsinin içinden geçen döngüdür .
Ancak, ayrıntılara indiğinizde işler zorlaşıyor. Bir Animalnesne doğal olarak ne tür bir yemek yediğini ve tam hissetmek için ne kadar ihtiyacı olduğunu bilir. O mu değil gıda tutulur nerede doğal bilmek ve böylece ne kadar, mevcut FoodStorenesne sadece her bir bağımlılık haline geldi Animalya bir alan olarak, Animalnesnenin veya bir parametre olarak geçirilen feedyöntemle. Alternatif olarak, Animalsınıfı daha uyumlu tutmak için nesneye hareket feed(animal)edebilir FoodStoreveya bir veya başkaları adı verilen bir sınıfın suiistimalini oluşturabilirsiniz AnimalFeeder.
FP'de, Animalyeniden kullanılabilirlik için bazı ilginç çıkarımlar bulunan, her zaman bir arada gruplanmış olma alanları için bir eğilim yoktur . Eğer bir listesi var Say Animalalanlar gibi birlikte, kayıtların name, species, location, food type, food amount, vb Ayrıca bir listesi var FoodStoregibi alanlarla kayıtların location, food typeve food amount.
Beslenmedeki ilk adım, bu kayıt listelerinin her birini (food amount, food type)hayvanların miktarları için negatif sayılarla çiftlerin listelerine eşlemek olabilir . Daha sonra bu tür çiftlerle her çeşit şeyi yapmak için işlevler oluşturabilirsiniz, örneğin her bir yiyecek türünün toplamı. Bu işlevler bir Animalveya bir FoodStoremodüle mükemmel şekilde ait değildir , ancak her ikisi tarafından da yeniden kullanılabilir.
[(Num A, Eq B)]Bununla yeniden kullanılabilir ve modüler olan faydalı şeyler yapan bir grup fonksiyonla bitirdiniz, ancak onları nereye koyacağınızı ya da grup olarak neyi arayacağınızı bulmakta zorlanıyorsunuz. Bunun etkisi, FP modüllerinin sınıflandırılmasının daha zor olmasıdır, ancak sınıflandırma çok daha az önemlidir.