나의 몇 년 전 신병 훈련소 알고리즘을 재구성하다
14707 단어 codenewbietutorialwebdevjavascript
이것은 너의 중학교 연감 사진을 보는 것 같다.그것은 여전히 너지만, 좀 젊고, 그다지 선진적이지 않고, 더욱 어색한 버전이다.옛 코드는 그 사진들 속의 푸카 조개 목걸이였다.
그러나 역사책에 새겨진 사진과 달리 코드가 있으면 과거로 돌아가 최적화할 수 있다.우리는 과거의 자아를 개선할 수 있다. 더 좋은 것은 그 속에서 배우는 것이다.나는 신병 훈련소에서 처음 공부할 때 했던 자바스크립트 연습으로 돌아가기로 했다.그것들은 반전 문자열과 같은 기본 알고리즘일 뿐이지만, 내가 무엇을 해서 그것을 개선할 수 있는지, 경험이 더 풍부한 개발자로서 내가 그것을 어떻게 최적화할 수 있는지 보고 싶다.
낡은 이태리 국수를 보고, 우리가 이 유행이 지난 코드를 어떻게 개선하는지 보자.
만약 다른 재구성 방법이 있다면, 아래의 평론에 남겨 주십시오.나도 다른 사람들이 나의 코드를 어떻게 최적화하는지 보고 싶다.
모음
계산법
// Define a function named isVowel that takes one argument
// letter (string)
//
// If the letter is a vowel
// Return true
// Otherwise
// Return false
//
// Treat 'y' as a consonant.
오리지널
const isVowel = (letter) => {
var checkLetter = letter.toUpperCase();
switch (checkLetter) {
case 'A':
return true;
break;
case 'E':
return true;
break;
case 'I':
return true;
break;
case 'O':
return true;
break;
case 'U':
return true;
break;
default:
return false;
break;
}
};
재구성
절대적인 공포, 변화된 표현.그들은 당연히 자신의 위치가 있지만, 이런 상황에서 이 문제는 틀림없이 정규 표현식으로 검사할 수 있을 것이다.나는 내가 항상 문법을 찾아야 한다는 것을 알고, 나도 이 문법을 찾았지만, 이곳의 관건은 코드를 실행하는 더 좋고 효과적인 방법이 있다는 것을 아는 것이다.문법을 찾는 것이 매우 좋아서 무엇을 찾아야 하는지 아는 것이 관건이다.
const isVowel = (letter) => {
return /^[aeiou]$/i.test(letter);
};
또는 정규 표현식에 반대하고 문법을 보기 싫으면, 수조나 문자열로 분해하는 방법을 고려하십시오.예를 들어, 우리는 알파벳을 하나의 그룹에 넣을 수 있으며, 그 그룹에서 이 값을 찾았는지 확인하기만 하면 된다.const isVowel = (letter) => {
return ['a', 'e', 'i', 'o', 'u'].some((vowel) => vowel === letter);
};
2. - 세 개 중에 제일 큰 거.
계산법
// Define a function named largestOfThree which takes three arguments
// value1 (number)
// value2 (number)
// value3 (number)
//
// Return the largest argument by value
오리지널
const largestOfThree = (value1, value2, value3) => {
if (value1 > value2 && value1 > value3) {
return value1;
} else if (value2 > value1 && value2 > value3) {
return value2;
} else {
return value3;
}
};
재구성
위에서 말한 바와 같이 나는 일련의if와if-else 문장이야말로 정확한 선택이라고 생각한다.누가 또 나를 나무랄 수 있겠는가, 내 중학교 버켄스토크처럼, 그것은 효과가 있었다.하지만 우리는 더 잘할 수 있다.
나의 오래된 코드의 주요 문제는 숫자만 사용하고, 나는 반드시 모든 비교를 해야 한다는 것이다.나는 언어와 프로그래밍이 나를 위해 일을 하게 하는 것이 아니라 모든 사례를 꼼꼼히 고려해야 한다.
재구성할 때, 우리는 우리의 함수가 확장되어야 하는지도 고려해야 한다.이런 상황에서 만약 우리가 네 개의 값이나 4000의 값을 가지고 있다면.나는 다른 4000개의 문장이 이상적이라고 생각하지 않는다.JavaScript를 통해 작업을 완료할 수 있습니다.우리가 시작할 때 우리가 이용할 수 있는 대량의 방법(쌍관어)에 익숙하지 않은 경우가 많다.일반적인 상황에서 연구는 일련의if-else 문장보다 더 좋은 결과를 얻을 수 있다.
const largestOfThree = (value1, value2, value3) => {
return Math.max(value1, value2, value3);
};
2-Longestoftree
계산법
//Define a function named longestOfThree which takes three arguments
// value1 (string)
// value2 (string)
// value3 (string)
//
// Return the longest argument by length
오리지널
const longestOfThree = (value1, value2, value3) => {
if (value1.length > value2.length && value1.length > value3.length) {
return value1;
} else if (value2.length > value1.length && value2.length > value3.length) {
return value2;
} else {
return value3;
}
};
재구성
이런 상황에서, 나의if-else 문장은 아마도 최악의 일이 아닐 것이다.
그러나 우리는 또다시 규모 문제에 부딪혔다.견본의 양은 사용하기 쉬우나 확장할 수 없습니다.내가 몇 백 개면?
나는 효율을 높이고 더 많은 투자를 허용하는 방법을 찾아야 한다.이런 상황에서 한 그룹의 대상이 더 의미가 있을 수 있다.이 특정한 알고리즘을 해결하려면 더 짧지 않지만 데이터 집합이 증가함에 따라 더 큰 유연성과 미래의 증명을 허용할 것이다.
const longestOfThree = (...arguments) => {
const createObject = (str) => {
return { string: str, strLength: str.length };
};
const sortedArguments = arguments
.map((arg) => createObject(arg))
.sort((a, b) => b.strLength - a.strLength);
return sortedArguments[0].string;
};
이 예에서는 길이가 같지만, 매개 변수를 더 추가하면 신축성이 더 좋습니다.우리는 우리가 받아들이고 있는 세 개의 파라미터가 아니라 모든 수량의 파라미터를 허용하기 위해 그것을 재구성했다.또한, 이 항목들을 교체함으로써, 우리는 그것을 축소하고,if와if-else 문장을 제거할 수 있다.우리는 틀림없이 그것을 더욱 재구성할 수 있는 다른 방법이 있을 것이다.우리는 0수 그룹 인덱스와 문자열 속성을 가진 리턴 체인을 사용할 수 있지만, 때로는 다른 개발자들이 쉽게 읽을 수 있도록 코드를 분해하는 것이 가장 좋다.코드를 재구성할 때, 너는 반드시 세 가지 일을 고려해야 한다.그것은 같은 조작을 수행하는 더욱 간단한 방식으로 코드의 정보를 쉽게 읽고 전달할 수 있을 뿐만 아니라 성장함에 따라 확장되어야 한다.겁내지 말고 가.네가 무엇을 배웠는지 보고 그것을 응용해서 네가 첫 번째 코드를 어떻게 바꾸는지 봐라.
우리는 아직 부츠청바지를 신기 시작하지 않았기 때문에 영원히 바뀌어도 늦지 않다.
Reference
이 문제에 관하여(나의 몇 년 전 신병 훈련소 알고리즘을 재구성하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theranbrig/refactoring-my-old-boot-camp-algorithms-from-years-ago-23je텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)