У функций внутри каждого языка программирования есть фундаментальные свойства. Эти свойства помогают прогнозировать поведение функций, способы их тестирования и место использования. К таким свойствам относится детерминированность.
В этом уроке разберемся с детерминированной функцией. Мы узнаем, зачем эта функция выдает результат, который никак не применяется.
Детерминированная функция возвращает один и тот же результат для одинаковых входных параметров. Например, детерминированной можно назвать функцию, которая считает количество символов:
len('hexlet') # 6
len('hexlet') # 6
len('wow') # 3
len('wow') # 3
Можно бесконечно вызывать эту функцию и передавать туда значение 'hexlet'
— она всегда вернет 6
.
Посмотрим и обратный случай — недетерминированные функции. Например, к этой категории относится функция, которая возвращает случайное число: у одного и того же входа мы получим всегда разный результат. Если хотя бы один из миллиона вызовов функция вернет другой результат, она считается недетерминированной. Это работает и в том случае, если параметры не принимаются:
# Синтаксис импортов будет изучаться позже на Хекслете
from random import random
# Функция, которая возвращает случайное число
random() # 0.09856613113197676
random() # 0.8839904367241888
Детерминированность — это важное свойство функции, так как она влияет на многие аспекты. Например, детерминированные функции удобны в работе — их легко оптимизировать и тестировать. Если возможно, то лучше сделать функцию детерминированной.
Для примера рассмотрим одну необычную функцию — она возвращает результат, с которым ничего нельзя сделать.
В Python есть функция print()
, которая принимает на вход данные любого типа и выводит их на экран. Она вызывает побочный эффект — из-за выполнения функции запускается действие, которое изменяет среду выполнения. Еще побочные эффекты вызывают любые сетевые взаимодействия, чтение и запись файлов, вывод информации на экран или печать на принтере.
Побочные эффекты — один из основных источников проблем и ошибок в программных системах. Такой код сложнее тестировать, снижается его надежность. При этом без побочных эффектов программирование не имеет смысла. Без них было бы невозможно получить результат работы программы: например, записать в базу, вывести на экран и отправить по сети.
Побочными эффектами print()
отличается от других функций, которые также принимают на вход данные любого типа. Другие функции возвращают значения, которые можно дальше использовать. В отличие от них, функция print()
выводит такой результат, с которым ничего нельзя сделать. Вывод на экран и возврат значения из функции — разные и независимые операции.
В этом уроке мы познакомились с побочными эффектами на базовом уровне. Но чтобы эти знания действительно помогали строить качественные программы, нужно углубляться и изучать нюансы. Если вас заинтересовала работа с побочными эффектами, вы сможете изучить их подробнее в других курсах на Хекслете.
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт