Değişmez kavramının birçok programlama paradigmasında var olduğunun farkındayım. Örneğin, döngü değişmezleri OO, fonksiyonel ve prosedürel programlama ile ilgilidir.
Bununla birlikte, OOP'de bulunan çok yararlı bir tür, belirli bir türdeki verilerin değişmezidir. Başlığında "tip tabanlı değişmezler" diyorum. Örneğin, bir Fraction
tipte bir numerator
ve olabilir ve denominator
değişmezi ile gcd'leri her zaman 1'dir (yani, fraksiyon azaltılmış bir formdadır). Bunu ancak türünün kapsüllenmesini sağlayarak, verilerin serbestçe ayarlanmasına izin vermeyerek garanti edebilirim. Buna karşılık, asla azaltılmış olup olmadığını kontrol etmek zorunda değilim, böylece eşitlik kontrolleri gibi algoritmaları basitleştirebilirim.
Öte yandan, Fraction
bu garantiyi kapsülleme yoluyla sağlamadan sadece bir tür beyan edersem, bu tür üzerinde, fraksiyonun azaldığını varsayan herhangi bir işlevi güvenle yazamıyorum, çünkü gelecekte başka biri gelip bir yol ekleyebilir indirgenmemiş bir fraksiyonun elde edilmesi.
Genellikle, bu tür değişmezliğin olmaması aşağıdakilere yol açabilir:
- Ön koşulların birden fazla yerde kontrol edilmesi / sağlanması gerektiğinden daha karmaşık algoritmalar
- Bu tekrarlanan ön koşullar nedeniyle KURU ihlalleri aynı temel bilgiyi temsil eder (değişmezin doğru olması gerekir)
- Derleme zamanı garantileri yerine çalışma zamanı hataları yoluyla ön koşulları zorunlu kılmak
Benim sorum şu: bu tür değişmeze işlevsel programlama cevap. Aşağı yukarı aynı şeyi başarmanın işlevsel-deyimsel bir yolu var mı? Yoksa fonksiyonel programlamanın faydaları daha az alakalı kılan bir yönü var mı?
PrimeNumber
sınıf düşünün . Her işlem için birden fazla yedeklilik kontrolü yapmak çok pahalı olacaktır, ancak derleme zamanında yapılabilecek bir tür test değildir. (Eğer çarpma demek, asal sayılar üzerinde gerçekleştirmek istiyoruz operasyonların bir sürü bir oluşturmuyor kapatılmasını yani sonuç muhtemelen asal garanti edilmez, (ı fonksiyonel programlama kendim bilmiyorum çünkü yorum olarak Gönderme)..