ait WTF'lerinizi önlemek için, Clojure yaklaşık gitmek için doğru yolu (deyimsel yolu) nedir
, endişeleri ayrılması işlemek için en iyi yolu herhangi bir programlama sorunu dönüştürmek olduğunu Bir veri yapısında bir dizi dönüşüm içine. Örneğin, bir web uygulaması yazarsanız, genel amaç bir istek almak ve bunu yanıt verisine dönüştürmek olarak düşünülebilecek bir yanıt haline dönüştürmektir. (Önemsiz bir web uygulamasında, başlangıç verileri muhtemelen yalnızca isteği değil, oturum ve veritabanı bilgilerini de içerecektir) Çoğu programlama görevi bu şekilde düşünülebilir.
Her "endişe", dönüşümü mümkün kılan bir "boru hattındaki" bir işlev olabilir. Bu şekilde, her işlev diğer adımlardan tamamen ayrılır.
Bu, verilerinizin, bu dönüşümlerden geçtiği için, yapısında zengin olması gerektiği anlamına gelir. Esas olarak, programımızın tüm "zekâsını" kodda değil, veri içerisine koymak istiyoruz. Karmaşık bir işlevsel programda, farklı seviyelerdeki veriler, kendi başına bir programlama dili gibi görünmesi gereken kadar karmaşık olabilir. Bu, “alana özgü diller” fikrinin devreye girdiği yerdir.
Clojure Kulağa daha bu daha az külfetli hale karmaşık heterojen veri yapılarını manipüle etmek için mükemmel destek vardır
Ayrıca
, tembel veri yapıları için Clojure desteği bu izin verir (sağ yapılırsa yani hiç de hantal değil) ara veri yapıları, aslında (kavramsal olarak) sonsuz boyutta olacak şekilde, bu dekuplajı çoğu senaryoda mümkün kılar. Bu durumda sonsuz veri yapılarının neden bu kadar değerli olduğunu öğrenmek için aşağıdaki makaleye bakın: http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
Bu "boru hattı" yaklaşımı, endişelerinizi ayırmak için gereksinimlerinizin% 90'ını işleyebilir. Kalan% 10 için, yüksek bir seviyede, yön odaklı programlama için çok güçlü bir araç olarak düşünülebilecek olan Clojure makrolarını kullanabilirsiniz.
Ben de bunu en iyi "nesneler" veya "yönleri" Gerçekten bu yaklaşımda gerekli kavramlar olmadığını Clojure- Not kaygıları decouple inanıyoruz nasıl.
Ne soruyor olursanız biraz daha spesifik olabilir misiniz? Endişelerin ayrılması, 100 farklı şey anlamına gelmek için kullanılan bir terimdir. – Sami
Yönler, kaynağa erişimi olmayan mevcut kod davranışını değiştirmenin bir yoludur. Clojure ve diğer Lisps, kendi yığınları ile temelde globals olan dinamik değişkenlerle benzer bir şey sağlar. Üst düzey işlevler (defn ile oluşturulanlar) dinamik değişkenlerdir ve 'binding' ile bağlanabilirler. 'Bağlama' sözdizimi, tıpkı 'izin' gibi görünür, ancak ciltleme, ciltleme biçimindeki çağrılar içinde kullanılır. – Zak