J'ai supposé que les fonctions pures doivent toujours avoir un type de retour (c'est-à-dire, ne doivent pas être void
) et doivent avoir la même sortie quel que soit l'état de l'objet et que les fonctions Impure changent l'état de l'objet ou affichent l'état de l'objet.
Mais le manuel que j'utilise indique que:
Un accesseur contient généralement une instruction return, mais une méthode qui imprime des informations sur l'état d'un objet peut également être classée en tant qu'accesseur.
Je suis confus. Laquelle est correcte?
MODIFIER
Un peu de clarification, la chose qui me fait demander est cette question:
La dernière question est de " Indiquez le type de fonction utilisé ", et les personnes qui ont fait des commentaires ont indiqué qu'il s'agissait d'une fonction impure en cours d'impression.
Alors, cette fonction est-elle pure ou impure?
Contenu extrait de ce lien
Caractéristiques de la fonction pure:
La valeur de retour des fonctions pures dépend uniquement de ses arguments Ainsi, si vous appelez les fonctions pures avec le même jeu d'arguments, vous obtiendrez toujours les mêmes valeurs de retour.
Ils n'ont pas d'effets secondaires comme les appels réseau ou base de données
Caractéristiques des fonctions impures
La valeur de retour des fonctions impures ne dépend pas uniquement de ses arguments Par conséquent, si vous appelez les fonctions impures avec le même jeu d'arguments, vous pouvez obtenir les différentes valeurs de retour Par exemple, Math .random (), Date.now ()
Ils peuvent avoir des effets secondaires comme des appels réseau ou de base de données
Ils peuvent modifier les arguments qui leur sont transmis
function impureFunc(value){
return Math.random() * value;
}
function pureFunc(value){
return value * value;
}
var impureOutput = [];
for(var i = 0; i < 5; i++){
impureOutput.Push(impureFunc(5));
}
var pureOutput = [];
for(var i = 0; i < 5; i++){
pureOutput.Push(pureFunc(5));
}
console.log("Impure result: " + impureOutput); // result is inconsistent however input is same.
console.log("Pure result: " + pureOutput); // result is consistent with same input
De Wikipedia - une fonction peut être décrite comme une fonction pure si ces deux déclarations concernant la fonction sont:
Par conséquent, si l'une des déclarations est fausse par rapport à votre code, elle est impure.
Mu. Vous semblez supposer qu'un accesseur est une fonction pure par définition. Ce n'est pas nécessairement le cas - un accesseur (même un get
- accesseur renvoyant une valeur) peut être impur, tel que la méthode get
de LinkedHashMap
en mode de commande d'accès (qui déplace l'entrée demandée à la dernière position dans l'ordre d'itération).
Les deux instructions sont correctes.
Lorsque vous créez des méthodes pour obtenir une valeur, appelées ACCESSOR METHODS
Ex:
public String getName(){
return this.name;
}
et pour la valeur de réglage, nous utilisons des méthodes avecVOIDqui s'appellent MUTATOR METHODS
Ex:
public void setName(String n){
this.name=n;
}
Les fonctions impures ou les méthodes de mutation modifient l'état de l'objet et les valeurs stockées dans les variables d'instance.