이제부터 비즈니스 구현 시 if 문을 사용하지 마세요.
if를 사용하지 않으면 어떤 이점이 있는지 궁금하시죠? 글쎄요~, 어쩌면 뚜렷한 이점이 없을 수도 있습니다. 문제를 해결하기 위해 사고 방식을 바꾸는 것뿐입니다. if-else에는 아무런 문제가 없지만 경우에 따라 if-else가 너무 많으면 코드 읽기가 어려워질 수 있습니다. 다음은 신비감을 느끼는 데 도움이 되는 몇 가지 예입니다.
코딩 팁: If 문 없이 코딩해 보세요
정수형 배열이 주어지면, 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语句
的实现可能更具兼容性,可以适应于数组元素是小数
的情况。若数组元素为浮点类型,第二个例子就无法正常使用。
实现一个函数,日期对象 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代码
实现具有更好的可读性和扩展性
实现一个doubler函数,根据输入不同,做如下处理:
若输入是number
类型, 做翻倍处理(5 => 10, -10 => -20)
若输入是string
类型,重复每个字符('hello' => 'hheelloo')
若输入是function
类型,调用执行两次函数
若输入是array
类型,对数组的每个元素做doubler
处理
若输入是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
날짜 개체 new Date()
를 입력으로 사용하고 해당 날짜가 인지 여부를 반환하는 함수를 구현하세요. 다른 날짜에 따른 근무일
>아직 주말
입니다.
if 구현rrreeeNon-if 구현
rrreee if 문
의 숫자가 어느 날이 주말인지 나타내고, 판단 조건의 분포가 상대적으로 분산되어 있다는 사실을 알고 계셨나요? 우리가 해야 할 일은 숫자를 결합하는 것입니다. 주말 또는 주중
유형에 대응하려면 예제 2에서와 같이 객체나 지도를 사용하여 해당 관계를 저장할 수 있습니다. 위의 두 예를 비교하면 non-if 코드
구현이 더 나은 가독성과 확장성을 갖고 있음을 확실히 알 수 있습니다.
도전 #3: doubler 함수(여기서는 용이 있습니다), 번역은 다음과 같습니다. 나오지 마세요~어색하지~더블러 기능을 구현하고 다양한 입력에 따라 다음 처리를 수행합니다.
number 유형인 경우
, 이중 처리(5 => 10, -10 => -20)🎜string
유형인 경우 각 문자를 반복합니다. ('hello' => ; 'hheelloo')🎜함수
유형인 경우 함수를 두 번 호출하고 실행하세요🎜배열
유형인 경우 배열의 각 요소에 대해 더블러
처리를 수행합니다🎜객체 유형, 개체 코드의 각 속성에 대해 <code>doubler
처리 수행>doubler 핸들 🎜switch
구현 🎜rrreee 🎜비스위치
구현 🎜rrreee🎜은 챌린지 #2와 유사하며, 통합 처리를 위해 조건 값이 함께 집계됩니다. 🎜🎜요약🎜🎜if-else
에 대한 판단 조건이 여러 개인 경우 조건을 중앙에서 처리합니다. (객체를 사용하여 해당 관계를 저장합니다. 조건은 키로 사용되며 처리는 다음과 같이 사용됩니다. 값). 장점은 특정 조건을 추가하거나 삭제하기가 더 쉬워지고 코드의 가독성이 높아진다는 것입니다. if-else키-값
대응을 사용하는 것이 좋습니다. /code> 조건부 판단. 🎜🎜관련 권장 사항: 🎜🎜🎜🎜if 문의 현재 상황, 전망 및 기회에 대해 이야기해 보세요.🎜🎜🎜🎜PHP를 기반으로 하는 elseif 문의 코드 예제 요약🎜🎜🎜🎜SQL의 if 문에 대한 자세한 설명🎜🎜위 내용은 If 문이 없는 프로그래밍 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!