Одним из ключевых свойств при разработке понятного программного обеспечения (и, вообще, проектирования чего-либо вообще) является разработка хорошего набора абстракций. В наши дни эти абстракции включают такие функции, как функции, классы, интерфейсы, рекурсия и функции более высокого порядка. Но что еще есть? Как мы можем абстрагироваться от наших проектов, так что мне не нужно думать ни о чем, кроме моей непосредственной, прямой цели? Какие новые абстракции еще не задействованы существующими технологиями?
Также обратите внимание, что большинство элементов в моем списке (за исключением, возможно, рекурсии) также являются инструментами, используемыми для повторного использования кода. Повторное использование кода не является предметом этого вопроса и не является тем, что я считаю необходимым аспектом хорошей абстракции. Функции полезны как абстракции, потому что они скрывают то, что они делают за описательным именем, а не потому, что я могу назвать их из нескольких разных мест.
Плохо сформировавшаяся идея. Является ли функция драйвера, которая вызывает только последовательность других функций, не сохраняя никакого собственного состояния, действительно такая же, как функция? Мы пишем ее как функцию и называем ее функцией, но, возможно, она представляет собой другую концепцию? Это отражается на некоторых языках, делая различия между процедурами, возвращающими значения и процедуры, не возвращающими значения. Но может быть, есть лучший способ рассмотреть эту разницу, другой способ абстрагировать последовательность относительно несвязанных шагов?
Итак, чтобы подтвердить, , как будущие языки программирования лучше облегчают абстракцию?