С помощью высокоуровневых функций можно существенно облегчить жизнь программиста, хотя настоящий программист должен знать все, что творится "под капотом" хотя бы в общих чертах. Это значит, что в высокоуровневых функциях находится часто повторяющийся код, который до вас уже написали другие программисты. Разумеется, вам этот код нужно знать, хотя необязательно самому каждый раз переписывать его заново, лучше применять высокоуровневые функции и операторы.
При применении высокоуровневых функций главной проблемой может являться в основном только применимость конкретной низкоуровневой части кода к вашему алгоритму, то есть низкоуровневый код может в чем-то не удовлетворять ваши требования, то есть он не всегда может быть обобщенным на все случаи жизни. В этом случае придется залазить на низкий уровень кода и что-то переписывать и корректировать. Но при современных подходах нам могут очень помочь обобщения или женерики с наследованием, которые могут конструировать классы или структуры нижнего уровня прямо на лету. Тогда при создании методов с большим числом параметров (для определения низкого уровня) мы можем делать очень крутые универсальные функции высокого уровня.
Функции высокого уровня вы можете сравнить с фреймворками или каркасами от программ, они являются такими же скелетами от конечного варианта кода, также они похожи на интерфейсы, которые по сути являются каркасами от объектов.
Смыслом данной небольшой статьи является сама идея использовать высокоуровневые функции и операторы для замены низкоуровневых функций путем введения большого числа женериковых обобщенных параметров, желательно эти параметры в функцию передавать в обычных круглых скобках, то есть простым копированием ссылок и указателей на объекты в случае сложных объектов и копированием самих объектов в случаях примитивов, этим мы еще упрощаем синтаксис вызова функций.
Большое число параметров или внешних переменных для высокоуровневых функций нужно для того, чтобы заменить ими использование большого числа низкоуровневых функций. В этом главная суть статьи, то есть вы вместо многих низкоуровневых методов делаете много параметров у одной высокоуровневой функции, а внутри нее уже вызываете методы низкого уровня с этими параметрами для внешней функции.
В итоге мы избавляемся от нудного ковыряния в низкоуровневом коде, которое далеко не всегда является необходимым занятием, а скорее всего отнимает много лишнего времени и вообще мало приятно снова "изобретать велосипед".
Пример простого метода высокого уровня с тремя параметрами на C#:
bool method1 (string pr, double d, int i)
{
Console.WriteLine (pr + d + i);
double vasja = d + i;
if (vasja > 50.0) return true;
else return false;
}
В данном примере мы создали простой высокоуровневый метод с тремя параметрами, который можно было бы заменить двумя или тремя примитивными методами. В одном из них можно было бы печатать на консоль введенную строку, в другом можно было бы складывать два разных числовых типа, в третьем можно было бы проверять результат сложения чисел и возвращать единицу или нуль при переполнении через полсотню, а можно просто сделать один метод с тремя действиями, как мы сделали выше в примере.
Если бы мы делали три метода по одному на каждое действие, то передавали бы в каждый метод свой нужный параметр, а так нам пришлось в метод высокого уровня передать сразу три параметра, но зато в будущем нам не придется вызывать каждый раз в коде последовательно три метода, а придется вызвать всего один метод с тремя параметрами. Вот в чем смысл идеи статьи. Надеюсь, что понятно пояснил?
Но все равно знать всю математическую сущность происходящих внутри метода операторов или действий серьезный программист должен, иначе он будет просто пользователем методов высокого уровня, написанных настоящими программистами. Подписывайтесь, ставьте лайки и комментарии...