[JAVA] Utilisez-vous l'instruction for après tout? Utilisez-vous l'instruction while? Utilisation correcte des instructions for et while

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.

Résumé

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.

Exemple extrême

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éthodenext retourne un élément à chaque fois qu'elle est exécutée, et retourne ʻundefined quand tout est terminé.

Recommended Posts

Utilisez-vous l'instruction for après tout? Utilisez-vous l'instruction while? Utilisation correcte des instructions for et while
Comparez la vitesse de l'instruction for et de l'instruction for étendue.
De quoi avez-vous besoin à la fin pour créer une application Web en utilisant Java? Expliquer le mécanisme et ce qui est nécessaire pour apprendre
Utilisez redirect_to et effectuez un rendu correctement
Utilisation correcte de Mockito et PowerMock
Si vous souhaitez simuler une méthode dans RSpec, vous devez utiliser la méthode allow pour mock et la méthode singleton.
[Introduction à Ruby] À propos du rôle de true et break in the while statement
(Déterminez en 1 minute) Comment utiliser vide?, Vide? Et présent?
Utilisation correcte de l'interface et de la classe abstraite
Je veux que vous utilisiez Enum # name () pour la clé de SharedPreference
Avez-vous besoin d'une implémentation de Java compatible avec la mémoire?
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
Jusqu'à l'utilisation de Spring Data et JPA Part 2
À propos de l'ajout de variables dans le traitement itératif dans l'instruction while
Sortie d'une liste de paramètres cron pour tous les utilisateurs.
Jusqu'à l'utilisation de Spring Data et JPA Part 1
Que dois-je faire après janvier 2019 concernant le problème du paiement Java et le problème de la fin du support Java 8?
# 3 [Note] instruction do ~ while
Le nième et le n + 1er caractères d'une chaîne Ruby
Utilisation pratique de Map que vous ne connaissez pas de manière inattendue
L'idée de C # (expression lambda, pour phrase) à mâcher
[AWS / S3] Après tout, comment télécharger plusieurs fichiers?
Viser une compréhension de base du flux de traitement récursif
Que faire si la commande rails devient inutilisable
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique