Найти в Дзене
Tech-Research.ru

Программирование - path 1: подпрограммы

Если вы не читали вводную статью по программированию, то загляните в нее перед прочтением этой.

Мой курс не призван сделать из вас программистов, я хочу сделать более фундаментальную теорию.

Если вы учитесь на сварщика, а вас будут учить варить не рассказав чем отличается дерево от металла, только говоря что берешь это и тычешь туда, то знания ваши будут не совсем универсальными и однажды вас попросят соединить две доски, а вы скажете что это легко, но ничего не получится. Пример слишком абстрактный, современному человеку много чего дают в школьной программе и некоторые вещи кажутся очевидными. Но допустим что вас научат вставлять электрод и прислонять к металлу, но не расскажут о разных металлах, об особенностях их сварки, о том как правильно швы делать прочные, вы чуть в другой задачке уже можете совершить большую ошибку, думая что знаете все, но на деле ничего не знаете.
Но что я про сварщика, допустим, вы учитесь на хирурга, шить и резать умеете, а об инфекциях не знаете, заразу занесете, зато качественно зашьете, крепко, а руки мыть вас не научили.

Вот так и тут, я постараюсь научить вас не писать хэллоу ворд на указанном языке, а расскажу нечто общее, абстрактное, фундаментальное. Многие программисты посчитают это очевидным и даже не расскажут, а вы в ступор встанете...

Подпрограммы - функции, процедуры, etc

Если в циклах одна последовательность действий повторяется, то в функциях она может один раз вызваться, но из кучи разных мест.

Вообще, программирование это баланс между двумя сторонами - скоростью исполнения и скоростью разработки.

Программа не может быть вечна, если она сама не устареет, дак устареют технологии на которых она работает, может программа была создана для работы по модему на win95, а сейчас должна по вайфаю работать на Win10, образно конечно, но что далеко ходить, вот недавно НДС был 18%, а сейчас стал 20%, любая программа, любой сайт, любая система нуждается в доработках, в постоянном сопровождении, исправлении ошибок, вероятно я к этому еще вернусь, но сегодня речь о том, что написанная вами программа будет переписываться другим программистом, когда вы уволитесь, либо вы устанете пилить тысячи строк кода в день и наймете пару джуниоров, в общем, ваш код должен быть понятным, читаемым и легко дорабатываемым. Даже вы сами через 6 лет посмотрите на свой код и скажете "да кто это писал???". Поэтому, в каждой программе должна быть не только оптимальность кода и скорость работы, но и удобство разработки.

Для удобства разработки в программировании есть куча уровней абстракции, абстракция, это когда вы отдаляетесь от мелочей и концентрируетесь на главном.

Скажем так, когда вы играете в футбол, то вы сосредотачиваетесь на движении мяча, а не на том, из чего он сделан, на сколько атмосфер он накачан, из какой кожи он изготовлен. Да, вас такие мелочи могут иногда заставить отвлечься, если мячик слишком тяжелый и ноги отбивает, то вы подойдете к тренеру и пожалуетесь, а если тренера нет, то загуглите и поищите более мягкий мячик, а если нет такого, то посмотрите на ютубе видео как сшить правильный мячик... Опять же, я очень образно, хочу направить вас на правильное мышление.

Функции это программы внутри программы, это повторное использование кода, но вам не нужно даже знать как эта программа работает, вам нужно знать как ее вызвать и какие параметры она на входе принимает, чтобы ей воспользоваться.

Скажете как же так не знать? А вы возьмите к примеру команду format c: в Windows или ее аналог при нажатии нужной кнопки, вы вообще знаете как идет форматирование?

Ну мало кто знает, так обобщенно знаете что чистая файловая система создается на диске перетирая старую, это как коттедж построить на месте старой избушки, используя ту же самую землю... Но там внутри столько работы со всякими битами и байтами, с системой каталогов, с сервисными разделами, а под этой программой может быть еще одна подпрограмма, например которая при указании адреса ячейки двигает головку жесткого диска и магнитный сигнал пускает.

И тут вы пишете утилиту, которая просто форматирует жесткий диск, вам достаточно из нее запустить подпрограмму по форматированию и в качестве параметра указать букву диска.

Возьмем пример из моей жизни - есть функция, у которой на входе подается входная цена, наценка, тип наценки (+руб или +%), а на выходе она вернет итоговую цену.

Если тип наценки + руб, то нужно к входной просто прибавить наценку...
Если тип наценки +%, то нужно входную цену поделить на сто и умножить на наценку и потом прибавить ко входной цене или же домножить на 1+наценка/100, например, если нужно прибавить 5% к числу, то можно его домножить на 1.05...

И вот, у меня есть функция pcice_calculate(), вроде задача одна, но используется много раз.

  • При сохранении товара в нем указывается все необходимое, цену надо обновить
  • При импорте новых товаров только входная цена известна, а у категорий задана наценка, цена генерируется.
  • Когда у категории наценку обновили, то опять цену надо для каждого товара пересчитать.

В моем примере это просто как формула, но функцией может быть алгоритм, который меняет размер картинки, там куча действий типовых, но вы даже можете не знать или не помнить какие там действия, просто вызывать фунцию, передавать в параметрах к ней путь до файл и нужный размер, и всё, картинка будет уменьшаться.

Вам не нужно каждый раз писать кучу строк чтобы изменить размер картинки, вам достаточно написать один раз функцию и всю жизнь ее вызывать в нужных алгоритмах.