>  기사  >  백엔드 개발  >  If 문이 없는 프로그래밍 예제

If 문이 없는 프로그래밍 예제

小云云
小云云원래의
2018-02-01 14:27:442085검색

이제부터 비즈니스 구현 시 if 문을 사용하지 마세요.

if를 사용하지 않으면 어떤 이점이 있는지 궁금하시죠? 글쎄요~, 어쩌면 뚜렷한 이점이 없을 수도 있습니다. 문제를 해결하기 위해 사고 방식을 바꾸는 것뿐입니다. if-else에는 아무런 문제가 없지만 경우에 따라 if-else가 너무 많으면 코드 읽기가 어려워질 수 있습니다. 다음은 신비감을 느끼는 데 도움이 되는 몇 가지 예입니다.

코딩 팁: If 문 없이 코딩해 보세요

If 문이 없는 프로그래밍 예제

과제 #1: 숫자 배열에 홀수가 몇 개 있는지 세어보세요.

정수형 배열이 주어지면, if 문에 있는 홀수 개수를 세어보세요. array

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

if 구현

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

Non-if 구현

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

참고: 위의 두 예에서 forEach는 원래 배열을 변경하며 메서드는 변수이므로 현재 함수형 프로그래밍을 위반합니다. 불변 개념에 대해 걱정하지 마세요. 이 개념은 이 기사의 초점이 아닙니다. 두 가지 예를 비교하면 if 문의 구현이 더 호환될 수 있으며 배열 요소가 십진수인 상황에 적응할 수 있습니다. 배열 요소가 부동 소수점 유형인 경우 두 번째 예는 제대로 작동하지 않습니다. 可变的,违背了当下所提倡的函数式编程immutable理念,不用在意,不是本文关注点。两个例子比较而言,if语句的实现可能更具兼容性,可以适应于数组元素是小数的情况。若数组元素为浮点类型,第二个例子就无法正常使用。

Challenge #2: 判断一个日期是周末还是工作日

实现一个函数,日期对象 new Date()作为输入,根据不同日期返回当天是工作日还是周末

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()));

非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()));

有没有注意到,if语句中的数字代表哪天是周末,判定条件分布的较为零散,我们需要做的是将数字和周末或工作日类型对应起来,如例子2,可以使用一个对象或者map来存储对应关系。

上述两个例子对比,可以明显看出非if代码实现具有更好的可读性和扩展性

Challenge #3: The doubler function (here be dragons),翻译不出来~尬~

实现一个doubler函数,根据输入不同,做如下处理:

  1. 若输入是number类型, 做翻倍处理(5 => 10, -10 => -20)

  2. 若输入是string类型,重复每个字符('hello' => 'hheelloo')

  3. 若输入是function类型,调用执行两次函数

  4. 若输入是array类型,对数组的每个元素做doubler处理

  5. 若输入是object类型,对对象的每个属性做doubler处理

switch实现

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');
  }),
);

switch实现

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');
  }),
);

和Challenge #2类似,将条件值聚合在一起做统一处理。

总结

if-else的判断条件较多时,将条件做集中处理(用object存储其对应关系--条件做key,处理做value)。好处是增删某个条件变得容易,代码更加可读,提倡使用key-value对应来取代一部分的if-else

도전 #2: 날짜가 주말인지 근무일인지 확인


날짜 개체 new Date()를 입력으로 사용하고 해당 날짜가 인지 여부를 반환하는 함수를 구현하세요. 다른 날짜에 따른 근무일 >아직 주말입니다.

if 구현rrreeeNon-if 구현

rrreee

if 문의 숫자가 어느 날이 주말인지 나타내고, 판단 조건의 분포가 상대적으로 분산되어 있다는 사실을 알고 계셨나요? 우리가 해야 할 일은 숫자를 결합하는 것입니다. 주말 또는 주중 유형에 대응하려면 예제 2에서와 같이 객체나 지도를 사용하여 해당 관계를 저장할 수 있습니다. 위의 두 예를 비교하면 non-if 코드 구현이 더 나은 가독성과 확장성을 갖고 있음을 확실히 알 수 있습니다.

도전 #3: doubler 함수(여기서는 용이 있습니다), 번역은 다음과 같습니다. 나오지 마세요~어색하지~더블러 기능을 구현하고 다양한 입력에 따라 다음 처리를 수행합니다.

  1. 🎜입력이 number 유형인 경우 , 이중 처리(5 => 10, -10 => -20)🎜
  2. 🎜입력이 string 유형인 경우 각 문자를 반복합니다. ('hello' => ; 'hheelloo')🎜
  3. 🎜입력이 함수 유형인 경우 함수를 두 번 호출하고 실행하세요🎜
  4. 🎜 입력이 배열 유형인 경우 배열의 각 요소에 대해 더블러 처리를 수행합니다🎜
  5. 🎜입력이 객체 유형, 개체 코드의 각 속성에 대해 <code>doubler 처리 수행>doubler 핸들 🎜
🎜switch 구현 🎜rrreee 🎜비스위치 구현 🎜rrreee🎜은 챌린지 #2와 유사하며, 통합 처리를 위해 조건 값이 함께 집계됩니다. 🎜🎜요약🎜🎜if-else에 대한 판단 조건이 여러 개인 경우 조건을 중앙에서 처리합니다. (객체를 사용하여 해당 관계를 저장합니다. 조건은 키로 사용되며 처리는 다음과 같이 사용됩니다. 값). 장점은 특정 조건을 추가하거나 삭제하기가 더 쉬워지고 코드의 가독성이 높아진다는 것입니다. if-else키-값 대응을 사용하는 것이 좋습니다. /code> 조건부 판단. 🎜🎜관련 권장 사항: 🎜🎜🎜🎜if 문의 현재 상황, 전망 및 기회에 대해 이야기해 보세요.🎜🎜🎜🎜PHP를 기반으로 하는 elseif 문의 코드 예제 요약🎜🎜🎜🎜SQL의 if 문에 대한 자세한 설명🎜🎜

위 내용은 If 문이 없는 프로그래밍 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.