Biraz öznel, ancak bir operatörün geniş ve zor olarak kullanılmasını hangi faktörlerin netleştirdiğini daha net bir şekilde anlamayı umuyorum. Son zamanlarda dil tasarımlarını göz önünde bulunduruyorum ve her zaman geri döndüğüm bir konu, dilde bazı önemli işlemleri ne zaman bir operatör haline getireceğimiz ve ne zaman bir anahtar kelime veya işlev kullanacağım.
Özel işleçlerin oluşturulması kolay olduğundan ve genellikle yeni bir veri türü üzerinde kullanılmak üzere birkaç işleçle paketleneceğinden Haskell bunun için biraz kötü şöhretlidir. Örneğin Parsec kütüphanesi, ayrıştırıcıları bir araya getirmek için bir sürü operatörle birlikte gelir, mücevherler gibi >.
ve .>
şu anda ne demek istediklerini bile hatırlayamıyorum, ama ne olduğunu ezberledikten sonra çok kolay çalıştıklarını hatırlıyorum aslında demek istedikleri. Böyle bir işlev çağrısı leftCompose(parser1, parser2)
daha iyi olur muydu? Kesinlikle daha ayrıntılı, ancak bazı yönlerden daha net.
C benzeri dillerdeki operatör aşırı yüklemeleri benzer bir konudur, ancak +
alışılmadık operatörlerin anlamını olağandışı yeni anlamlarla aşırı yüklemenin ek sorunu ile sınırlıdır.
Herhangi bir yeni dilde, bu oldukça zor bir konu gibi görünecektir. Örneğin F # 'da döküm, C # stili döküm sözdizimi veya ayrıntılı VB stili yerine matematiksel olarak türetilmiş bir tür döküm operatörü kullanır. C #: (int32) x
VB: CType(x, int32)
F #:x :> int32
Teoride, yeni bir dilde en yerleşik işlevsellik için operatörler bulunabilir. Yerine def
ya dec
ya var
değişken bildiriminde, neden olmasın için ! name
veya @ name
veya benzer bir şey. Kesinlikle bildirimi ve ardından bağlamayı kısaltır: @x := 5
yerine declare x = 5
veya let x = 5
Çoğu kod çok sayıda değişken tanımı gerektirecektir, neden olmasın?
Bir operatör ne zaman açık ve yararlıdır ve ne zaman gizlidir?
+
dize birleştirme veya <<
akışlar için) yeniden kullanmak zorunda kalırsınız . Haskell ile, bir operatör, sadece özel bir ada sahip bir işlevdir (aşırı yüklenmemiş) veya tip sınıfının bir parçasıdır, bu da polimorfik olsa da, her tip için aynı mantıklı şeyi yapar ve hatta aynı tip imzası vardır. Yani >>
olan >>
her tür ve asla biraz kayma olacak.