Считается, что неявная типизация позволяет связать слабо связанные типы, поскольку не требует указывать воплощаемые интерфейсы. Но для того, чтобы связывание через интерфейс работало, необходимо, чтобы тот, кто создаёт его воплощение, хотя и не прописывал бы явно включение самого интерфейса, но всё равно чётко бы следовал его описанию. Иначе даже похожие системы могут легко оказаться несовместимыми, хотя бы и по другому порядку параметров или их названиям, и что намного важнее — по деталям ожидаемого поведения.
Это значит, что в правильном коде прямая связь между интерфейсом и воплощением всё равно существует, но присутствует лишь в голове, и, возможно, документации, но не в самом коде. Хорошая формальная система не должна прятать важные детали, а наоборот, должна выносить их в явную схему[0].
Единственная задача, которую решает утиная типизация — это отказ автора языка програмиирования от создания хорошей формальной системы в расчёте на то, что автор кода сам как-нибудь порешает без лишнего сопротивления языка, но также и без его помощи. Это слабость, которая нередко преподносится как преимущество.
[0] Смотрите также заметку про ложную идею программирования с помощью языка, а не на языке.
Комментариев нет:
Отправить комментарий