Maison  >  Article  >  développement back-end  >  Exemples de programmation sans instructions If

Exemples de programmation sans instructions If

小云云
小云云original
2018-02-01 14:27:442044parcourir

À partir de maintenant, essayez d'éviter d'utiliser les instructions if pour mettre en œuvre notre activité

Vous vous demandez peut-être quels sont les avantages de ne pas utiliser if ? Eh bien ~, peut-être qu'il n'y a pas d'avantage évident, c'est juste une façon différente de penser pour résoudre le problème. Il n'y a rien de mal avec if-else, mais dans certains cas, un grand nombre de if-else peut rendre le code moins lisible. Vous trouverez ci-dessous quelques exemples pour vous aider à ressentir le mystère.

Conseil de codage : essayez de coder sans instructions If

Exemples de programmation sans instructions If

Défi n°1 : Comptez combien de nombres impairs il y a dans le tableau numérique

Étant donné un tableau de type entier, comptez le nombre de nombres impairs dans le tableau

const arrayOfIntegers = [1, 4, 5, 9, 0, -1, 5];

si implémentation

let counter = 0;
arrayOfIntegers.forEach((integer) => {
  const remainder = Math.abs(integer % 2);
  if (remainder === 1) {
    counter++;
  }
});
console.log(counter);

implémentation non-if

let counter = 0;
arrayOfIntegers.forEach((integer) => {
  const remainder = Math.abs(integer % 2);
  // 偶数除2的余数为零,奇数的余数为一
  counter += remainder;
});
console.log(counter);

Remarque : dans les deux exemples ci-dessus, forEach modifiera le tableau d'origine et la méthode est 可变的, ce qui viole le concept actuel de programmation fonctionnelle immutable. objet de cet article. En comparant les deux exemples, l'implémentation de if语句 peut être plus compatible et peut être adaptée à la situation où l'élément du tableau est 小数. Si les éléments du tableau sont de type virgule flottante, le deuxième exemple ne fonctionnera pas correctement.

Défi n°2 : Déterminer si une date est un week-end ou un jour ouvrable

implémente une fonction qui prend un objet date new Date() en entrée et renvoie si le jour en cours est 工作日 ou 周末 en fonction de dates différentes.

implémentation if

const weekendOrWeekday = inputDate => {
  const day = inputDate.getDay();
  if (day === 0 || day === 6) {
    return 'weekend';
  }

  return 'weekday';
  // Or, for ternary fans:
  // return (day === 0 || day === 6) ? 'weekend' : 'weekday';
};
console.log(weekendOrWeekday(new Date()));

implémentation non-if

const weekendOrWeekday = (inputDate) => {
  const day = inputDate.getDay();
  return weekendOrWeekday.labels[day] ||
         weekendOrWeekday.labels['default'];
};
weekendOrWeekday.labels = {
  0: 'weekend',
  6: 'weekend',
  default: 'weekday'
};
console.log(weekendOrWeekday(new Date()));

Avez-vous remarqué que le nombre entre if语句 représente quel jour est le week-end et détermine le conditionnel distribution C'est plus fragmenté. Ce que nous devons faire est de faire correspondre les nombres aux types 周末或工作日 Comme dans l'exemple 2, vous pouvez utiliser un objet ou une carte pour stocker la relation correspondante.

En comparant les deux exemples ci-dessus, on voit clairement que l'implémentation 非if代码 a une meilleure lisibilité et évolutivité

Défi n°3 : La fonction doubleur (ici les dragons), traduction Don' t come out~Awkward~

implémente une fonction de doubleur, et effectue le traitement suivant en fonction de différentes entrées :

  1. Si l'entrée est de type number, faites double traitement (5 => 10, -10 => -20)

  2. Si l'entrée est de type string, répétez chaque caractère (« bonjour » => ' hheelloo')

  3. Si l'entrée est de type function, appelez et exécutez la fonction deux fois

  4. Si l'entrée est de type array, faites ceci pour chaque élément du tableau doublerTraitement

  5. Si l'entrée est de type object, effectuez un doublertraitement sur chaque attribut de l'objet

switch La mise en œuvre de

const doubler = (input) => {
  switch (typeof input) {
    case 'number':
      return input + input;
    case 'string':
      return input
        .split('')
        .map(letter => letter + letter)
        .join('');
    case 'object':
      Object.keys(input)
            .map(key => (input[key] = doubler(input[key])));
      return input;
    case 'function':
      input();
      input();
  }
};
console.log(doubler(-10));
console.log(doubler('hey'));
console.log(doubler([5, 'hello']));
console.log(doubler({ a: 5, b: 'hello' }));
console.log(
  doubler(function() {
    console.log('call-me');
  }),
);

non-switch mise en œuvre de

const doubler = (input) => {
  return doubler.operationsByType[typeof input](input);
};
doubler.operationsByType = {
  number: (input) => input + input,
  string: (input) =>
    input
      .split('')
      .map((letter) => letter + letter)
      .join(''),
  function: (input) => {
    input();
    input();
  },
  object: (input) => {
    Object.keys(input)
          .map((key) => (input[key] = doubler(input[key])));
    return input;
  },
};
console.log(doubler(-10));
console.log(doubler('hey'));
console.log(doubler([5, 'hello']));
console.log(doubler({ a: 5, b: 'hello' }));
console.log(
  doubler(function() {
    console.log('call-me');
  }),
);

est similaire au défi n°2, agrégeant les valeurs de condition ​​ensemble pour un traitement unifié.

Résumé

Lorsqu'il existe de nombreuses conditions de jugement pour if-else, les conditions sont traitées de manière centralisée (utilisez des objets pour stocker leurs relations correspondantes - les conditions sont utilisées comme clés et le traitement est utilisé comme valeurs). L'avantage est qu'il devient plus facile d'ajouter ou de supprimer une certaine condition, et le code est plus lisible. Il est recommandé d'utiliser la correspondance key-value pour remplacer une partie du if-else jugement conditionnel.

Recommandations associées :

Parlez de la situation actuelle, des perspectives et des opportunités des déclarations if

Le code de la déclaration elseif basé sur PHP Résumé des exemples

Explication détaillée de l'instruction if en SQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn