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(), которая может принимать два числа: начальное и конечное значение диапазона.
Попробуйте решить это задание в одну строчку.
Полезное
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(), которая может принимать два числа: начальное и конечное значение диапазона.
Попробуйте решить это задание в одну строчку.
Полезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\CallingFunctions\Deterministic;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$randomRoll = $this->solutionOutput;
$this->assertThat(
$randomRoll,
$this->logicalAnd(
$this->greaterThanOrEqual(0),
$this->lessThanOrEqual(10)
)
);
}
}Решение учителя откроется через:
20:00
