/
Программирование
/
Курс PHP
/

Детерминированность

PHP: Детерминированность

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

Двое сидят и разговаривают о детерминированной функции

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

<?php

strlen('hexlet'); // 6
strlen('hexlet'); // 6

strlen('wow'); // 3
strlen('wow'); // 3

Функцию strlen() можно вызывать бесконечно с одним и тем же аргументом, и она всегда вернет один и тот же результат.

Недетерминированные функции

К противоположному типу относятся недетерминированные функции. Они могут возвращать разные результаты при одинаковых входных данных или при их отсутствии (функции без параметров). Хорошим примером служит функция rand(), которая возвращает случайное число:

<?php

rand(); // 827606195
rand(); // 635369726

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

Детерминированная:          Недетерминированная:
strlen('abc') → всегда 3    rand() → 827606195
strlen('abc') → всегда 3    rand() → 635369726
strlen('abc') → всегда 3    rand() → 142503087

Почему это важно

Детерминированность влияет на то, как мы работаем с функциями.

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

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

Задание

В настольной игре бросают кубик и получают число от 0 до 10. Напишите программу, которая моделирует этот бросок: выводит на экран случайное целое число в диапазоне от 0 до 10. Для этой задачи вам понадобится функция rand(), которая может принимать два числа: начальное и конечное значение диапазона.

Попробуйте решить это задание в одну строчку.

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются