Це трохи суб'єктивно, але я сподіваюся отримати більш чітке розуміння того, які чинники роблять оператора зрозумілим у використанні проти тупих і складних. Нещодавно я розглядав мовні конструкції, і одне питання, над яким я завжди кружлю, - це коли зробити якусь ключову операцію на мові оператором і коли використовувати ключове слово чи функцію.
Haskell дещо відомий для цього, оскільки користувацькі оператори легко створювати, і часто новий тип даних поставляється в комплекті з декількома операторами для використання на ньому. Наприклад, бібліотека Parsec постачається з безліччю операторів для комбінування парсерів разом із дорогоцінними каменями, >.і .> я навіть не можу пригадати, що вони означають зараз, але я пам’ятаю, що з ними було дуже просто працювати, коли я запам’ятав, що вони насправді означають. Чи буде виклик функції, такий як leftCompose(parser1, parser2)був кращим? Безумовно, більш багатослівний, але в деяких відношеннях більш чіткий.
Перевантаження операторів на мовах, подібних до С, є подібною проблемою, але пов'язаною з додатковою проблемою перевантаження значення звичних операторів, як, наприклад, +з незвичними новими значеннями.
У будь-якій новій мові це може здатися досить важким питанням. Наприклад, у F # для кастингу використовується оператор кастингу типів, отриманий математично, замість синтаксису відливання стилю C # або багатослівного стилю VB. C #: (int32) xVB: CType(x, int32)F #:x :> int32
Теоретично нова мова може мати операторів для більшості вбудованих функціональних можливостей. Замість defабо decабо varдля оголошення змінної, чому немає ! nameабо @ nameабо що - щось подібне. Це, безумовно, скорочує декларацію з наступним прив'язкою: @x := 5замість declare x = 5або let x = 5 Більшість кодів вимагає багато змінних визначень, так чому б і ні?
Коли оператор зрозумілий і корисний, а коли він затьмарений?
+для конкатенації рядків або <<потоків). З Haskell, з іншого боку, оператор є або просто функцією зі спеціальним іменем (тобто не перевантаженою), або частиною класу типу, що означає, що, хоча він є поліморфним, він робить те ж саме логічне для кожного типу, і навіть має однотипний підпис. Так >>це >>для кожного типу і ніколи не буде трохи зрушення.