Il semble que ce soit juste maintenant, mais quand j'ai commencé à programmer, je suis sûr que tout le monde se demandait comment utiliser correctement les instructions for et while.
Il semble que la littérature générale dans le monde dit souvent que ** for statement est utilisé lorsque le nombre de répétitions est clair **.
Cependant, pour moi, cette explication ne m'est pas venue à l'esprit.
Alors que j'écrivais le programme aujourd'hui, j'ai finalement trouvé un point en moi sur cette différence, donc je l'enregistre ici.
Décrit ci-dessous en JavaScript.
class Iterator {
index = 0;
constructor(list) {
this.list = list;
}
next() {
return this.list[this.index++];
}
}
const iterator = new Iterator([1, 2, 3, 4, 5]);
Préparez la classe ʻIterator` avec l'implémentation ci-dessus (en fait, vous pouvez imaginer une liste de fichiers, etc.). Maintenant, supposons que vous vouliez décrire le processus de comptage du nombre d'éléments lors de la sortie de tous les éléments. Au départ, j'ai écrit le code suivant [^ 1].
let count = 0, item;
while (item = iterator.next()) {
console.log(item);
count++;
}
console.log(`Quantité: ${count}`);
Pour rendre le code plus lisible, essayez de le réécrire comme suit:
let count, item;
for (count = 0; item = iterator.next(); count++) {
console.log(item);
}
console.log(`Quantité: ${count}`);
Je l'ai réécrit ... Ce code est certainement plus court, mais ne semble-t-il pas très difficile à lire?
La raison en est peut-être que nous
for (A; B; C) {}
Inconsciemment quand j'ai vu la phrase
For A, while B, do C.
En d'autres termes, je pense que c'est parce que j'ai lu ** A, C pendant B **. Pour cette raison, lorsque la formule actuelle est appliquée ici, cela me fait ressentir un fort sentiment d'inconfort si elle ne tient pas comme phrase.
Si vous voulez aller un peu plus loin, vous devez connaître l'instruction A, c'est-à-dire la formule d'initialisation **. Tant que le mot «for» (about =) est utilisé, B, C et les phrases du bloc sont liés par cette partie A même si vous ne l'aimez pas.
La chose étrange à propos de l'exemple d'instruction for ci-dessus est que l'expression de condition de continuation et l'instruction dans le bloc n'ont rien à voir avec count
, même si l'expression d'initialisation est utilisée pour initialiser la variable count
. C'était parce qu'il n'y avait rien de tel.
Parmi les répétitions qui peuvent être exprimées par l'instruction while, celles qui devraient être exprimées par l'instruction for
Je pense que l'on peut dire que cela satisfait.
Pour le dire autrement, tant que les règles ci-dessus sont respectées, il y a des choses qui peuvent être écrites en utilisant l'instruction for même si le "nombre de répétitions est connu" généralement connu n'est pas respecté. Qu'en est-il de l'exemple ci-dessous?
class Iterator {
index = 0;
constructor(list) {
this.list = list;
}
get currentItem() {
return this.list[this.index];
}
next() {
this.index++;
}
}
let count = 0;
for (
const iterator = new Iterator([1, 2, 3, 4, 5]);
iterator.currentItem;
iterator.next()
) {
console.log(iterator.currentItem);
count++;
}
console.log(`Quantité: ${count}`);
Cela ne semble pas trop étrange, non? ?? ??
[^ 1]: En JavaScript, si un index en dehors de la plage du tableau est accédé, aucune erreur ne se produira et une valeur erronée de ʻundefinedsera renvoyée. Pour cette raison, la méthode
next retourne un élément à chaque fois qu'elle est exécutée, et retourne ʻundefined
quand tout est terminé.
Recommended Posts