명령형
js
const addItem = (todoList, subject, date) => {
const todoItem = toTodoItem(subject, date)
todoList.push(todoItem)
}
const printTodoList = (todoList) => {
const {length} = todoList
let log = ``
for (let i = 0; i < length; i++) {
const todoItem = todoList[i]
log += `${todoItemToString(todoItem)}`
if (i < length - 1) {
log += `\n`
}
}
console.log(log)
}
const toTodoItem = (subject, date) => ({subject, date})
const todoItemToString = ({subject, date}) => `[${date}] ${subject}`
const todoList = []
addItem(todoList, '새해인사', 20200101)
addItem(todoList, '화분 물주기', 20200102)
addItem(todoList, '분리수거', 20200103)
printTodoList(todoList)
/* 실행결과
[20200101] 새해인사
[20200102] 화분 물주기
[20200103] 분리수거
*/
함수형 1
js
class TodoList {
constructor(todoList) {
this.todoList = todoList
}
addItem(subject, date) {
const todoItem = TodoItem.create(subject, date)
const addedTodoList = this.todoList.concat(todoItem)
return TodoList.create(addedTodoList)
}
toString() {
return this.todoList
.map(TodoItem.todoItemToString)
.join('\n')
}
static create(todoList) {
return new TodoList(todoList)
}
}
class TodoItem {
static create (subject, date) {
return {subject, date}
}
static todoItemToString ({subject, date}) {
return `[${date}] ${subject}`
}
}
const todoList = TodoList.create([])
.addItem('새해인사', 20200101)
.addItem('화분 물주기', 20200102)
const todoList2 = todoList
.addItem('분리수거', 20200103)
console.group('todoList')
console.log(todoList.toString())
console.groupEnd()
console.group('todoList2')
console.log(todoList2.toString())
console.groupEnd()
함수형 2
js
const addItem = (todoList, [subject, date]) => {
return todoList.concat({subject, date})
}
const todoListToString = (todoList) => {
return todoList
.map(({subject, date}) => `[${date}] ${subject}`)
.join('\n')
}
const todoList = [
['새해인사', 20200101],
['화분 물주기', 20200102],
]
.reduce(addItem, [])
const todoList2 = addItem(todoList, ['분리수거', 20200103])
console.group('todoList')
console.log(todoListToString(todoList))
console.groupEnd()
console.group('todoList2')
console.log(todoListToString(todoList2))
console.groupEnd()
/* 실행결과
todoList
[20200101] 새해인사
[20200102] 화분 물주기
todoList2
[20200101] 새해인사
[20200102] 화분 물주기
[20200103] 분리수거
*/
객체지향
js
class TodoList {
constructor() {
this.todoList = []
}
addItem(subject, date) {
const todoItem = new TodoItem(subject, date)
this.todoList.push(todoItem)
}
print() {
const str = this.todoList
.map((todoItem) => todoItem.toString())
.join('\n')
console.log(str)
}
}
class TodoItem {
constructor(subject, date) {
this.subject = subject
this.date = date
}
toString() {
return `[${this.date}] ${this.subject}`
}
}
const todoList = new TodoList()
todoList.addItem('새해인사', 20200101)
todoList.addItem('화분물주기', 20200102)
todoList.addItem('분리수거', 20200103)
todoList.print()
/*
[20200101] 새해인사
[20200102] 화분물주기
[20200103] 분리수거
*/