1장 - 읽기 좋은 코드를 작성하는 기술

p.15

코드의 문제를 작게 나누려면 해당 문제를 깊이 이해하고 있어야 합니다. 그리고 알기 쉬운 이름을 붙이려면 분할된 대상의 본질을 제대로 잡을 수 있어야 합니다.

p.25

함수의 분할 단위는 줄 수가 아닙니다. 하나의 의미를 나타내는 코드라면 비록 한 줄이라고 해도 함수화해야 하는 후보가 됩니다.

p.29

코드에 사전 조건 또는 사후 조건이 있을 때는 assert 함수를 사용하는 습관을 들여주세요.

assert 때문이 아니라, 사전 조건 / 사후 조건을 잘 챙겨야 겠다고 생각이 들어서..

p.30

if 조건문과 for 반복문을 사용하는 알고리즘은 대부분 일반적인 알고리즘 함수로 변환할 수 있습니다.

p.40

변환 전용 배열을 사용하면 if 조건문을 제거할 수 있습니다.

function idToNum(id) {
	if (id === 0) return 10
	if (id === 1) return 15
	if (id === 2) return 30
	if (id === 3) return 50
	throw new Error('wrong id')
}

function idToNum(id) {
	if (id < 0 || id > 3) throw new Error('wrong id')
	const table = [10,15,30,50]
	return table[id]
}

p.43

결정표를 사용한 if 조건문 제거

const Hand = {
	Rock: 0,
	Scissors: 1,
	Paper: 2,
}
const Result = {
	Win: 1,
	Lose: 2,
	Draw: 3,
}

function judgement(my, target) {
	if (my === target) return Result.Draw
	if (my === Hand.Rock && target === Hand.Scissors) return Result.Win
	if (my === Hand.Scissors && target === Hand.Paper) return Result.Win
	if (my === Hand.Paper && target === Hand.Rock) return Result.Win
	return Result.Lose
}

function judgement(my, target) {
	const result = [
		[Result.Draw, Result.Win, Result.Lose],
		[Result.Lose, Result.Draw, Result.Win],
		[Result.Win, Result.Lose, Result.Draw],
	]
	return result[my][target]
}

p.46

for 반복문의 기본 원칙은 '1개의 작업만 반복'입니다.

p.61

case 내부에는 복잡한 코드를 작성하지 말아주세요. 분기에만 집중하도록 합시다.