답변:
때문에 i
와 j
나타내는 두 기능입니다 허수 단위를 :
라는 변수 그래서 i
하거나 j
그들을 무시합니다, 잠재적으로 자동으로 차단 코드 복잡한 수학 않습니다.
가능한 해결책은 대신 ii
및 jj
변수로 루프 변수를 사용하거나 가상 단위를 나타내는 데 필요할 1i
때마다 사용 i
하는 것을 포함합니다.
i
및 j
변수 이름을.
for
10 억 회 루프를 호출하는 간단한 테스트 는 타이밍의 통계적 차이를 보여주지 않는다). 모두를 위해 우리가 특별한 코드가 핸들이 알고 정확히 이것 이외의 다른 변수를 사용하여 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
일반 루프 변수 이름으로.