Module (3%)
Section (29%)

Зачем нужны функции?

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

Если Вы хотите напечатать в консоли какие-то данные, Вы используете print(). Если Вы хотите считать значение переменной, Вы используете input() в сочетании с int() или float().

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

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


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

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

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


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



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

Хороший внимательный разработчик делит код (или, точнее, задачу) на хорошо изолированные части и кодирует каждую из них в виде функции.

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

The concept of decomposition


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

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