C ++, C'den gerçek mavi operatörleri miras alır. Yani 6 + 4'teki "+" çok özeldir. Örneğin, bu + işlevine bir işaretçi alamazsınız.
Öte yandan Scala'nın bu şekilde operatörleri yok. Yöntem adlarını tanımlamada büyük bir esnekliğe ve ayrıca kelime olmayan semboller için yerleşik önceliğe sahiptir. Yani teknik olarak Scala'da operatör aşırı yüklenmesi yok.
Her ne demek isterseniz, operatör aşırı yüklenmesi C ++ 'da bile doğal olarak kötü değildir. Sorun, kötü programcıların kötüye kullanmasıdır. Ama açıkçası, programcıların operatör aşırı yüklemesini kötüye kullanma yeteneğini ortadan kaldırmanın, programcıların kötüye kullanabileceği tüm şeyleri düzeltme kovasına bir damla bırakmadığını düşünüyorum. Asıl cevap mentorluk. http://james-iry.blogspot.com/2009/03/operator-overloading-ad-absurdum.html
Bununla birlikte, C ++ 'ın operatör aşırı yüklenmesi ile Scala'nın esnek yöntem adlandırma arasında, IMHO, Scala'yı hem daha az istismar edilebilir hem de daha fazla istismar edilebilir kılan farklılıklar vardır.
C ++ 'da düzeltilmiş gösterim almanın tek yolu işleçleri kullanmaktır. Aksi takdirde object.message (argüman) veya pointer-> messsage (argüman) veya fonksiyon (argüman1, argüman2) kullanmalısınız. Kodunuza belirli bir DSLish tarzı istiyorsanız, operatörleri kullanmak için baskı var.
Scala'da herhangi bir mesaj gönderildiğinde infix gösterimi alabilirsiniz. "nesne mesajı argümanı" mükemmel bir şekilde tamamdır, yani sadece infix gösterimi için kelime dışı semboller kullanmanız gerekmez.
C ++ operatörünün aşırı yüklenmesi, esas olarak C operatörleriyle sınırlıdır. Sadece operatörlerin "ilgisiz" kavramları "+" ve ">>" gibi göreceli olarak az sayıda sembolle eşleştirmeye çalışmak için baskı uygulayan sınırlama ile birlikte
Scala, yöntem adları olarak çok çeşitli geçerli sözcük olmayan sembollere izin verir. Örneğin, yazabileceğiniz gömülü bir Prolog-ish DSL'im var
female('jane)! // jane is female
parent('jane,'john)! // jane is john's parent
parent('jane, 'wendy)! // jane is wendy's parent
mother('Mother, 'Child) :- parent('Mother, 'Child) & female('Mother) //'// a mother of a child is the child's parent and is female
mother('X, 'john)? // find john's mother
mother('jane, 'X)? // find's all of jane's children
: -,!,? Ve & sembolleri sıradan yöntemler olarak tanımlanır. Yalnızca C ++ 'da geçerlidir ve bu DSL'i C ++ ile eşleme girişimi zaten çok farklı kavramları çağrıştıran bazı semboller gerektirir.
Tabii ki, bu aynı zamanda Scala'yı başka bir istismara da açar. Scala'da isterseniz $! & ^% Yöntemini adlandırabilirsiniz.
Scala gibi, sözcük olmayan işlev ve yöntem adlarının kullanımında esnek olan diğer diller için, Scala gibi her "operatörün" sadece başka bir yöntem olduğu Hastal'ın ve programcının esnek olarak adlandırılmış önceliği ve sabitliğini tanımlamasına izin veren Smalltalk'a bakın. fonksiyonlar.