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

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

const { reverse } = require('hexlet/string');

reverse('cat'); // tac
reverse('cat'); // tac

Сколько бы раз мы ее не вызывали передавая туда значение 'cat', она всегда вернет 'tac' (хотя технически можно написать ее и по другому, но смысла в этом никакого, а проблем доставит). В свою очередь функция возвращающая случайное число, не является детерминированной, так как для одного и того же входа (даже если он пустой, то есть аргументы не принимаются), мы получаем всегда разный результат. Насколько он разный - не важно, даже если хотя бы один раз из миллиона вызовов вернет что-то другое, эта функция автоматически считается не детерминированной.

const { rand } = require('hexlet/math');

rand(); // 0.234111
rand(); // 0.932342

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

Задание

Санса хочет повесить на свою дверь просьбу, о том чтобы никто не входил без стука. Она попросила Сэма распечатать лист с надписью “СТУЧАТЬ!”. Помогите Сэму перевести слово в верхний регистр используя функцию toUpperCase, которая принимает на вход строку, и возвращает такую же, но со всеми буквами в верхнем регистре. Распечатайте на экран текст записанный в константу text, не забыв перевести его в верхний регистр.

const { toUpperCase } = require('hexlet/string');

console.log(toUpperCase('hello')); // => HELLO

Как вы думаете, что вернет функция toUpperCase если передать ей на вход строку HELLO?


Советы
Определения
  • Детерминированность функции — Для одного и того же входа, всегда один и тот же выход


Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics

Упражнение доступно только авторизованным пользователям.

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