0412-Test_and_TDD

코딜리티 05-03

for문에 for가 또 있으면 안 되는데
범위 안에서 A,C,G,T

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  function solution(S, P, Q) {
// A, C, G and T 1,2,3,4
const nucleoCode = {
A: 1,
C: 2,
G: 3,
T: 4,
}
const resultArr = []
for(let i =0; i<P.length; i++){
debugger;
const SetI = new Set(S.slice(P[i], Q[i]+1));
if (SetI.has('A')) resultArr.push(1)
else if (SetI.has('C')) resultArr.push(2)
else if (SetI.has('G')) resultArr.push(3)
else resultArr.push(4)
}



return resultArr;

// write your code in JavaScript (Node.js 8.9.4)
}

문제
S를 돌면서 찾으면 S가 엄청 커지면 쓸데 없이 다 돌 가능성 !!!
P나 Q가 찍는 위치가 여러번 중복되는 부분이 있을 수 있고

해결 방안?

  1. S를 돌면서 결과 값이 P나 Q length만큼 차면 빠져나오도록 한다.
  2. P, Q 의 최소 최대값으로 이뤄진 S를 하나 가지고 와서 조작 한다
  3. 오늘 한 시간은 투자했으니 내일 한 번 다시 해보겠다. =ㅂ= 사고가 좀 빨랐으면 좋겠다. 겨우 이정도 생각에 한 시간을 망했어요

todo 다른 사람 코드 답습

팀코드 설계 도식화
interface 필요한 변수들 부터 정의 , 그리고 각각의 타입 주고 받는 부분 지정 다음에 짤 때는 이렇게 미리 설계를 한 번 해봐야겠다.
웹 자판기 떄 고 !
설계데로 모듈들 분리를 잘 해놓았다 !

루미 타임도 객체화 한 점
return {}[key] 이렇게 쓸 수도 있구나 이렇게 해서 메소드로 부르면 적역 객체를 안 쓰고 매칭하는 곳에서만 쓰게 할 수 있겠다 신기

todo 피드백

immutable은 완전히 객체랑 분리가 되는 방향으로 + this바인딩이 제거되는 형식으로 되어야 한다.
전체 큰 객체도 mutable이므로 이 부분을 update또 해주어야 하는 것도 필요한가?

객체 지향으로 짠 방식을 다 걷어내는 방식이여서 조금 나중에 연습해 보는 것이 좋을 것 같다.

… 최근에 pr피드백을 너무 못 받았다 ㅡㅜ 클로즈 클로즈 클로즈

모듈 exports

1
2
3
4
5
6
7
8
9
10
11
12
13
const equal = (a,b)=> {
if(a===b) console.log(`input ${a} 예상 Output ${b} 값이 같습니다`)
else{ throw Error(`input ${a} 예상 Output ${b} 값이 다릅니다.`)}
}
단일 모듈
module.exports = equal;

여러개 객체에 담아서 보내기
module.exports = Object.freeze({
eqaul,
test,

})

TestCode 작성하면서

  • issue분명 targetValue, expectedValue같게 출력되는데 …
    심지어 그냥 값을 넣었는데도 _= false가 나서 error가 난다 무슨 차이일지 조금 더 살펴봐야겠다. splitItem에서만 이런 결과가 발생하는데 …

  • 디버깅 도구 블락 지정 및 미리 디버깅하기 전에 그 전 함수 에서 값이 제대로 넘어갔다. 아닌가 위주로 판단해서 체크할 부분 위주로만 체크하는 습관 !!!

  • ArrayParser를 한 번 쭈욱 리팩토링을 해봤는데 클래스랑 모듈들을 나눠서 써보려고 했다.

클래스는 extends쓰면서 너무 많이 만든 것은 아닌가 싶기도 좀 하게 identityObject를 만들어놓긴 했는데
클래스 이름으로 다 구분되니까 편하긴 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  if(str[i]===leftBracket | str[i]===leftCurly) close = close << 1;
if(str[i]===rightBracket | str[i]===rightCurly) close = close >> 1;

객체처리를 통해서 이프문 줄인 부분
if(brackets[item]){
arrayClose = brackets[item](arrayClose)
objClose = brackets[item](objClose)
}
그리고 자잘하게 처리 안 해줘도 되거나 좀 더 깔끔하게 할 수 있는 부분들을 정리했는데 큰 로직으로는 변하는 부분이 없다.
splitItem이 크다고 하셔서 나눠보려고 했는데 어떻게 더 잘게 나눌 수 있을지 잘 감이 안 잡힌다. 내일 조금 더 고민해보다 물어봐야겠다.


이슈 이 부분 어떡하지 'ㅁ';;; 이프지옥
const makeIdObjByType = str => {
if(isNormalString(str)) return new IdObjString(str)
if(!isNaN(str)) return new IdObjNumber(str)
if(isBooleanString(str)) return new IdObjBoolean(str)
if(isNullString(str)) return new IdObjNull(str)
if(isUndefinedString(str)) return new IdObjUndefiend(str)
if(_isArrayClosed(str)) return ArrayParser(str)
if(_isObjClosed(str)) return ObjParser(str)
}

Jest

TDD ?

jest랑 TDD도 공부하도록 !
비둘기+ this , context, 클로저도 쌓여 있는데 …:D