수학을 배우면 분석 기술이 향상되고 라틴 / 고전 문학을 배우면 작문 기술이 향상되는 것과 매우 흡사합니다.
이러한 언어를 디자인 한 사람들은 프로그램 작성의 의미에 대해 열심히 생각했습니다. 그리고 그 언어는 그 연구의 결과입니다.
즉, Java를 배우면 더 나은 프로그래머가 될 것입니다. 그리고 학습 C. 진정한 이점은 다른 철학을 가진 언어를 배우는 것에서 비롯됩니다. 그러면 프로그램 작성 방법에 대한 자신의 의견을 가질 수 있습니다.
편집하다
나는이 답변이 아직 haskell 및 / 또는 lisp를 배우지 않은 사람들에게는 그렇게 유용하지 않다는 것을 알고 있습니다. 여기에 내가 의미하는 바를 더 설명하기위한 몇 가지 예가 있습니다.
리스프
Lisp는 구문이 최소화되어야하고 모든 것이 목록 또는 기본이어야한다고 생각합니다 (Lisp는 목록 처리를 나타냄). 프로그램조차도 주로 다른 목록과 기호를 포함하는 목록입니다. Lisp을 사용하면 프로그램을 목록으로 조작하고 새 프로그램을 즉석에서 생성 할 수 있습니다. 따라서 전체 code is data and data is code
모토.
Lisp 언어를 사용하면 원하는 인터페이스를 정의 할 수 있습니다. 좋은 예는 클로저 웹 프레임 워크 인 compojure입니다. 라우팅 기능은 다음과 같습니다.
(defroutes app-routes
(GET "/" [] view/page)
(GET "/api" [] (wrap-aleph-handler api/socket-handler))
(route/resources "/static")
(route/not-found "page not found"))
또 다른 좋은 예는 딸꾹질 템플릿 프레임 워크입니다.
(html [:ul
(for [x (range 1 4)]
[:li x])])
보시다시피 결과는 콧수염과 같은 DSL에서와 같이 간결하지만과 같은 언어 기능을 사용할 수 있습니다 (for [x (range 1 4)] block)
. 더 좋은 점은 코드를 추상화하고 구조화하는 모든 도구가 있다는 것입니다.
다른 언어에서는 구문이 더 복잡합니다. Java 프로그램을 여러 목록으로 읽을 수 없습니다. 그러나 Lisp를 사용하면 이상적인 인터페이스의 모양과 코드에서 데이터로 추상화 할 수있는 것에 대해 더 잘 알 수 있습니다. 또한 좋아하는 언어를 큰 데이터 구조로보고 의미를 더 잘 이해하는 데 도움이됩니다.
하스켈
하스켈은 강력한 정적 타이핑과 순도를 믿습니다. 순수한 함수는 수학 함수와 같습니다. 값 세트에 정의되어 다른 세트에 맵핑됩니다. 함수에는 부작용이 없으며 값은 변경할 수 없습니다. 순도는 다중 패러다임 언어가 가질 수있는 것이 아니기 때문에 흥미 롭습니다. 언어는 순수하다.
한 가지 결과는 원할 때마다 IO 작업을 수행 할 수 없다는 것입니다 (하스 켈러는 이것이 좋은 것이라고 생각합니다). IO 동작은 트랜잭션으로 정의되며 이는 순수한 값입니다. main
haskell 프로그램 의 값은 프로그램을 실행할 때 실행되는 IO 트랜잭션입니다.
프로그램의 데이터 흐름을 명시 적으로 처리해야합니다. 글로 z 변수에서 자료를 읽고 읽음으로써 두 구성 요소가 통신하도록 할 수 없습니다. 값을 작성하고 전달해야합니다.
Jimmy Hoffa가 언급 한 또 다른 기능은 리치 유형 시스템입니다. 다른 언어에는 정적 입력이 있지만 haskell에서는 다음과 같은 것을 가질 수 있습니다.
length :: [a] -> Int
(의 목록에서 정수로의 기능)
map :: (a -> b) -> [a] -> [b]
( a to b
변환과 a의 목록 을 가져 와서 b의 목록을 반환하는 함수)
좋은 점은 그 기능이 실제로 무엇을하는지 설명 할 필요가 없다는 것입니다. 당신은 이미 그들의 행동을 이해하고 있습니다. 또한 이러한 시그니처가있는 함수는 실제로는 목록의 길이를 계산하고 목록에 대한 변환을 매핑 할 수 있습니다.
다른 유형의 언어에서 클래스 계층 구조는 변경 가능성과 결합하여 이러한 유형을 다루는 악몽을 만듭니다. 당신은 언어의 관점 (즉, 간단하고 강력하며 안전한)에서 바로 얻을 수없는 공분산과 반공 분산을 이해해야합니다.
안전한 경로 (스칼라와 같은)를 가져 와서 실제로 복잡한 언어로 끝나거나 간단한 경로를 사용하여 제한된 (Google은 일반 목록 및지도로 제한) 또는 안전하지 않은 (항상 다트 제네릭) 공변량).
haskell을 사용하면 주로 순수성의 이점과 순수 코드 작성 방법에 대해 배웁니다.