2013-05-05 5 views
1

En C, vous pouvez faire quelque chose comme ceci:extraits de code C comme définition javaScript

#define NESTEDFOR(i,j,n) for(i=0; i<n; i++) for(j=0; j<n; j++) 

, vous pouvez utiliser NESTEDFOR(x,y,200) pour gagner du temps, car il sera remplacé par for(x=0; x<200; x++) for(y=0; y<200; y++)

Je suppose il n'y a aucun moyen de le faire en JavaScript, car c'est un langage interprété, mais je ne suis pas sûr.

Y at-il un moyen de le faire en JavaScript?

+1

Il est Il est vrai que vous pouvez faire des choses horribles comme celle-ci en C, mais je ne suis pas d'accord qu'ils gagnent du temps, et en général ce genre de chose n'est pas vraiment recommandé. –

+2

Eh bien, vous pouvez définir des fonctions pour l'abstraire. Ce n'est pas différent. – Joseph

Répondre

2

Techniquement, ce n'est pas réellement C non plus - c'est le langage macro cpp. Vous pouvez configurer votre système pour utiliser le processeur cpp sur votre Javascript mais beaucoup ici considéreraient qu'un acte de grand mal. Je fais ça pour tout mon code Javascript.

3

JavaScript ne supporte pas d'équivalent exact, mais vous pouvez le définir comme un itérateur - semblable à iterator methods for Arrays:

function nestedFor(n, fn) { 
    for (var i = 0; i < n; i++) { 
     for (var j = 0; j < n; j++) { 
      if (false === fn(i, j)) { 
       return; 
      } 
     } 
    } 
} 

nestedFor(200, function (i, j) { 
    // etc. 
    // `return false` to stop looping 
}); 

En outre, une option pour une validation argument:

function nestedFor(n, fn) { 
    if (typeof n !== 'number' || !isFinite(n)) { 
     throw new TypeError('Invalid argument: Expected a finite number.'); 
    } 
    if (typeof fn !== 'function') { 
     throw new TypeError('Invalid argument: Expected a function.'); 
    } 

    // etc. 
} 
+1

Je pense que vous devriez ajouter un test pour vous assurer que 'fn' est fonctionnel avant de démarrer les boucles. –

+1

@ Mohamed-Ted Oui, il y a beaucoup de choses à ajouter. Il devrait probablement vérifier que 'n' est un' Number' au moins, et peut-être qu'il est positif (ou s'ajuster pour supporter la décrémentation) et n'est pas 'Infinity' ou' NaN'. Mais, essayait juste de montrer la forme la plus simple et la garder près des bribes dans la question. –

Questions connexes