일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 책스터디
- DDD
- 함수형프로그래밍
- 객체지향의사실과오해
- 추상화 설계
- TDD
- 만들면서배우는클린아키텍처
- web
- Kotlin
- Spring
- 테스트주도개발
- GrokkingFunctionalProgramming
- 도메인 주도 개발 시작하기
- 코틀린
- 조영호
- Java
- 계층형아키텍처
- FP
- Thymeleaf
- 클린아키텍처
- 이펙티브코틀린
- 헥사고날아키텍처
- template
- 유지보수
- 개발서적
- Boot Legacy 차이점
- 테스트
- 개발방법론
- 아키텍처
- 스터디
- Today
- Total
김동형수 개발기
Grokking Functional Programming - 2부 5장 본문
Grokking Functional Programming - 2부 5장
김동형수 2022. 12. 14. 22:28이 장에서는 다음을 수행하는 방법을 배웁니다.
- flatten 을 사용하여 목록 목록 처리
- for 루프 대신 flatMap 을 사용하여 순차 프로그램 작성
- for comprehension을 사용하여 읽기 쉬운 방식으로 순차 프로그램 작성
- 이해를 위해 내부 조건 사용
- flatMap 이 있는 더 많은 유형에 대해 알아 보십시오.
책 객체 2차원 List에서 저자의 이름을 뽑으려면?
명령형 -> 3중첩 for loop 사용
함수형 -> 파이프라인 구성
flatten(scala에선 flatMap)함수를 이용해서 2차원 List를 1차원 List로 변환할 수 있다.
flatMap 은 목록의 유형을 변경할 수 있을 뿐만 아니라(예: Book 에서 String 으로) 결과 목록의 크기 도 변경할 수 있으며 이는 map 에서는 불가능합니다.
map으로는 매핑 함수의 본문 내부에서 저자나 책에 액세스할 수 없습니다.
좀 더 공식적으로, 우리의 flatMaps 는 서로 연결 되어 있으며, 이는 그 내부의 기능이 단일 요소에만 액세스할 수 있음을 의미합니다.
flatmap chaning과 flatmaps(중첩)
중첩은 코드의 가독성을 떨어트린다. 그 대안 for comprehension
list comprehension map, flatmap, filter의 대체로 사용된다.
명령문 은 유용하기 위해 프로그램의 상태를 변경해야 하는 언어 구조
명령문의 예는 for , while 및 even if
결과 컨테이너 유형은 열거자 유형에 의해 정의되고 해당 요소의 유형은 yield 뒤의 표현식에 의해 정의됩니다 .
가드 표현식 사용
for {
r <- radiuses
point <- points
if isInside(point, r)
} yield s"$point is within a radius of $r"
List("Point(1,1) is within a radius of 2")
map , foldLeft 및 flatMap
List[A].map(f: A => B): 목록[B]
f 로 전달된 함수 를 원래 목록의 각 요소에 적용하여 요소가 수정된 새 목록을 생성합니다. 데이터 구조( List )의 모양, 크기 및 요소 순서가 유지됩니다.
List[A].foldLeft(z: B)(f: (B, A) => B): B
원래 목록의 각 요소( A )와 현재 누산기 값( B )에 f 로 전달된 함수를 적용하여 B 유형의 값을 누적합니다 . 데이터 구조( List )의 모양과 요소의 크기 및 순서가 손실됩니다. B 유형의 값은 하나만 반환됩니다.
List[A].flatMap(f: A => List[B]): List[B]
원래 목록의 각 요소에 f 로 전달된 함수를 적용하여 원래 요소와 동일한 순서로 결합된 여러 목록(각 요소당 하나씩)을 생성합니다. 데이터 구조( List )의 모양은 유지되지만 크기는 다를 수 있습니다. 즉, 빈 목록이거나 원래 목록보다 몇 배 더 큰 목록일 수 있습니다.
'책 스터디 > [완료] FP - Grokking Funtional Programming' 카테고리의 다른 글
Grokking Functional Programming - 2부 7장 (0) | 2023.01.04 |
---|---|
Grokking Functional Programming - 2부 6장 (0) | 2022.12.21 |
Grokking Functional Programming - 1부 4장 (0) | 2022.11.30 |
Grokking Functional Programming - 1부 3장 (0) | 2022.11.23 |
Grokking Functional Programming - 1부 2장 (0) | 2022.11.16 |