2014-04-30 3 views
0

많은 로직이 포함 된 2 인용 체스 게임을 만들고 있습니다. 많은 논리, 상속 및 코드 구성을 포함하는 프로그램을 작성한 것은 이번이 처음입니다. 필자는 스파게티 코드와 기능이 뛰어나 자신이 한 가지 일을하는 것을 제한하지 않는 것이 좋은 습관이라는 것을 알고 있습니다. 필자는 스파게티 코드를 제한하는 아이디어를 생각하려고 시도했지만 그것에 대한 최선의 방법은 불확실하다. 여기에 내가 많이 들어가는 예가있다.자바 스크립트, 스파게티 코드 및 조직 문제

if (that.selected && that.selected != target) { 
    if (that.positions[target] && that.positions[target].color == piece.color) { 
     ... 
    } else { 
    var ind = xyz...; 
    if (piece.type == "king" && ind != -1) { 
    } else { 
    ... 
    } 
    } 

내 최고의 아이디어 지금까지이 대신 내가 좋아하는 뭔가를 할 수 내 게시 된 코드의 첫 번째 줄의 (예를 들어, 별도의 기능에 조건문을 이동하는 것입니다 감소 ...

var selected_non_target = selectedNonTarget(that.selected, target); 
if (selected_non_target) { 
    continue above code; 
} 
function selectedNonTarget(selected, target){ 
    if (selected && selected != target) { 
    ... maybe do some stuff ... 
    return true; 
    } 
} 

하지만 이것이 어떻게 도움이되는지, 훨씬 더 많은 코드인지는 모르겠다. 여기에 저장소가있다. 나는 어떤 제안이라도 좋아할 것이다. https://github.com/natecraft1/javascript_chess/blob/master/index.html

답변

1

나는 당신의 제안이 좋은 출발이라고 생각한다. 조금만 - 처음에는 필요 없음 var :

if (selectedNonTarget(that.selected, target)) 
{ 
    // continue above code; 
} 

function selectedNonTarget(selected, target){ 
    // return a bool -- resist the urge to do other things here 
    return (selected && selected != target); 
} 

이것은 복합 조건을 잘 명명 된 함수로 축소 한 다음 간단한 참 true | 당신의 주된 논리에서 거짓. 이렇게하면 코드 기반이 커짐에 따라인지 부하를 줄일 수 있습니다. 조금씩 도움이됩니다.

는 물론 우리 모두가 &&!=이 뜻하는 것을 이해 할 수 있지만, 코딩 12 시간 후 오전 2시에서, 당신은 더 적은 오류가 발생하기 쉬운 if (selectedNonTarget(that.selected, target))

와 나는 또한 강하게 약간의 시간 분할을 보내는 것이 좋습니다 수 있습니다 당신이 여러 파일에 가지고있는 코드의 1000 줄 정도. 당신은 이것을 가치있게 발견 할 것입니다.

+0

간단한 부울 검사 만 수행하는 경우에도 함수를 만드는 것이 좋습니다. – natecraft1

+0

나는 그것이 복합 조건 인 경우에만 가치가 있다고 말할 것입니다. 이름을 잘 지을 수 있으며 복합 조건이 여러 곳에서 사용되었을 수도 있습니다. 복합 조건에 세 개 이상의 조건이있을 때 보수가 좋습니다. –