Зачем нужны функции?
К этому моменту Вы сталкивались с функциями много раз, но взгляд на их достоинства, который мы Вам представляли, был довольно односторонним. Вы только вызывали функции, используя их как инструменты, облегчающие жизнь и упрощающие трудоемкие и утомительные задачи.
Если Вы хотите напечатать в консоли какие-то данные, Вы используете print()
. Если Вы хотите считать значение переменной, Вы используете input()
в сочетании с int()
или float()
.
Вы также использовали некоторые методы, которые на самом деле являются функциями, но объявлены очень специфически.
Теперь Вы научитесь писать и использовать свои собственные функции. Мы напишем вместе несколько функций, от очень простых до довольно сложных, которые потребуют Вашей концентрации и внимания.
Часто случается, что определенный фрагмент кода многократно повторяется в вашей программе. Это повторяется либо буквально, либо с небольшими изменениями, заключающимися в использовании других переменных в том же алгоритме. Также случается, что программист не может устоять перед упрощением своей работы и начинает клонировать такие фрагменты кода, используя операции буфера обмена и копирования-вставки.
Это может сильно расстроить, если вдруг окажется, что в клонированном коде есть ошибка. Программисту придется потрудиться, чтобы найти все места, которые нуждаются в исправлениях. Также существует высокий риск того, что исправления вызовут ошибки.
Теперь мы можем определить первое условие, которое может помочь Вам решить, когда начинать писать свои собственные функции: если определенный фрагмент кода начинает появляться более чем в одном месте, рассмотрите возможность вынесения его в функцию, вызываемую из мест, где ранее был размещен исходный код.
Может случиться так, что алгоритм, который Вы собираетесь реализовать, настолько сложен, что Ваш код начинает неконтролируемо расти, и Вы внезапно замечаете, что больше не можете так легко перемещаться по нему.
Вы можете попытаться решить эту проблему, подробно комментируя код, но вскоре Вы обнаружите, что это резко ухудшает вашу ситуацию - слишком много комментариев делают код больше и хуже читаемым. Некоторые говорят, что хорошо написанную функцию должно быть видно сразу.
Хороший внимательный разработчик делит код (или, точнее, задачу) на хорошо изолированные части и кодирует каждую из них в виде функции.
Это значительно упрощает работу программы, поскольку каждый фрагмент кода можно кодировать и тестировать отдельно. Описанный здесь процесс часто называют декомпозицией.
Теперь мы можем сформулировать второе условие: если фрагмент кода становится настолько большим, что его чтение и понимание могут вызывать проблемы, подумайте о том, чтобы разделить его на отдельные, более мелкие задачи и реализовать каждую из них в виде отдельной функции..
Эта декомпозиция продолжается до тех пор, пока вы не получите набор коротких функций, простых для понимания и тестирования.