Можно ли с помощью javascript определить, является ли функция javascript «чистой»?
Функция называется чистой, когда она ведет себя предсказуемым образом, в том смысле, что для каждого x функция всегда будет возвращать одно и то же связанное значение y (то есть однозначную карту).
Например, чистая функция:
function pure(x) {
return x * x;
}
И нечистые:
var x = 0;
function impure(y) {
x = x + y;
return x++;
}
Хотя здесь легко сказать, что impure(0) !== impure(0)
, это не так очевидно с такой функцией, как:
function weird(x) {
if (x === "specificThing") {
return false;
} else {
return true;
}
}
or
var count = 0;
function surprise(x) {
count++;
if (count === 10e10 && x === 0) {
return true;
} else {
return false;
}
}
Другой способ спросить об этом: можно ли с помощью javascript определить, является ли функция javascript «нечистой»?
Теоретически это может быть возможно или невозможно, но практически, какие шаги можно предпринять, чтобы начать это определять, возможно, учитывая набор ограничений или предположений?
Другое определение чистоты включает предупреждение о том, что нелокальные переменные нельзя изменять, но я бы хотел рассмотреть это отдельной проблемой. В этом случае мы рассматриваем функции, которые отображают согласованные входные данные в согласованные выходы.
Math.random()
), а затем продолжайте движение вверх. Конечно, было бы интересно посмотреть, написал ли кто-нибудь инструмент для этого. - person thetoast   schedule 25.04.2015count
в вашейsurprise
функции. - person Barmar   schedule 25.04.2015count
был в практически нерабочей строке кода. Или, например, если count ++; все еще был там, но был удален из оператора if. - person mxiong   schedule 25.04.2015n()
, которая когда-нибудь во время выполнения называетсяm()
, аn()
переопределяется на другую функцию.n()
чистота в этом случае изменчива, и существует множество вариантов использования функций, вызывающих другие функции. - person jdphenix   schedule 25.04.2015if
, где одна ветвь чистая, другая нечистая, а условиеif
- находимся ли мы в первой секунде столетия. Вы считаете это чистым или нечистым? - person Barmar   schedule 25.04.2015