웹에서 언어가 객체 지향 또는 함수 호출과 같은 일부 개념을 지원하지 않는 경우 웹에서 여러 번 읽었 으며이 다른 상황에서는 모범 사례로 간주됩니다.
내가 지금 볼 수있는 유일한 문제는 다른 프로그래머가 평소와 너무 다른 코드를 발견하여 프로그래밍하기가 어렵다는 것입니다. 이로 인해 다른 문제가 발생할 수 있다고 생각하십니까?
웹에서 언어가 객체 지향 또는 함수 호출과 같은 일부 개념을 지원하지 않는 경우 웹에서 여러 번 읽었 으며이 다른 상황에서는 모범 사례로 간주됩니다.
내가 지금 볼 수있는 유일한 문제는 다른 프로그래머가 평소와 너무 다른 코드를 발견하여 프로그래밍하기가 어렵다는 것입니다. 이로 인해 다른 문제가 발생할 수 있다고 생각하십니까?
답변:
문제 중 하나는 다른 언어로 할 수있는 방식으로 무언가를 표현하기 위해 많은 코드를 작성하고 자신이 사용하는 언어에보다 직접적인 방법이 있다는 것입니다.
예를 들어, Stack Overflow에 대한 답변 에서 .NET Framework에서 사용되는 개념 인 코드 계약을 지원하지 않는 PHP에서 부분적으로 에뮬레이션하는 방법을 설명했습니다. 간단한 배열로도 같은 일을 할 수 있었기 때문에 많은 코드를 작성하지 않았습니다.
보다 일반적으로, 각 언어에는 고유 한 문화, 고유 한 모범 사례, 고유 한 스타일이 있습니다.
C와 같은 C # 코드 작성을 시작하면 추악한 것입니다.
Haskell을 강제로 사용하는 Java 개발자로 Haskell을 체포하지만 그 강점을 이해하고 싶지 않고 Java의 개념을 복제하려는 경우 필자가 작성하는 코드가 손상됩니다.
기타
언어 를 향상 시키려는 것은 잘못된 일이 아닙니다 (예 : F #에서와 같이 측정 단위를 도입 하여 C # 향상 ). 너무 많이 수행하는 경우 실제로 필요에 맞는 다른 언어를 선택해야합니다.
가독성이 떨어지면 그 자체로는 문제가 충분합니다. 광범위한 교육을받지 않고도 프로젝트를 유지 관리 할 수있는 사람들의 수가 크게 줄어 듭니다.
게다가,
종이에 나타나는 것만 큼 좋은 생각은 아닙니다.
예 1 : 나이가 충분하다면 C가 도시의 새로운 아이였던 시절을 기억할 것입니다. Pascal과 Ada 프로그래머는 C의 간결한 열기 및 닫기 버팀대를 좋아하지 않았습니다. 그들은 #define에 의해 정의 begin
및 end
열린 중괄호 닫는 중괄호, 짜잔로! 카드 다! 불행한 결과는 Ada 또는 C의 관점에서 추악했습니다.
예제 2, 개인 : Common Lisp Object System에서 내가 정말 좋아했던 것 중 하나는 이전, 이후 및 주변 메소드입니다. 여러 곳에서 매우 편리하게 사용할 수 있습니다. 그래서 나는 몇 가지 선택된 장소에서 C ++ 로이 개념을 모방했습니다. C ++에서 이러한 구문을 에뮬레이트하는 유일한 방법은 파생 클래스 개발자가 코드의 올바른 위치에서 같은 이름의 부모 클래스 메서드를 호출하도록하는 것입니다. 이것은 C ++ 프로그래밍에 다소 익숙하지 않은 클래스에서 파생 된 개발자 및 C ++ 프로그래밍에 대해 요구 사항을 제시했습니다. 이 요구 사항이 아무리 잘 문서화 되었더라도 사람들은 C ++ 패러다임에 맞지 않기 때문에 지침을 따르지 않았습니다.
다른 언어에서 개념을 모방하면 어떤 문제가 발생할 수 있습니까?
out
실제로 매개 변수를 지원하지 않는 프레임 워크에서 매개 변수 를 에뮬레이트하려는 C #의 시도입니다 . C #에서는 모든 함수가 항상 모든 out
매개 변수에 기록한다고 가정 하지만 C # 메서드가 호출하는 비 C # 메서드는 그러한 보장을 제공하지 않습니다.
엄청나게 어려울 수 있습니다. C #에서 Java 애플리케이션으로 LINQ를 구현하려고한다고 상상해보십시오. 아니면 어휘 폐쇄를 언어에 추가하는 것은 어떻습니까? 새로운 컴파일러를 작성해야 할 것인데, 이는 새로운 언어를 제공합니다.
또는 자신의 언어를 구현할 필요가없는 경우에는 코드 블록이나 람다 함수 또는 클로저 또는 함수가없는 언어에서 우선 순위 함수 (예 :지도)를 사용하여 컬렉션 메서드를 구현하려고한다고 상상해보십시오. 클래스 객체. 모든 고차 함수는 인터페이스로 선언되고 명시 적으로 구현되어야하며 클로저에서 캡처 된 모든 상태는 구현 클래스에 명시 적으로 저장되어야합니다. 너무 많은 타이핑과 읽기가 너무 어려워서 종종 가치가 없습니다.