“répéter” structure en Java

Je suis l'enseignement de la programmation pour les débutants (à partir de 12 à 15 ans) et l'un des choix que nous avons faits (parce que c'était naturel en Python) était d'enseigner la notion de "répétition d'une action" avant la notion de variables.

Nous warted en Python avec

for loop in range(10):

sans parler des variables de tableaux et en C++ avec

#define repeat(nb) for(int _loop = 0 ; _loop < (nb) ; _loop++)

L'idée est de cacher la complexité d'un classique de la boucle afin d'insister sur la "répétition" de la partie. Nous ne sommes pas en se cachant des élèves sur le fait que "répéter(10)" n'est pas une partie de C++,
c'est juste une manière de simplifier l'apprentissage.

En Pascal on ne peut pas faire beaucoup plus que

for loop := 1 to 10 do

mais c'est ok parce que sa n'est pas difficile à retenir.

Je cherchais quelque chose de semblable en Java et j'ai constaté que :

import java.util.List;
import java.util.AbstractList;

class Range {
    public static List<Integer> size(final int end) {
        return new AbstractList<Integer>() {
            @Override
            public Integer get(int index) {
                return 0 + index;
            }
            @Override
            public int size() {
                return end;
            }
        };
    };
}

public class Main {
     public static void main(String[] argv) {
    for (int loop : Range.size(10)) {
        System.out.println("xx");
    }
    }
}

La

for (int loop : Range.size(10))

est encore plus facile à mémoriser que

for(int loop = 0 ; loop < 10 ; loop++)

mais il y a deux problèmes :

  • deux variables sont nécessaires pour les boucles for imbriquées : je ne pense pas que nous pouvons faire beaucoup parler
  • nous avons mises en garde parce que la variable loop n'est pas utilisé

Voyez-vous une meilleure solution que ce que nous avons ?

Encore une fois, nous ne voulons fournir quelques "outil" au début de la phase pour que les élèves de "répéter", actions, avant de savoir quoi que ce soit à propos de "variables". Nous ne sommes pas cacher que c'est n'est pas dans le langage et après quelques exercices (~80-100) nous demandons à la syntaxe.


Nous avons environ 20 exercices avant l'introduction de variables : certains au sujet de l'impression des textes, mais surtout nous fournir une bibliothèque avec des objets, vous pouvez manipuler (d'où les variables sont cachés dans l'état de l'objet). Vous pouvez penser à la "le logo de la tortue" par exemple. De cette façon, la notion de "boucle" qui peuvent être manipulés et "vu" avant l'introduction explicite des variables et vous pouvez avoir interressant d'exercices très rapide.

Un exemple, en Python, les endroits que vous voulez visiter tous les cas de 10x10 table une fois et une seule fois et ensuite revenir à votre point de départ (coin inférieur gauche) :

from robot import *

top()
for loop in range(4):
   for loop in range(8):
      top()
   right()
   for loop in range(8):
      bottom()
   right()
for loop in range(8):
   top()
right()
for loop in range(9):
   bottom()
for loop in range(9):
   left()

Cet exercice n'est pas facile, mais la syntaxe est très simple et de permettre à l'étudiant de se concentrer sur le "algorithmique" et pas le "langage" de la partie.
Après quelques exercices, les étudiants obtiennent interresse et nous pouvons introduire plus de la syntaxe et de la plus difficile des concepts comme les variables.

Il me semble que la notion de variable est plus fondamental que le concept de la boucle. Une raison quelconque vous ne voulez pas introduire des variables d'abord?
J'ai édité ma question pour vous expliquer un peu plus à propos de nos exercices.
Les Variables de toujours se sentir suffisamment fondamentaux pour moi que je voudrais vraiment suggèrent d'introduire ceux avant boucles. On dirait que vous vous êtes essentiellement en essayant de tourner toutes les autres langues dans le Logo, mais ils ne sont pas.
À mon humble avis de Son mieux pour apprendre aux gens à utiliser la langue de la façon dont il est habituellement utilisé. Une boucle en Java si l'un des la plupart des constructions de base.
Si la langue n'est qu'un outil, alors pourquoi commencer avec Java et de ne pas coller à Pascal par exemple, où tu disais que tu n'avais pas à changer quoi que ce soit ?

OriginalL'auteur Loïc Février | 2012-01-14