Page 18 - 006963
P. 18

그럼 누군가의 이러한 의견들을 다음과 같이 해결할 수 있을까요?


                     const x = 1
                     const y = x + 1


                   이상하게 보일 수 있는 두 번째 코드는 코드가 할당과 함께 시작함으로써 프로그램에 시간 개념을
                   도입했다는 것입니다. 즉, 해당 값들의 존재 전후로 각기 다른 시간이 존재합니다. 맞습니다. 자바
                   스크립트 프로그램은 어떻게 진행하든지 일련의 실행 단계라고 볼 수 있습니다. 그러나 선언적 프
                   로그래밍(FP는 선언적 프로그래밍 타입 중 하나입니다)에서는 프로그램이 어떻게 작동해야 하는

                   지보다는 무엇을 해야 하는지 기술함으로써 이러한 작동 방식을 덜 강조합니다. 게다가 그 자체로
                   주어진 할당은 실제로 함수에 적용되지 않는 한 가치가 없습니다(할당된 값을 단순히 출력하는 것
                                1
                   도 포함됩니다).

                     Note   선언적 프로그래밍으로서 스프레드시트

                     선언적 프로그래밍의 간단한 예로, 스프레드시트 프로그램을 떠올릴 수 있습니다. 어떤 셀에는 정보(사실 또는 값)가
                     들어 있고, 다른 어떤 셀에는 해당 정보를 조작하거나 계산에 사용하는 함수들이 들어 있습니다. 또 그 외 셀에는 다른
                     함수들의 실행 결과를 사용하는 함수들이 들어 있다고 가정하겠습니다.
                     이러한 스프레드시트 프로그램을 사용할 때 실제로 프로그램 실행 흐름은 고려하지 않습니다. 예를 들어 연산에 숫자
                     들이 사용되기 전에 셀에 표시하거나 여러 연산에 숫자가 쓰일 때 어떤 연산을 먼저 실행하는지 고려하나요?
                                                                                  1
                     특히 자바스크립트와 거리가 있는 선언적 프로그래밍 언어를 시도해 보고 싶다면 프롤로그(Prolog) 를 살펴보아야
                     합니다.



                   재할당과 할당이 너무 강렬해서 걱정이 된다면, 여기에는 안 좋은 소식과 좋은 소식, 더 좋은 소식
                   과 더 안 좋은 소식이 있습니다. 첫 번째 나쁜 소식은 함수형 프로그래밍에는 다음과 같은 많은 제
                   약 사항을 발견할 수 있다는 것입니다.


                      ●   변수가 존재하지 않습니다. 상수 값으로 부릅니다.
                      ●   공유되는 전역 상태가 없습니다(몇몇 난이도가 높은 경우를 제외하고).

                      ●   자체 할당은 더 복잡합니다. 값은 함수에서 나오거나 함수로 향하는 경향이 있습니다.
                      ●   함수는 항상 무언가를 반환합니다.

                      ●   else 분기가 없는 if 구문은 유효하지 않습니다.


                   1   역주 프롤로그는 인공 지능과 전산 언어학에 관련된 범용 논리 프로그래밍 언어입니다. 최초의 논리 프로그래밍 언어 중 하나였으며, 오늘날
                      여러 언어 중 가장 많이 사용되는 상태로 남아 있습니다. 이 언어는 정리 증명, 전문가 시스템, 용어 재작성, 타입 유추, 자동 계획, 원래 의도
                      된 사용 분야, 자연어 처리에 사용됩니다.

             426




         리팩토링 자바스크립트(본문)최종.indd   426                                                            2018-09-19   오전 1:31:34
   13   14   15   16   17   18   19   20   21   22   23