🤔 이런 고민을 했습니다.
변수명과 함수명
- 변수에는 어떤 데이터가 담겨있는지와 함수는 무슨 동작을 하는지 쉽게 파악할 수 있는 네이밍을 짓기위해 노력하였습니다.
- 예시)
isExceptionSituationOccurred
예외상황이 발생했는지 여부를 반환하는 함수
배열 메소드
- 배열 메소드를 사용했을때 코드 길이와 가독성 측면에서 for문을 사용했을때 보다 이점이 있다고 판단했습니다.
따라서 로직을 짤때 최대한 배열메소드를 사용하려 노력하였습니다.
for 문 사용
const eachDigitAllMultiply = (bookPage) =>{
cosnt bookPageArray = String(bookPage).split("")
let sumOfMultiplication = 1
for (let i=0; i<bookPageArray.length; i+=1){
sumOfMultiplication*= Number(curr)
}
return sumOfMultiplication
}
배열 메소드 사용
const eachDigitAllMultiply = (bookPage) =>
String(bookPage)
.split("")
.reduce((prev, curr) => prev * Number(curr), 1);
📖 이런점을 배웠습니다.
Set 자료구조
- 7번 문제를 풀면서 이미 친구인 사람의 목록을 배열로 만들었습니다. 이제 그 배열에 includes 메소드를 사용하여 아는 사람의 목록을 만들었고, 다른 방법은 없을까 생각해보다가 Set 과 Map 자료구조가 접근하는 시간복잡도가 더 빠르다라는 것이 생각났습니다.
var arr = Array.from({ length: 1000000 }, (_, i) => i);
var set = new Set(arr);
arr.includes(987654);
set.has(987654)
- 테스트 사이트에서 시간을 측정한 결과 유의미한 차이가 났기때문에 기존 7번 문항에서 includes 메소드를 사용하는 방식에서 set 을 사용하는 방식으로 로직을 변경하였습니다.
Pipe 함수
처음 제 코드는 다음과 같았습니다.
function problem7(user, friends, visitors) {
const friendSet = makeFriendSet(user, friends);
let acquaintanceSet = makeAcquaintanceSet(friends, friendSet);
acquaintanceSet = differenceOfSet(acquaintanceSet, friendSet);
const pointMap = giveFriendAlgorithmPoint(acquaintanceSet);
const copyPointMap = giveVisitorPoint(visitors, pointMap, friendSet);
const pointArray = convertPointMapToSortedPointArray(copyPointMap);
return selectTopFive(test);
}
저는 함수명을 보고 어떤 값이 return이 될지 파악할 수 있다고 판단하였고, 변수에 값을 할당하는 과정을 생략해보기로 하였습니다.
검색한 결과 함수 여러개를 이어주는 파이프 함수라는 방법을 찾을 수 있었고 이를 한번 시도해보았습니다.
function problem7(user, friends, visitors) {
const solve = pipe(
makeFriendSet,
makeAcquaintanceSet,
differenceOfSet,
giveFriendAlgorithmPoint,
giveVisitorPoint,
convertPointMapToSortedPointArray,
selectTopFive
)({ user, friends, visitors });
return solve;
}
처음 시도해보아서 코드 가독성은 어떤지 커뮤니티가 열리면 참여하신분들에게 여쭤보고싶습니다.
Git rebase
과제를 이해했을때 각 문제들이 구현기능이라고 파악을 하였습니다. 하지만 슬랙 커뮤니티를 살펴보니 각 문제별로 기능목록을 작성하여 구현하셨다는 분이 계셨고, 저도 그렇게 바꾸는게 낫다고 생각했습니다.
하지만 이미 fork 한 레포에 commit이 push 가 되어있는 상태였기때문에 commit history를 변경하기 위해 rebase 를 사용하여 새로운 commit을 추가했습니다. 이번과제를 통해 익숙하지 않던 rebase 명령어를 사용할 수 있어 좋았습니다.
'공부기록' 카테고리의 다른 글
slack 실시간 채팅 (1) (0) | 2022.02.24 |
---|---|
몽고DB 리액트 new Date 시간. (0) | 2022.02.13 |
리액트 props 여러개 보내기 (0) | 2022.02.12 |
헤로쿠 git clone (0) | 2022.02.12 |
자바스크립트 화살표 함수 그냥 함수 차이 (0) | 2022.02.11 |