문제

변수 명명 규칙에 따르면 반복자의 이름을 지정해야 합니까? i 또는 다음과 같은 더 의미론적인 것 count?사용하지 않으면 i, 왜 안 돼?당신이 그것을 느낀다면 i 허용됩니다. 사용해서는 안되는 반복 사례가 있습니까?

도움이 되었습니까?

해결책

내가 생각하는 맥락에 따라 다릅니다. 일부 컬렉션의 객체 세트를 통해 반복되는 곳이라면 상황에서 무엇을하고 있는지 상당히 분명해야합니다.

for(int i = 0; i < 10; i++)
{
    // i is well known here to be the index
    objectCollection[i].SomeProperty = someValue;
}

그러나 상황에서 즉시 명확하지 않은 경우, 귀하가하고있는 일 또는 색인을 수정하는 경우 사용법을 더 나타내는 변수 이름을 사용해야합니다.

for(int currentRow = 0; currentRow < numRows; currentRow++)
{
    for(int currentCol = 0; currentCol < numCols; currentCol++)
    {
        someTable[currentRow][currentCol] = someValue;
    }
} 

다른 팁

"나" 수단 프로그래머에게 "루프 카운터". 아무 문제가 없습니다.

다음은 완벽하게 괜찮은 또 다른 예입니다.

foreach (Product p in ProductList)
{
    // Do something with p
}

나는 매우 국한 된 루프에 i, j, k를 사용하는 경향이 있습니다 (소스 라인 수 측면에서 단기간에만 존재 함). 더 큰 소스 영역에 존재하는 변수의 경우, 더 자세한 이름을 사용하여 코드를 검색하지 않고도 무엇을 할 것인지 알 수 있습니다.

그건 그렇고, 나는 이것에 대한 명명 대회가 내가 첫 번째 정수 변수 인 초기 포트란 언어에서 나왔다고 생각합니까 (a -h는 플로트였습니다)?

i 확실히 허용됩니다. 그러나 나는 모든 단일 변수에 대해 설명 이름이없는 코드를 거부 한 C ++ 교사로부터 한 학기에 엄청난 양을 배웠습니다. 모든 것을 설명하는 간단한 행위는 내 코드에 대해 더 어렵게 생각해야했으며, C ++를 배우는 것이 아니라 학습에서 모든 것을 지명하는 것부터 그 과정 후에 더 나은 프로그램을 썼습니다. 코드 완료 이 같은 주제에 대해 좋은 단어가 있습니다.

괜찮지 만 이와 같은 것은 다음과 같습니다.

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        string s = datarow[i][j].ToString(); // or worse
    }
}

프로그래머가 실수로 I와 J를 코드에서 교체하는 것이 매우 일반적입니다. 특히 시력이 나쁘거나 Windows 테마가 "HotDog"인 경우. 이것은 항상 나에게 "코드 냄새"입니다. 이것이 망가지지 않으면 드물다.

나는 설명적인 변수 이름을 사랑하는 사람들에게도 허용 될 정도로 일반적입니다.

절대적으로 받아 들일 수없는 것 (그리고 내 책의 죄)은 루프의 정수 지수보다 다른 맥락에서 i, j 또는 k를 사용하는 것입니다 ....

foreach(Input i in inputs)
{
    Process(i);

}

나는 확실히 받아 들일 수있다. 내가 어떤 정당화를 해야하는지 잘 모르겠지만, 나는 항상 그것을 사용하고 있으며, 매우 존경받는 프로그래머들도 마찬가지입니다.

사회적 검증, 나는 추측한다 :)

그렇습니다. 실제로 코드를 읽는 프로그래머는 단순히 반복자임을 이해하기 때문에 선호됩니다.

보다 구체적인 변수 이름 대신 i를 사용하는 것의 가치는 무엇입니까?1초, 10초, 어쩌면 30초라도 생각하고 타이핑하는 시간을 절약하려면?

i를 사용하는 데 드는 비용은 얼마입니까?어쩌면 아무것도 아닐 수도 있습니다.코드가 너무 간단해서 i를 사용해도 괜찮을 수도 있습니다.그러나 아마도 아마도 나는 앞으로이 코드를 방문하는 개발자들이 잠시 "여기서 무엇을 의미 하는가?"라고 생각해야 할 것입니다. 그들은 생각해야 할 것입니다."인덱스, 카운트, 오프셋, 깃발입니까?" 그들은 생각해야 할 것입니다."이 변경 사항이 안전한가요? 맞나요? 1시까지 출발할까요?"

i를 사용하면 코드를 작성할 때 시간과 지적 노력이 절약되지만 나중에 지적 노력이 더 많이 들거나 코드를 오해하여 의도치 않게 결함이 발생할 수도 있습니다.

일반적으로 대부분의 소프트웨어 개발은 ​​유지 관리 및 확장이므로 코드를 읽는 데 소요되는 시간은 코드를 작성하는 데 소요되는 시간을 훨씬 초과합니다.

어디에서나 의미 있는 이름을 사용하는 습관을 들이는 것은 매우 쉽습니다. 일단 그런 습관을 갖게 되면 의미 있는 이름을 사용하여 코드를 작성하는 데 몇 초밖에 걸리지 않지만 읽기 쉽고 이해하기 쉬운 코드를 얻게 됩니다. 분명히 맞다.

나는 짧은 루프에 내가 사용합니다.

괜찮은 이유는 누군가가 초기화를 사용하여 반복자 유형의 선언을 볼 수 있다는 것이 완전히 불가능하다는 것을 알았 기 때문입니다. 그리고 나중에 3 줄은 변수가 무엇을 나타내는 지 명확하지 않다고 주장합니다. 그들은 "의미있는 변수 이름"이 "긴 변수 이름"을 의미해야한다고 결정했기 때문에 척하고 있습니다.

내가 실제로 그렇게하는 이유는 당면한 특정 작업과 관련이없는 것을 사용하고 작은 범위에서만 사용하기 때문에 오해의 소지가 있거나 모호하거나 모호한 이름을 사용할 수 있다고 걱정할 수 있기 때문입니다. 언젠가는 더 큰 범위의 다른 것에 유용 할 것입니다. "Q"또는 "Count"가 아닌 "I"인 이유는 수학에서 빌린 컨벤션입니다.

나는 if를 사용하지 않는다 :

  • 루프 본체는 작지 않습니다
  • 반복자는 범위의 시작부터 루프 마감까지 Advance (또는 퇴각) 외에 다른 작업을 수행합니다.

증분이 일관되고 명확 해지는 한 반드시 1의 증분으로 갈 필요는 없으며 물론 Ierand가 끝나기 전에 멈출 수 있지만 방향이 변경되거나 루프 반복으로 변하지 않습니다. (전방 루프에서 iterator.insertafter ()의 악의적 인 사용을 포함하여 다른 것을 사용하는 것을 기억하려고합니다. 이 신호는 "이것은 단지 사소한 루프 변수가 아니므로 사소한 루프가 아닐 수 있습니다".

"더 의미 론적"이 "반복자"라면 i를 사용하지 않을 이유가 없습니다. 잘 이해되는 관용구입니다.

루프 상황에서는 완전히 수용 가능하다고 생각합니다. 나는 항상 이것이 꽤 표준이라는 것을 알았으며,이 경우에 사용될 때 실제로 해석 문제가 발생하지 않았습니다. foreach-loops는 조금 까다로워지고 실제로 당신의 상황에 달려 있다고 생각합니다. 나는이 경우에 너무 설명하지 않는다는 것을 알기 때문에 나는 foreach에서만 사용하는 경우가 거의 없다. foreach의 경우, 나는 객체 유형의 약어를 루프로 사용하려고 노력합니다. 예 :

foreach(DataRow dr in datatable.Rows)
{
    //do stuff to/with datarow dr here
}

어쨌든, 내 $ 0.02.

반복되는 것을 설명하는 이름을 지정하면 도움이됩니다. 그러나 나는 보통 i를 사용합니다.

당신이 루프를 계산하기 위해 i를 사용하는 한, 또는 PL에 따라 0 (또는 1)에서 n으로 이동하는 인덱스의 일부가 괜찮다고 말합니다.

그렇지 않으면 아마도 내가 의미있는 것을 지수 이상으로 지색하기가 쉽습니다.

나는 나와 J가 행렬 지수에 대한 수학적 표기법임을 지적해야한다. 그리고 일반적으로, 당신은 배열을 반복하고 있습니다. 그래서 의미가 있습니다.

단순한 루프 안에서 일시적으로 사용하는 한, 당신이하고있는 일이 분명합니다. 즉, 대신 사용할 수있는 다른 짧은 단어가 없습니까?

i 루프 반복기로 널리 알려져 있으므로 실제로 루프 외부에서 사용하면 유지 보수 프로그래머를 혼동 할 가능성이 높지만 더 설명적인 것을 사용하는 경우 ( filecounter), 코드를 더 좋게 만듭니다.

때에 따라 다르지. 특정 데이터 세트를 반복하고 있다면 설명 이름을 사용하는 것이 더 합리적이라고 생각합니다. (예 : filecounter Dan이 제안한대로).

그러나 임의의 루프를 수행하는 경우 i 허용됩니다. 한 워크 메이트가 나에게 설명했듯이 - i "이 변수는 for 루프 구성. 그것이 사실이 아니라면 사용하지 마십시오 i"

정수 루프 카운터에 i, j, k의 사용은 Fortran의 초기 시절로 돌아갑니다.
개인적으로 나는 정수 수가있는 한 그들에게 문제가 없습니다.
그러나 나는 Fortran에서 자랐습니다!

내 느낌은 그게 개념 단일 문자를 사용하는 것은 "간단한"루프에 적합하지만 오래 전에 더블 레터를 사용하는 법을 배웠으며 훌륭하게 작동했습니다.

나는 물었다 비슷한 질문 지난주에 다음이 일부입니다 내 대답:

// recommended style              ●    // "typical" single-letter style
                                  ●
for (ii=0; ii<10; ++ii) {         ●    for (i=0; i<10; ++i) {
    for (jj=0; jj<10; ++jj) {     ●        for (j=0; j<10; ++j) {
        mm[ii][jj] = ii * jj;     ●             m[i][j] = i * j;
    }                             ●        }
}                                 ●    }
혜택이 즉시 명백하지 않은 경우 : 단일 문자를 코드를 검색하면 많은 것들을 찾을 수 있습니다. 그렇지 않습니다 당신이 찾고있는 것. 그 편지 i 원하는 변수가 아닌 코드에서 자주 발생합니다.

나는 적어도 10 년 동안 이런 식으로 해왔다.

많은 사람들이 위의 둘 중 하나가 "못생긴"이라고 언급했다.

나는 곡물에 대항하여 거절 할 것입니다.

"나는 반복자로 이해된다"고 말하는 군중의 경우, 그것은 사실 일 수 있지만, 그것은 '값 5 할당을 변수 Y에 할당하는 것과 같은 주석과 동일하다. 어떻게.

이전 답변에서 예제를 사용하려면 :

for(int i = 0; i < 10; i++)
{
    // i is well known here to be the index
    objectCollection[i].SomeProperty = someValue;
}

그렇게 의미있는 이름을 사용하는 것이 훨씬 어렵습니까?

for(int objectCollectionIndex = 0; objectCollectionIndex  < 10; objectCollectionIndex ++)
{
    objectCollection[objectCollectionIndex].SomeProperty = someValue;
}

(빌린) 변수 이름 ObjectCollection은 꽤 나쁘게 지명되었습니다.

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