Conversation
| next() { | ||
| if (index < data.length) { | ||
| const value = data[index]; | ||
| index += 1; | ||
|
|
||
| return { | ||
| done: false, | ||
| value, | ||
| }; | ||
| } | ||
|
|
||
| return { done: true }; | ||
| }, | ||
| }; |
There was a problem hiding this comment.
index가 초과하지 않았을 경우에는 값을 반환하고, 아닌 경우에는 끝나도록 하신 것 같아요.
종료조건을 먼저 명시하는 것도 좋을 것 같아요. 진짜의도는 아래에 배치하고, 예외가 되는 경우를 위에 배치하는거죠.
next() {
if (index >= data.length) {
return { done: true };
}
const value = data[index];
index += 1;
return { done: false, value };
},
};그리고 리턴하는 중괄호도 모양을 일부러 맞춰줬어요
There was a problem hiding this comment.
피드백 감사합니다 :-)
얼리 리턴에 대해서 배웠던 기억이 나네요!
실제 업무에서도 얼리 리턴을 많이 사용했는데, 예외가 되는 케이스가 많을 경우에 진짜 의도를 나타내는 코드가 눈에 잘 안들어오는 경우도 있었습니다.
윤석님은 혹시 이런 경험이 있으신가요? 만약 있으시다면 어떻게 코드를 작성하셨는지 궁금합니다.
problem-2-2/problem-2-2.test.js
Outdated
| throw new Error('스택이 비어있습니다'); | ||
| } | ||
|
|
||
| const popped = this.#items[this.#n]; |
There was a problem hiding this comment.
popped라는 의미는 boolean변수처럼 보여서 item정도로 해도 될 것 같아요. items에서 나온거라서
problem-1-2/problem-1-2.test.js
Outdated
| sum() { | ||
| return this.#items.reduce((acc, cur) => acc + cur, 0); | ||
| } |
There was a problem hiding this comment.
sum을 구현했는데 타입에 따라서 동작하지 않을까봐 걱정이셨군요. 해결 방법에는 두 가지가 있는데, 하나는 타입으로 해결하여 제네릭을 사용하는 방법이 있고요, 다른 하나는 함수를 주입해주는 방법이 있습디다.
- 타입으로 해결할 경우
interface Plusable<T> {
plus: (other: T) => T;
}
class SomeValue implements Plusable<SomeValue> {
value = 0;
constructor() {}
plus(other: SomeValue) {
const newValue = new SomeValue();
newValue.value = this.value + other.value;
return newValue;
}
}
class Bag<T extends Plusable<T>> {
items: Array<T> = [];
constructor() {
}
sum(): T {
return this.items.reduce((acc, item) => acc.plus(item));
}
}- 함수로 해결하는 경우
class Bag {
// ... 생략
sum(operator = () => acc + cur) {
return this.#items.reduce(operator, 0);
}
// ... 생략
}
const bag = new Bag();
bag.sum((acc, cur) => acc + cur.someValue);이렇게 하면 sum할 때 어떻게 동작할지 결정할 수 있습니다. 자바스크립트에서는 대부분 함수로 해결하고, 함수형에서 주로 이렇게 해결합니다.
There was a problem hiding this comment.
윤석님 자세한 설명 감사합니다 :-)
2번째 방법을 이용해서 수정했고, reduce의 initialValue를 지정해주면 좋을 것 같아서 sum의 두번째 인자로 initialValue를 추가했습니다.
첫 번째 방법은 많이 생소해서 코드가 아직 잘 이해가 안가네요 ..!
Plusable과 같은 인터페이스를 만들어서 문제를 해결하는게 너무 신기합니다..
좀 더 읽어보고 이해해보겠습니다.. 혹시 이런 패턴에 대해서 참고할 만한 문서가 있을까요?
There was a problem hiding this comment.
타입이 있는 언어를 다뤄보시지 않았다면 낯설어서 어려웠을 것 같아요.
그래도 타입스크립트를 사용하면 제너릭을 사용하게 될테니 배워놓으셔야 합니다!
https://www.typescriptlang.org/docs/handbook/2/generics.html
안녕하세요!
우선 백을 이용한 첫 번째 과제를 풀어봤습니다.
추상 데이터 타입을 사용하는 이유와 백을 구현하면서 어떤 기능(API)를 제공할 수 있을지 대해서 고민하면서 과제를 했습니다.
1-2 과제에서 평균을 쉽게 구하기 위해서 sum 이라는 메서드를 구현했는데, 어떤 타입의 데이터가 백 안에 들어올지 모르니 좋은 방법이 아닐 수도 있겠다는 생각이 드네요!(PR을 올리면서 생각났습니다 😂)