함수형 프로그래밍을 준비하면서 나의 사고 방식을 바꾼다


9

절차 적 및 OOP에서 나온 후 기능적 스타일의 프로그래밍으로 전환 할 때 "이 새로운 사고 방식"에 대해 미리 알아야 할 사항은 무엇입니까?

FP 세계에서 다이빙을 준비하고 처음 시작하는 방법은 무엇입니까?

가장 먼저 배우고 설정하는 기본 사항은 무엇입니까?


2
이건 너무 일반적입니다. 그냥 읽기 시작하십시오! 오늘날 함수형 프로그래밍에 관한 대부분의 서적과 매뉴얼은 질문에 대한 답변으로 시작됩니다.
devmiles.com

당신이 뭔가에 집착하면 그 다음 질문을 게시 해보십시오
톰 종복

@ 블라디미르 볼 로딘 (Vladimir Volodin) : 그것은 좋을 것이지만 모든 책에서 필수는 아닙니다. 좋은 것을 추천 해 줄 수 있습니까 (바람직하게는 언어에 구애받지 않음)?
JohnDoDo

다이빙 할 필요는 없습니다 . c #과 같은 OOP 언어로 람다 식을 사용해 OOP에서 FP 로의 전환을 부드럽게 할 수 있습니다.
TomCaps

4
나는 당신이 그것을 뒤로 가지고 있다고 생각합니다. 함수형 프로그래밍을 시도하면 사고 방식이 바뀔 것입니다.
케빈 클라인

답변:



6

문제를 해결하는 절차적인 "먼저이 작업을 수행 한 다음이 작업을 수행합니다"대신에 선언적 사고 가 필요 합니다. 재귀를 이해 하는 것은 절차 적 사고와 선언적 사고 사이의 일종의 달콤한 지점이기 때문에 좋은 출발점이 될 수 있습니다.


4

당신은 말 앞에 카트를 넣었습니다. 준비 할 필요가 없습니다. 흥미로운 언어를 선택하고 문서를 찾아서 사용해보십시오. 문제가 발생하면 중지하고 답변을 검색하십시오. 당신이 발전함에 따라, 당신의 사고 방식이 바뀔 것입니다.


3

FP는 lamdba 미적분학을 기반으로합니다. 당신은 그것을 알아야합니다. 좋은 출발점입니다. 기능이 전부입니다. 상태에 대한 개념은 없습니다 (더 높은 수준에서 속일 수는 있지만).

OOP에서

a = 1 a = a + 1

허용됩니다. FP에서는 그렇지 않습니다. 변수에 다른 값을 할당 할 수 없습니다. 장기적으로 FP를 배우려면 Haskell을 배우십시오. 그것은 가장 순수한 FP 버전이며 매우 복잡하지만 (방금 배우기 시작했지만) 여전히 배울 가치가 있습니다.

기능 프로그래밍 소개에서는 FP의 모든 내용에 대해 개괄적으로 설명합니다.

그래도 두 가지 경고

  1. 직업에 대한 FP를 배우고 싶다면 공석이 많지 않습니다. 절차 및 OOP는 여전히 직업 시장을 지배합니다. 그러나 FP는 새로운 문제 해결 방법을 모색하는 데 많은 도움이 될 수 있습니다.
  2. FP 컴파일러는 엄청나게 빠르지 않습니다. FP는 문제 해결에 더 관심이 있으므로 C 속도를 기대할 수 없습니다. 그러나 여전히 Haskell의 컴파일러에 명령을 발행하여 실행 프로세스 속도를 높일 수 있습니다. 트레이드 오프는 소방 버그보다는 프로그램에 집중하는 데 많은 시간을 할애한다는 것입니다.

8
"FP는 lamdba 미적분학을 기반으로합니다.이를 알아야합니다." 아뇨 기능 프로그래밍을 이해하기 위해 람다 미적분을 아는 것은 명령형 프로그래밍을 이해하기 위해 튜링 머신 (또는 어셈블리)이 필요하다는 것 이상입니다.
sepp2k

@ sepp2k 장기 목표로 FP를 잘 활용하려면 람다 미적분학 학습이 필요하다고 정직하게 생각합니다. 람다 미적분학없이 배울 수 있지만 배우면 FP에서 더 나아질 것입니다.
Ubermensch 2012

2
FP certianly는 그 상태가 일반적으로 불변이라는 것을 언급하고 있으며 컴파일러가 느리다는 것에 대한 진술에 동의하지 않습니다
jk.

@jk. 분명히, 그것들은 상태를 가지지 만 OO 방식으로는 그렇지 않습니다 (상태는 함수 나 매칭 패턴과 더 미묘한 방법으로 포함될 수 있습니다). 그리고 불변 상태는 단일 상태를 의미합니다. 따라서 함수는 항상 같은 값을 반환해야합니다. 컴파일러에 관해서는 컴파일러가 순서를 지정하는 대신 결과 계산에 필요한 단계를 처리하기 때문에 순수한 속도면에서 C / C ++과 일치 할 수 있다고 생각하지 않습니다. FP는 순수한 CPU 속도보다는 개발자 비용 절감 및 병렬 컴퓨팅에서 가장 큰 이점을 가지고 있습니다.
Ubermensch

3

나는 다음과 같은 만트라를 기억하기 위해 최선을 다합니다.

데이터 입력-> 데이터 변환-> 데이터 출력

또는

TransformData (데이터 입력)-> 데이터 출력


1
TransformData (DataIn)-> DataOut
Ubermensch

:) matra로 "Data In, Transform Data, Data Out"은 "TransformData, Open Bracket, Data In, Close Bracket, Data Out"이라고 말하기가 더 쉽습니다.
Darknight

친절한 댓글 메이트입니다. 답변 주셔서 감사합니다.
Ubermensch

난 그냥 당신과 함께 농담했다, 아니 공격, 사실 나는 내 matra를 업데이트 할 것 같아요.
Darknight

당신의 기술력은 상당히 큽니다.
Ubermensch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.