2016-08-16 4 views
-1

여러 번 저에게 일어난 일로 인해 결과를 알았을 때 어떻게 기능을 멈춰야하는지 잘 모르겠습니다.모범 사례 - JS 기능으로 돌아 왔을 때

{ 
    "name": "CategoryName", 
    "subCategoriess": [{ 
     "name": "Sub1", 
     "value": true 
    }, { 
     "name": "Sub2", 
     "value": false 
    }] 
} 

우리가 value === true

CLASIC 옵션 (현실을 부르 자 찾아 낼 때까지 우리는 그것을 반복 할 : 옵션 1를 그냥 예를 들어

우리의 모습 개체 범주가 상상할 수 있습니다) 대부분의 설명서에서 찾을 수 있습니다 :

function myFunction(category){ 
    var ret = false; 
    for (var i=0; i <category.subCategoriess.length; i++) 
    { 
    ret = category.subCategories[i].value; 
    if (ret) 
     break; 
    } 
    return ret; 
} 

다음과 같은 것을 보았습니다. 이 (현실을 부르 자 : 옵션 2) :

function myFunction(category){ 
     for (var i=0; i <category.subCategoriess.length; i++) 
     { 
     if (category.subCategories[i].value) return true; 
     } 
     return false; 
    } 

는 그래서이 두 가지 옵션을 비교하자, 나는 내가 틀렸을 수도 주니어로 내 자신을 고려 정말 쉽게 그렇게 말해 주시기 바랍니다

  • 옵션 1 -이 옵션의 장점은 코드가 더 복잡하더라도 실제로 어떤 return이 함수를 "반환"하는지 항상 알고 있기 때문에 많은 사람들이 디버그하기가 더 쉽다는 것을 기대합니다.
  • 옵션 2 -이 옵션의 장점은이 추가적으로 variabile (ret)가 필요 나던 becuase 덜 성능을 사용해야합니다 + 우리가 basicly 우리가 for 루프 실제 return 한 Statment
을가는 휴식이어야 한 단계를 피할 수 있다는 것입니다

이 특정 예제에서 각 옵션 간의 차이는 실제로는 0에 가깝습니다. 그러나 코드가 복잡해질 수 있으므로 어떤 옵션이 모범 사례입니까 (또는 뭔가를 놓치면 옵션을 추가하십시오) 왜 이런 식으로 사용해야합니까?

+2

둘 이상의 'return' 문을 사용하는 데는 아무런 문제가 없습니다. – gcampbell

+1

주어진 상황에서 더 읽고 이해할 수있는 것이 무엇이든간에. 따라야 할 엄격한 규칙이나 템플릿은 하나도 없습니다. 주어진 문제를 해결하는 데 가장 적합한 방식으로 작성합니다. – deceze

+1

이것이 스타일에 관한 질문이라고 생각합니다. 많은 것은 누가 코드를 읽고 있는지에 달려 있습니다. 다른 사람들은 옵션 2를 더 쉽게 찾을 수 있지만 어떤 사람들은 이해하기 쉬운 옵션 2를 찾습니다. 자신의 개인 프로젝트에서 작업 할 때 가장 적합한 스타일을 선택할 수 있습니다. 다른 대중적인 프로젝트에서 흔히 볼 수있는 공통점을 선택하기도합니다. 다른 시간은 당신을 위해 가장 떨어지는 것을 골라냅니다. 핵심은 프로젝트 내에서 일관성을 유지하는 것입니다. 내 개인 스타일은 수년에 걸쳐 여러 번 변경되었습니다. – Sukima

답변

1

이 두 옵션 다음 더이며이 내려 온다 :

(또는 팀)이 가장 낮은인지 부하 더 이해 찾을 않는 읽다?

일부 절차 코드는 더 쉽습니다. 일부는 일찍 돌아가서 임시 변수를 낮추려고 시도합니다. 여전히 기능적 접근법을 더 잘 찾는 사람도 있습니다.

return subject.collection.some(function (item) { 
    return !!item.value; 
}); 

따라서 팀과 자신의인지 적 선호도가 달라집니다. 진정한 탈출구는 프로젝트에서 일관성을 유지합니다. 하나의 스타일로 시작하여 새로운 스타일이 마음에 드는 것을 발견하면 README에이 스타일을 기록해 두었다가 이전 스타일을 볼 수 있도록 변환하십시오.

1

이 질문에 대한 유일한 답은

일반적으로 여러 return 문이 조금 더 열심히 디버깅 할 수 (코드 복잡도에) 의존하지만 때로는 그것이 가치가있다.

이 메서드는 true/false 값만 반환하는 것이 확실한 경우 두 번째 옵션을 사용하는 것이 좋습니다. 하지만 앞으로의 기능을 확장하고 싶으면 (조건을 충족 시키거나 모든 값을 얻는 레코드를 가져와야합니다.) 첫 번째 옵션으로 가기가 더 쉬울 수 있습니다.

1

결과를 저장하기 위해 매개 변수가 필요하지 않으므로 옵션 2를 사용할 수 있으며 가능한 한 빨리 반환하기 때문에 의도가 명확합니다.

반복하면서 각 항목을 저장하여 가독성과 성능을 약간 향상시킬 수도 있습니다.

for (var i = 0, item; item = category.subCategoriess[i]; i++) { 
    if (item.value) return true; 
} 
return false; 
-3

어떻게 옵션 3어떻습니까?

Array.some을 사용하면 break 또는 복수 return 문을 필요로하지 않으므로 두 세계에서 가장 좋습니다.

var category = { 
 
    "name": "CategoryName", 
 
    "subCategoriess": [{ 
 
     "name": "Sub1", 
 
     "value": true 
 
    }, { 
 
     "name": "Sub2", 
 
     "value": false 
 
    }] 
 
} 
 

 
function myFunction(category){ 
 
    var result = category.subCategoriess.some(function(subCategory) { 
 
    return subCategory.value; 
 
    }); 
 
    
 
    return result; 
 
} 
 

 
console.log(myFunction(category))

+1

어쨌든 주제를 벗어난 질문을 다루는 것이 아니며 변수는 실제로 그 위치에서 불필요합니다. –

관련 문제