2012-06-20 2 views
-1

내 게임이 OOP 대신 기능적 스타일로 어떻게 보이는지 궁금합니다. 여기JavaScript OOP를 기능으로 변환하는 방법

는 Node.js를 코드의 핵심 라인은 다음과 같습니다

if (!player.owns(flag) && player.near(flag) && flag.isUnlocked()) { 
    player.capture(flag); 
} 

내 생각이었다, 그것은 다음과 같을 수 있습니다 :

var canCapture = [not(owns), isNear, canUnlock].every(function(cond) { 
    return cond(playerData, flagData); 
}); 

if(canCapture) { 
    // how to capture? 
} 

그러나 확실하지, 기능 코더를 경험하지로. 주제에 가까운 모든 대답에 관심이 있습니다 (다른 프로그래밍 스타일에서도 가능).

+1

OOP 부분이 코드에 있는지 모르겠습니다. 아니면이 용어로 이해할 수도 있습니다. –

+0

메서드가 "owns", "near", "capture"인 Player 클래스 인스턴스가 있습니다. 또한 "isUnlocked"메서드를 사용하여 Flag 클래스 인스턴스를 가질 수도 있습니다. – Kasztan

+0

하지만 그 물체는 여전히 남아있을 것입니다. 그래서 그들은 OOP에서 기능적으로 변환되지 않을 것입니다 ...** 실제로 함수/값의 배열을 제공 할 수있는'All' 술어를 작성하고 모두가 '사실'일 때'true'를 반환해야합니까? ** –

답변

1

은 다음과 같이 다소 볼 수 있었다 : capturingPlayer 누구의 차이 player에 그입니다 깃발을 캡처 한 새로운 객체는

if (!player.owns(flag) && player.near(flag) && flag.isUnlocked()) { 
    capturingPlayer = player.capture(flag); 
} 

입니다. playercapture으로 전화하여 수정되지 않습니다.

당신은 (즉 의미 할 수 무엇이든)는 "비 OO"구문

if (!owns(player, flag) && near(player, flag) && isUnlocked(flag)) { 
    capturingPlayer = capture(player, flag); 
} 

확장하고 희망 조금 명확히하기 위해 선호하는 경우 : 고용 의미에서,

기능 프로그래밍 함수 프로그래밍 커뮤니티는 이 아니며은 "함수/프로 시저가 최상위 클래스 객체"라는 것을 의미합니다.

어떤 것이 무슨 뜻 모든 함수 값을 반환 즉

  • , 함수는 수학 감각 기능 때문이다.
  • 모든 함수는 동일한 인수가 전달 될 때마다 동일한 값을 반환합니다.
  • 함수에는 부작용이 없습니다. 변경 가능한 객체 나 할당이 없습니다.

개체의 메서드가 개체를 변형시키지 않는 한 실제로 "기능적 스타일"로 프로그램을 변경할 필요가 없습니다.


편집 :

불행하게도 "기능"과 "객체 지향"(특히)이 꽤 개념을 잘못 정의되어 모두.
"객체 지향"의 정의를 찾으십시오. 적어도 정의하려는 사람들만큼 많은 정의가 있습니다.
함수 프로그래밍에 대한 이해를 얻으려면 John Hughes가 Why functional programming matters을 적어도 두 번 읽으십시오.

+0

오, 해명 해줘서 고마워! 함수 프로그래밍은 종종 불변 객체로 제한된 OO 프로그래밍 (일반적으로)이라는 것을 의미합니까? 다음과 같을 수 있습니다 :'if (! player.owns (flag) && player.near (flag) && flag.isUnlocked()) {player = player.capture (flag); }' – Kasztan

+1

@Kasztan : 아니, 그렇지 않습니다. 필자가 의도 한 바는 구문이 필수는 아니며 도트 표기법과 불변의 "객체"를 사용하여 "기능적 스타일"로 작성하는 것이 가능하다는 것입니다. 그래도별로 일반적이지 않습니다. – molbdnilo

관련 문제