답변:
때문에 i와 j나타내는 두 기능입니다 허수 단위를 :
라는 변수 그래서 i하거나 j그들을 무시합니다, 잠재적으로 자동으로 차단 코드 복잡한 수학 않습니다.
가능한 해결책은 대신 ii및 jj변수로 루프 변수를 사용하거나 가상 단위를 나타내는 데 필요할 1i때마다 사용 i하는 것을 포함합니다.
i및 j변수 이름을.
for10 억 회 루프를 호출하는 간단한 테스트 는 타이밍의 통계적 차이를 보여주지 않는다). 모두를 위해 우리가 특별한 코드가 핸들이 알고 정확히 이것 이외의 다른 변수를 사용하여 i과 j(와 k?) 약간 느린 사실이다. 그리고 존재하는 차이점은 실생활에는 존재하지 않는 것입니다. 단순히 사용하지 않을 이유가 없습니다 i및 j일반 변수는 다른 모든 매트랩 기능처럼 적절하게 사용되어야한다 - 그들은으로는.
for루프를 10 억 번 호출 하고 모든 방식의 타이밍 체계를 시도 할 때 아무런 차이가 없었 습니다. 나는 새로운 SO 사용자에게 루프를 사용 i하고 j반복 하기 때문에 완벽하게 유효한 코드가 잘못되었다는 말을 듣고 있습니다. 솔직히 그냥 바보 사람들은이 질문의 중요한 점을 누락 : 그 i와 j하나가 읽을 수있는 현대 MATLAB 코드를 작성하고자하는 경우에도 허수 단위에 사용되어서는 안된다.
그것은 방지 할 수있는 좋은 방법입니다 i및 j그 변수 또는 허수 단위 것에 대해 혼란을 방지하기 위해 변수를.
개인적으로, 그러나, 내가 사용 i하고 j짧은 루프의 변수로 꽤 자주 인덱스를. 내 자신의 코드에 문제가 발생하지 않도록하려면 나는에 대한 또 다른 좋은 연습 수행 i과 j: 하지 않는 가상의 번호를 표시하기 위해 그들을 사용합니다. 실제로 Matlab의 자체 문서는 다음과 같습니다.
속도와 향상된 견고성를 들어, 복잡한 대체 할 수있는
i과j에 의해1i.
따라서 잠재적 충돌로 인해 일반적으로 사용되는 두 가지 변수 이름을 피하는 대신 허수에 대해 명시 적입니다. 또한 내 코드를 더 명확하게 만듭니다. 내가 볼 1i때 마다 sqrt(-1)변수가 될 수 없기 때문에 그것이 나타내는 것을 알고 있습니다.
i하고 j최선을 다하지만, 내 개인적인 코딩 스타일이 그 규칙을 따르지 않는 방법을 설명했다.
1i아닌 항상 사용하는 것 i입니다. 의이 같은 허수를 생각하자 1i및 걸릴 i허수로 나쁜 연습. 다른 방법은 아닙니다. 사용 i, ii, iii매트랩 일반적입니다 사람들이 충실 문제가없는 1i및 1j복잡한 번호는. 또한 Matlab은 이것을 존중하며 이전 답변에서 언급 한대로 성능을 저하시키지 않습니다.
MATLAB의 이전 버전에서의 사용을 피하기 위해 좋은 이유가있을 사용 i하고 j변수 이름과 같은를 - 다양한 MATLAB JIT의 초기 버전 그러므로 것입니다 당신이 변수로 또는 가상 장치로 사용하고 있던 여부를 알 수있는 영리 충분하지 있었고, 가능한 많은 최적화를 끄십시오.
따라서 코드는 변수의 존재 i와 j변수로 인해 속도 가 느려지고 다른 것으로 변경하면 속도가 빨라집니다. 당신이 많은 매스 웍스의 코드를 읽는다면, 당신은 볼 이유의 그 ii와 jj루프 인덱스로 매우 널리 사용. 한동안 MathWorks는 비공식적으로 사람들에게 스스로 그렇게하도록 조언했을 수도 있습니다 (비록 그들은 공식적으로 사람들에게 항상 현재 JIT가하는 것보다는 우아함 / 유지 보수를 위해 프로그램하도록 권고합니다).
그러나 그것은 오래 전에 이루어졌으며, 오늘날 많은 사람들이 생각하는 것보다 훨씬 덜 중요하지만 죽기를 거부하는 "좀비"문제입니다.
최근 버전에서는, 정말 여부 사용에 대한 개인적인 취향입니다 i및 j변수 이름이나하지. 복잡한 숫자와 많은 작업을 할 경우, 당신은 회피 할 수 있습니다 i그리고 j당신은 또한 / 대신에서만 사용할 수 있지만 변수로, (혼란의 작은 위험을 피하기 위해 1i또는 1j더 적은 혼란, 그리고 약간의 성능 향상을 위해 ).
반면에, 일반적인 작업에서는 복잡한 숫자를 다루지 않으며 자유롭게 사용 i하고 j루프 인덱스 로 사용하면 코드를 더 읽기 쉽습니다.
나는 추천하지 않는다는 것을 말하는 많은 대답을 보았습니다 ... 누가 그 권고를하고 있는지 말하지 않고. 다음은 현재 릴리스 문서에서 MathWorks의 실제 권장 사항 범위입니다 i.
i는 함수이므로 재정 의하여 변수로 사용할 수 있습니다. 그러나 복잡한 산술에서 변수 이름을 사용하려는 경우 변수 이름에 i 및 j를 사용하지 않는 것이 가장 좋습니다. [...] 속도와 향상된 견고성을 위해 복잡한 i와 j를 1i로 대체 할 수 있습니다.
다른 답변에서 설명한 것처럼 i일반적인 코드 사용은 두 가지 이유로 권장되지 않습니다.
으로 제안 : 1i및 ii권장합니다. 그러나이 두 가지가 모두 미세한 편차이지만 i두 가지 대안을 함께 사용하는 것은 좋지 않습니다.
(개인적으로) 내가 싫어하는 이유는 다음과 같습니다.
val2 = val + i % 1
val2 = val + ii % 2
val2 = val + 1i % 3
하나는 둘 또는 셋에 대해 쉽게 읽히지 않을 것이지만 둘과 셋은 서로 닮았습니다.
따라서 개인적 권장 사항은 다음과 같습니다. 복잡한 코드로 작업하는 경우 항상 1i다른 루프 변수와 함께 사용 하십시오.
당신이 많은 루프 변수와 문자로 충분를 사용하지 않는 경우에 대한 것을 하나의 편지 지표의 예 : t, u, k및p
더 이상 인덱스의 예 : i_loop, step, walk, 및t_now
물론 이것은 개인적인 취향의 문제이지만 너무 오래 자라지 않고 명확한 의미를 갖는 지표를 찾기가 어렵지 않아야합니다.
doc i와 doc j"속도와 향상된 견고성를 들어, 1I하여 복잡한 i와 j를 교체 할 수 있습니다." IMO, 현재 matlab에 사용하지 이유가 없다 i와 j등 루프에서, 또는 이외의 사용 아무것도 1i(가상 장치를 나타 내기 위해 1j작동도). 항상 약간 호환되지 않는 Symbolic 엔진에 문자열을 전달하는 경우는 예외입니다. 이상한 그 help 1i와 doc 1i하지만 일을하지 않습니다.
그것은 1i받아 들일 수 있고 모호한 작성 방법 sqrt(-1)이며, 따라서 사용을 피할 필요가 없다고 지적되었다 i. 데니스 (지적 그럼 다시, https://stackoverflow.com/a/14893729/1967396 ), 그것의 차이 볼 어려울 수 있습니다 1i와 ii. 내 제안 : 1j가능한 경우 가상 상수로 사용하십시오. 그들이 사용하는 - 그것은 전기 엔지니어가 사용하는 것과 같은 트릭 j을위한 sqrt(-1)때문에 i이미 소요되어 현재 .
필자는 개인적으로 사용하지 않습니다 i및 j; 내가 사용 ii하고 jj속기 색인 변수 (및 KK, LL, mm, ...)과 같은 1j때 복잡한 번호를 사용해야합니다.
1i와 ii사이 그리고 더의 차이" 1와 l사이 O와 0. 이것이 MATALB을 새로 설치하는 첫 번째 단계가 기본 글꼴 크기를 변경하는 이유입니다.
가상의 단위와의 혼동은 여기에서 잘 다루어졌지만 이것들과 다른 단일 문자 변수 이름이 때때로 권장되지 않는 다른 더 많은 이유가 있습니다.
MATLAB 특히 : MATLAB 코드에서 C ++ 소스를 생성하기 위해 코더를 사용하는 경우 (끔찍하지는 않지만) 잠재적 인 타이핑 충돌로 인해 변수를 재사용하지 않도록 명시 적으로 경고합니다.
일반적으로 IDE에 따라 단일 문자 변수 이름이 형광펜 및 검색 / 바꾸기를 방해 할 수 있습니다. MATLAB 은이 문제를 겪지 않으며 Visual Studio는 한동안 문제가 없었지만 MISRA와 같은 C / C ++ 코딩 표준은 다시 조언하는 경향이 있습니다.
필자는 수학 소스를 직접 구현하는 명백한 이점에도 불구하고 모든 단일 문자 변수를 피합니다. 처음 몇 백 번은 약간의 추가 노력이 필요하지만 그 후에는 눈치 채기를 그만두고, 자신이나 다른 가난한 영혼이 코드를 읽을 때 얻는 이점은 군단입니다.
사소한 코드에는 여러 for루프 가 포함되어 있으므로 모범 사례에서는 목적과 범위를 나타내는 설명이 포함 된 이름을 사용하는 것이 좋습니다. 에 대한 시간 먼 옛날 (내가 저장하지 않을거야 자사의 5 ~ 10 개 라인 스크립트 제외), 난 항상 같은 변수 이름을 사용하고 idxTask, idxAnotherTask과 idxSubTask등
아니면 적어도 그것이 예를 들어 인덱싱 된 배열의 첫 글자 배에 ss인덱스를 subjectList, tt색인 taskList,하지만 ii나 jj있는 나를 쉽게 그들이 루프 내 여러 밖으로 인덱싱 된 배열을 식별하는 데 도움이되지 않습니다.
기본적 i와 j허수 단위 스탠드. MATLAB의 관점 i에서 변수로 사용 하는 것은 어떻게 든 변수로 사용하는 1것과 같습니다 .
i와 j실제로 허수 부 값을 반환하는 함수이다. 범위의 함수와 이름이 같은 변수를 사용할 수 있습니다. 그러나 이것은 기능을 어둡게합니다.
당신이 매우 혼란스러운 사용자가 아니라면 변수 이름 i 와 j 를 사용할 때 위험이 거의 없다고 생각 하고 정기적으로 사용합니다. 이 관행을 피해야한다는 공식적인 징후는 보지 못했습니다.
상상의 단위를 그림자로 표시하면 다른 게시물에서 언급 한 것처럼 일부 상황에서 혼란을 초래할 수는 있지만 전반적으로 주요 문제로 보지 않습니다. MATLAB에서 할 수있는 훨씬 더 혼란스러운 일이 있습니다.false=true
내 의견으로는 아마도 피해야 할 유일한 시간은 코드가 가상의 숫자를 다루는 경우뿐입니다.
i,j,k일반 루프 변수 이름으로.