Functional Programming in C# [ Ch. 1, 2, 3 ] __ Oliver Sturm

Chap. 1. A Look at Functional Programming History

What is Functional Programming ?

함수형 언어에서 Referential transparency 는 중요한 개념.  리턴 값이 입력 값에만 의존.
명령형 (imperative) 프로그래밍 과 대조.
함수형 언어 패러다임을 따르는 언어 : recursion 등 .. 을 쓰느냐..
-> 재귀 함수에서 스택에 위치해서 오버플로 하는 언어..  는 재귀를 쓰지 말아야.
고차 함수 : 함수를 인자로 받거나 리턴하는.
C에서는 무명 함수가 없다.
함수형 언어는 컴퓨터에서 문제를 푸는 방법을 알려주는 것. 일의 순서를 나열하는 것 보다는.. referential transparancy 는 이런 의미..

Functional Languages

Haskell, Erlang, Clojure.

The relationship to OOP

C#, F# .. albeit .

Chap. 2. Putting Functional Programming into a Modern Context

Concurrency Programming 에 의한 함수형 패턴 필요성.
Pararrel.foreach ..

Managing Side effects

Agile Programming Methodologies

함수 차원에서의 모듈화. 세분화된 작업을 할 때의 리팩토링. 클래스 차원에서는 너무 작업이 크다. ?

Declarative Programming

Funtional Programming is a Mindset

Is Functional Programming in C# A Good Idea?

Chap. 3. Functions, Delegates, & Lamda Expressions

Functions and Methods

C# 은 클래스 외에서의 함수는 인정 안함. => Methods 라 불림.

Reusing Functions

Anonymous Functions and Lambda Expressions

[sorting ] 비교 함수. 예.
[custom delegate ]

Func<object, object, bool> compareInt4 =
    (a, b) => ((int) a) > ((int) b);
Func<int, int, int> add = (x, y) => x + y;

람다 함수에서 var 사용 불가. 선언 시 타잎 추론 가능해야 함

Extension Methods [9/19]

Generic 도 가능.

Referential Transparency [9/21]

명령형 프로그램을 말할 때 대부분 ‘상태’ 에 관한 것이다.
명령형 프로그램의 주된 이슈중 하나는 코드가 점점 커진다는 점.
실행 순서에 촛점을 맞추므로 함수/메서드가 참조하기에 불투명해지는 경향이 있다. 같은 인수를 넣어도 동일한 결과가 나온다는 보장이 없다.
함수에서 사용하는 변수들이 여러 영역 (글로벌 .. )에서 가졍오기 때문.
RT 는 이와 반대. 이 단어는 어느 식에나 적용 가능하고, 프로그램을 바꾸지 않고 식이 값으로 바뀌어도 된다는 것.
수학에서 식은 항상 RT 하다. 즉, 3 + 2 는 5로 치환 가능하다.
어떤 함수는 RT 가 불가능. DateTime.Now, ReadByte 같은 것들. 특히 void 를 리턴하는 것들은 식으로 쓰일 수 없고, 참조적으로 불투명하다.
함수형 프로그램의 가장 중요한 컨셉중의 하나는 함수 구현에서 부작용을 피하는 것.
이것은 RT 와 매우 밀접한 관계이다. 순수한 함수는 인수로부터만 결과값을 만들어 부작용이 전혀 없는 것.
함수는 다른 함수를 부르거나 자신의 스코프 밖의 값을 사용할 수도 있다. PI 를 사용하는 예.

The general description of pure functions and side effects leaves out the perspective of the call site, from which a pure function can also be defined by saying that a call into a pure function is expected to be referentially transparent. 이 말이 정확하지는 않더라도  ..
순수한 함수를 쓰려면 인수만을 사용하고 끝에 리턴값을 리턴하라.  외부 변수에 접근하려면 그 일을 하는 다른 순수한 함수를 부르고.
실제 데이터요소에 접근하려면 그것이 상수 임을 확실히 하라. 이 조건에 맞지 않으면 부작용이다.
어떤 언어는 문법이 이를 불가능하게 함. 스크린에 뭘 출력하고 파일에 쓰는 것 들은 이 관점에서 모두 부작용임.

결과적으로 부작용을 피하는 것보다 더 중요한 것이 있다 : 부작용을 관리하는 것.  언어에 따라 이것이 쉽기도, 어렵기도.
순수한 함수를 쓰는 순수한 언어에서는 이를 회피하는 방법이 있다. 하스켈에서는 모나드가 이것을 가능하게 한다.
C#은 특별한 게 없다.  단지 아키텍쳐적인, 구조적인 문제일 뿐.

순수함수.. 마지막 말.
이렇게 코딩을 하면, 실행 순서, 함수가 불리는 순서는 중요하지 않다는 것.
개발자는 어떻게 함수들이 의존성의 네트웤을 형성하는 지 정의한다. 컴파일러가 최적의 실행을 한다.
이것은 최적화가 가능하게 하고, 중복된 코드는 자동제거될 수 있고, 캐시 적용가능하고, 로직파트는 병렬처리가 가능하다.
이런 가능성 리스트는 무한하고 많은 순수함수 환경은 이런 접근을 자동화한다.
충분한 이론-챕터가 나중에 이런 것들의 장점과 확장된 아이디어를 보여줄 것임.

닷넷 4.0 에서 code contracts 개념 도입.
PureAttribute.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중