В последнее время я размышлял, будет ли хорошей формой синтаксического сахара в таких языках, как Java и C #, включать тип «утка» в качестве типа параметра метода? Это будет выглядеть следующим образом:
void myFunction(duck foo) {
foo.doStuff();
}
Это может быть синтаксический сахар для вызова doStuff () через отражение, или он может быть реализован по-другому. Фу может быть любого типа. Если foo не имеет метода doStuff (), это вызовет исключение времени выполнения. Дело в том, что вы будете иметь преимущества более жесткой предварительно определенной парадигмы интерфейса (производительность, проверка ошибок), когда вы захотите их, то есть большую часть времени. В то же время у вас будет простой, аккуратно выглядящий бэкдор для утки, который позволит вам аккуратно вносить изменения, не предусмотренные в первоначальном дизайне, без масштабного рефакторинга. Более того, он, вероятно, будет на 100% обратно совместим и будет полностью соответствовать существующим языковым конструкциям. Я думаю, что это могло бы помочь сократить сверхпрочный стиль программирования «просто в случае», который приводит к запутанным, загроможденным API. Вы верите, что что-то подобное было бы хорошо или плохо в статических ОО-языках, таких как C # и Java?