Ho visto questa domanda che mostra che è impossibile da programmare determinare se una funzione javascript è pura, ma a volte è possibile affermare che una funzione è pura, quindi qualcosa come ...
function sq_a(x){ return x * x; }; // no side effects, all variables local
function sq_b(x){ return pow(x, 2); }; // if 'pow' is pure, this function is pure
function sq_c(x){ return mathlib.pow(x, 2); }; // not pure, because mathlib.pow could be changed
function definitelyPure(fn){
if(/* criteria to check if we can know for sure fn is pure */){
return true;
} else {
return false;
}
}
function isPure(fn){
if(/* fn is pure */){
return 0;
} else if(/* fn might be pure */) {
return -1;
} else { // fn is not pure
return 1;
}
}
definitelyPure(sq_a); // true
definitelyPure(sq_b); // false
definitelyPure(sq_c); // false
isPure(sq_a); // 0
isPure(sq_b); // -1
isPure(sq_c); // 1
Chiarimento:
So che non è possibile determinare se la funzione javascript qualsiasi sia pura come risposta in relazione alla domanda, ma sto chiedendo se è possibile affermare in modo programmatico la purezza delle funzioni alcune , come in: mi aspetto che sia possibile ad esempio sq_a
utilizzare alcune analisi del codice, ma capisco che non sia possibile per sq_b
.
Sono interessato a sapere se ci sono strumenti là fuori per fare questo già, e quali criteri determinano se è possibile dichiarare programmaticamente una funzione come pura, sconosciuta o impura.