Jest to nieco subiektywne, ale mam nadzieję, że lepiej zrozumiem, jakie czynniki sprawiają, że operator jest łatwy w użyciu w porównaniu z tępym i trudnym. Ostatnio zastanawiam się nad projektami językowymi, a jednym z problemów, nad którymi zawsze się zastanawiam, jest to, kiedy wykonać kluczową operację w języku jako operator, a kiedy użyć słowa kluczowego lub funkcji.
Haskell jest z tego powodu znany, ponieważ niestandardowe operatory są łatwe do utworzenia, a często nowy typ danych jest dostarczany z kilkoma operatorami do użytku na nim. Na przykład biblioteka Parsec zawiera mnóstwo operatorów do łączenia parserów, z podobnymi klejnotami >.i .> nawet nie pamiętam, co mają na myśli, ale pamiętam, że bardzo łatwo z nimi pracowałem, kiedy już zapamiętałem, z czym mają na myśli. Czy takie wywołanie funkcji leftCompose(parser1, parser2)byłoby lepsze? Z pewnością bardziej gadatliwy, ale pod pewnymi względami jaśniejszy.
Przeciążenie operatorów w językach podobnych do C jest podobnym problemem, ale jest połączone z dodatkowym problemem przeciążenia znaczenia znanych operatorów, takich jak +nowe niezwykłe znaczenia.
W każdym nowym języku wydaje się to dość trudnym problemem. Na przykład w F #, casting używa matematycznie wyprowadzonego operatora rzutowania, zamiast składni rzutowania w stylu C # lub pełnego stylu VB. C #: (int32) xVB: CType(x, int32)F #:x :> int32
Teoretycznie nowy język może mieć operatory dla większości wbudowanych funkcji. Zamiast deflub declub vardo deklaracji zmiennej, dlaczego nie ! namelub @ nameczy coś podobnego. Z pewnością skraca deklarację, po której następuje wiązanie: @x := 5zamiast declare x = 5lub let x = 5 większość kodu będzie wymagała wielu definicji zmiennych, więc dlaczego nie?
Kiedy operator jest przejrzysty i użyteczny, a kiedy zasłania?
+Do konkatenacji łańcuchów lub <<do strumieni). Z Haskell, z drugiej strony, operator jest albo po prostu funkcja o nazwie użytkownika (czyli nie przeciążony) lub częścią klasy typu co oznacza, że podczas, gdy jest polimorficzny, to robi to samo logiczną rzeczą dla każdego typu i ma nawet ten sam typ podpisu. Tak >>jest w >>przypadku każdego typu i nigdy nie będzie trochę przesunięcia.