Functional Programming in C++
도서명:Functional Programming in C++
저자/출판사:이반,추키츠/에이콘출판
쪽수:460쪽
출판일:2019-08-23
ISBN:9791161753416
목차
1장. 함수형 프로그래밍 소개
1.1 함수형 프로그래밍이란 무엇인가?
1.1.1 객체지향 프로그래밍과의 관계
1.1.2 명령형 프로그래밍과 선언형 프로그래밍의 구체적인 예제
1.2 순수 함수
1.2.1 변경 가능한 상태 회피
1.3 함수적으로 사고
1.4 함수형 프로그래밍의 이점
1.4.1 코드 간결성과 가독성
1.4.2 병행성과 동기화
1.4.3 지속적 최적화
1.5 함수형 프로그래밍 언어로서 C++의 진화
1.6 이 책에서 배우는 내용
요약
2장. 함수형 프로그래밍 시작
2.1 함수가 함수를 취한다?
2.2 STL 예제
2.2.1 평균 점수 계산
2.2.2 폴딩
2.2.3 문자열 자르기
2.2.4 조건자에 기반을 두고 컬렉션 분할
2.2.5 필터링과 변환
2.3 STL 알고리즘의 구성 가능성 문제
2.4 자체적인 고차원 함수 작성
2.4.1 함수를 인수로 받기
2.4.2 루프로 구현
2.4.3 재귀와 꼬리 호출 최적화
2.4.4 폴딩을 사용해 구현
요약
3장. 함수 객체
3.1 함수와 함수 객체
3.1.1 자동 반환 형식 추론
3.1.2 함수 포인터
3.1.3 호출 연산자 오버로딩
3.1.4 일반 함수 객체 만들기
3.2 람다와 클로저
3.2.1 람다 구문
3.2.2 람다의 이면
3.2.3 람다에서 임의의 멤버 변수 생성
3.2.4 일반 람다
3.3 함수 객체 작성
3.3.1 STL에서 연산자 함수 객체
3.3.2 다른 라이브러리의 연산자 함수 객체
3.4 std::function 가진 래핑 함수 객체
요약
4장. 새로운 함수 만들기
4.1 부분 함수 애플리케이션
4.1.1 이함 함수를 단항 함수로 변환하는 일반적 방법
4.1.2 std::bind를 사용해 값을 특정 함수 인수에 바인딩
4.1.3 이항 함수의 인수 순서를 뒤집기
4.1.4 더 많은 인수를 가진 함수에 std::bind 사용
4.1.5 std::bind 대안으로 람다 사용
4.2 커링: 함수를 바라보는 다른 방식
4.2.1 커리 함수를 더 쉽게 만들기
4.2.2 데이터베이스 접근에 커리 사용
4.2.3 커리와 부분 함수 애플리케이션
4.3 함수 합성
4.4 함수 필터 다시 살펴보기
4.4.1 일련의 쌍을 뒤집기
요약
5장. 순수성: 가변 상태 회피
5.1 가변 상태의 문제
5.2 순수 함수와 참조 투명성
5.3 부작용이 없는 프로그래밍
5.4 병행 환경에서의 가변과 불변 상태
5.5 const화의 중요성
5.5.1 논리적 상수성과 내부 상수성
5.5.2 임시 값에 대한 멤버 함수 최적화
5.5.3 const 주의 사항
요약
6장. 지연 평가
6.1 C++에서의 지연
6.2 최적화 기법으로서의 지연
6.2.1 컬렉션을 지연해 정렬
6.2.2 사용자 인터페이스의 항목 뷰
6.2.3 함수 결과 캐싱에 의한 재귀 트리 프루닝
6.2.4 지연 형태의 동적 프로그래밍
6.3 일반화된 메모이제이션
6.4 식 템플릿과 지연 문자열 연결
6.4.1 순수성과 식 템플릿
요약
7장. 범위
7.1 범위 소개
7.2 데이터에 대한 읽기 전용 뷰 만들기
7.2.1 범위 용도의 filter 함수
7.2.2 범위 용도의 transform 함수
7.2.3 범위 값의 지연 평가
7.3 범위를 통한 값 변경
7.4 제한 범위와 무한 범위의 사용
7.4.1 입력 범위 처리 최적화에 제한 범위 사용
7.4.2 센티넬로 무한 범위 만들기
7.5 단어 빈도 계산에 범위 사용
요약
8장. 함수형 자료 구조
8.1 불변 연결 리스트
8.1.1 리스트의 시작 부분에 요소 추가와 삭제
8.1.2 리스트의 끝 부분에 요소 추가와 삭제
8.1.3 리스트의 중앙 부분에서 요소 추가와 삭제
8.1.4 메모리 관리
8.2 벡터 유사 가변 자료 구조
8.2.1 비트맵 벡터 트라이에서의 항목 조회
8.2.2 비트맵 벡터 트라이에 항목 추가
8.2.3 비트맵 벡터 트라이의 항목 갱신
8.2.4 비트맵 벡터 트라이의 끝에서 항목 제거
8.2.5 기타 동작과 비트맵 트라이의 전반적인 효율성
요약
9장. 대수적 데이터 유형과 패턴 일치
9.1 대수적 데이터 유형
9.1.1 상속을 통한 합 유형
9.1.2 공용체와 std::variant를 통한 합 유형
9.1.3 특정 상태 구현
9.1.4 특수한 합 유형: 옵션 값
9.1.5 오류 처리를 위한 합 유형
9.2 대수적 데이터 유형으로 도메인 모델링
9.2.1 단순 접근법과 단점
9.2.2 좀 더 세련된 접근법: 하향식 설계
9.3 패턴 매칭에서 대수적 데이터 유형의 향상된 처리
9.4 Mach7 라이브러리를 이용한 강력한 패턴 매칭
요약
10장. 모나드
10.1 예전의 함수자가 아니다
10.1.1 옵션 값 처리
10.2 모나드: 함수자에게 더 많은 능력을
10.3 기본 예제
10.4 범위와 모나드의 내포
10.5 오류 처리
10.5.1 모나드로 std::optional
10.5.2 모나드로 expected
10.5.3 try 모나드
10.6 모나드로 상태 처리
10.7 병행성과 연속 모나드
10.7.1 모나드로서의 퓨처
10.7.2 퓨처 구현
10.8 모나드 결합
요약
11장. 템플릿 메타프로그래밍
11.1 컴파일 시점에 유형 조작
11.1.1 추론된 유형 디버깅
11.1.2 컴파일 동안의 패턴 일치
11.1.3 유형에 관한 메타정보 제공
11.2 컴파일 시점에 유형 속성 검사
11.3 커리 함수 만들기
11.3.1 모든 호출 가능한 것을 호출
11.4 DSL 구축 블록
요약
12장. 병행성 시스템을 위한 함수적 설계
12.1 액터 모델: 구성 요소로 사고
12.2 간단한 메시지 소스 만들기
12.3 반응형 스트림을 모나드로 모델링
12.3.1 메시지를 받기 위한 싱크 만들기
12.3.2 반응형 스트림 변환
12.3.3 주어진 값에 대해 스트림 만들기
12.3.4 스트림의 스트림을 조인
12.4 반응형 스트림 필터링
12.5 반응형 스트림에서의 오류 처리
12.6 클라이언트에 응답
12.7 가변 상태로 액터 만들기
12.8 액터로 분산 시스템 작성
요약
13장. 테스트와 디버깅
13.1 컴파일하는 프로그램이 올바른가?
13.2 단위 테스트와 순수 함수
13.3 테스트 자동 생성
13.3.1 테스트 사례 만들기
13.3.2 속성 기반의 테스트
13.3.3 비교 테스트
13.4 모나드 기반의 병행성 시스템 테스트
요약
,>