문제

객체지향 프로그래밍과 함수형 프로그래밍을 모두 촉진하는 언어는 무엇입니까?일류 기능을 지원하는 모든 언어는 기능적 언어로 간주될 수 있다는 것을 알고 있지만 두 가지 코딩 스타일을 모두 대상으로 하는 구문을 찾고 있습니다.

이러한 언어를 사용하여 모든 상태 변경을 코드의 단일 부분으로 격리하고 나머지 프로그램은 순전히 기능하도록 하는 것을 상상하고 있습니다.생각만 해도 군침이 돕니다(디버깅 천국!).

지금까지 내가 발견한 것은 스칼라 방금 들어봤지만 (그리고 정말 놀랍습니다).이 "혼합 스타일" 패러다임에 큰 경쟁자가 있습니까?

도움이 되었습니까?

해결책

가장 잘 알려진 것은입니다 OCAML 그리고 에프# (.NET 용 OCAML로 모호하게 설명 할 수 있음).

다른 다중-파라 디그 언어가 많이 있습니다 온스, 그러나 그들은 대부분 교육학 가치를 가지고 있습니다. 대조적으로, OCAML은 매우 실용적입니다. 거의 C만큼 빠르며 Haskell만큼 아름답습니다 :)

Python 및 Ruby와 같은 인기있는 스크립팅 언어를 통해 기능적 스타일로 프로그램을 프로그램 할 수 있습니다. 그러나 그들은 "고전적인"기능적 언어 (OCAML)가 가진 가장 강력한 시설 중 하나를 제공하지 않습니다. 패턴 매칭 (regexp로 착각하지 마십시오).

다른 팁

자바 스크립트 : 그리고 기능의.

또한 Python, Ruby, Lua 등과 같은 많은 스크립팅 언어에는 이러한 기능이 있지만 대수 데이터 유형 및 패턴 매칭과 같은 기능적 언어의 멋진 기능이 부족합니다.

OCAML과 F#은 내가 아는 한 OOP와 FP를 혼합하는 가장 인기있는 언어입니다.

루비와 같은 대부분의 언어는 기능 프로그래밍을 혼합하지만 많은 사람들이 그것을 깨닫지 못합니다. 나는 그런 언어가 구문 전면에 많은 것을 원한다는 것을 알았습니다.

Haskell: 순수한 기능적, 거의 oo는 아니지만 계속해서 다이빙을하십시오. :디

스칼라: OO와 FP의 아름다운 믹스는 10 년 또는 2로 JVM에서 JVM에서 Java를 최고의 언어로 추월 할 수 있습니다. 나는 그것이 기능적 프로그래밍을 Java 플랫폼에 가져 오기 때문에 그것을 좋아합니다.

씨#: OO에 대한 멋진 지원 및 더 많은 기능을 얻을 수 있습니다 (1 등석 기능은 이미 무엇을 개선 할 것인지 볼 수 있습니다 .NET 4

에프#: .NET 언어는 원래 OO 물건에 대해 고안된 C#과 달리 기능적으로 기능하게 만들어졌습니다.

파이썬: OO에게는 좋지만 FP에 전혀 적합하지 않습니다

자바 스크립트: 일류 함수를 지원하지만 Scala 및 F#과 같은 FP 용으로 특별히 설계되지는 않았습니다. 여전히 Python IMHO보다 약간 낫습니다.

왜 OO와 FP를 섞고 싶습니까? 디딤돌로?

씨#.이는 필수적이며 편리할 수도 있지만 많은 기능적 특징도 가지고 있습니다.람다, 반복자 및 LINQ는 모두 작동합니다.

아마도 순수주의자에게는 별 매력이 없을 것 같지만 나에게는 효과가 있다.

JavaScript, Python 및 Ruby는 그런 식으로 사용할 수 있지만 스칼라 정적으로 함수를 입력하고 JVM에서 작동하여 노치를 올립니다.

당신은 정말로 잘못된 질문을합니다. 귀하의 질문은 "OO"와 "Functional"프로그래밍 사이의 구별이있는 것에 대해 전제됩니다. 이 차이는 흥미롭거나 관련이 없습니다. 실제로 "일류 기능 지원"기준에 따라 자바는 기능적입니다.

그러나 당신은 "순전히 기능적"으로 머리에 못을 박았습니다. 그것은 흥미로운 비트입니다. 어떤 언어가 당신에게 참조 투명성과 순도를 제공합니까? 글쎄, 그들 대부분은 당신이 매우 조심한다면. 그러나 많은 사람들이 실제로 당신의 기능이 순수하다는 것을 보장하지는 않습니다. 나는 당신에게 그것을 제공하는 몇 가지 언어 만 생각할 수 있습니다.

그들 중 하나입니다 Haskell. Haskell에서는 처음부터 끝까지 순전히 기능하는 프로그램을 작성합니다. 부작용은 IO라는 데이터 구조로 위임되며 상태는 순수한 기능을 통해 전달하거나 모나드에서 캡슐화하여 처리됩니다. 따라서 코드의 작은 부분 만 글로벌 상태와 상호 작용하고 나머지 프로그램이 순수하며 순도가 언어에 의해 시행되는 "디버깅 하늘"이 있습니다.

"순도"를 주장하지 않는 한, 일반적인 LISP는 모든 요구를 지원합니다.

왜 당신이 어쨌든 기능적 프로그래밍과 OO 프로그래밍을 잘하는 언어로하는 것보다 혼합하는 것을 구체적으로 권장하는 언어를 찾고 있는지 궁금합니다. Python, Ruby, Perl 또는 유사한 해석 된 언어로 쉽게 발효 될 수 있습니다. 또한 C 기반 OO 언어는 순수한 C를 OO 기능과 혼합하는 경향이 있습니다. 예를 들어 목표 C와 같은 목표 C를 쉽게 작성할 수 있습니다.

편집 : 나는 내가 틀렸다는 것을 알게되었고, 누군가 내 실수로부터 배울 수있는 경우 에이 답을 남겼습니다. 의견을보십시오.

파이썬, JavaScript, Common Lisp, Ruby, Smalltalk, Haskell 및 Ocaml은 내 머리 꼭대기에서 벗어났습니다. 실제로 이국적인 조합이 아닙니다.

루비! 루비에서는 모든 것이 객체 (심지어 리터럴)이며 전체 기능 프로그래밍 지원이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top