일반적으로 여기에 게시 된 코드가 표시되면 가로 스크롤이 싫어서 편집합니다. 그러나 이것이 귀하의 질문의 일부이므로 여기에서 편집 내용을 보여 드리겠습니다.
int extractMessage(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
int lengthOfWord = 0;
int lengthOfCipher = 0;
lengthOfWord = length(keyWord);
lengthOfCipher = length(cipherText);
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
continue;
}
}
}
그 틈은 놀라운 일이 될 수도 있지만, 수평 스크롤 버전보다 더 읽기, 그리고 그것으로 이름을 단축보다 더 나은 i
, j
그리고 k
.
그것은 당신이 사용하지 않을 것이 아니라 i
, j
하고 k
. 이들은 3 개의 중첩 for
루프를 색인 할 때 좋은 이름 입니다. 그러나 여기서 이름은 실제로 당신이 일어날 것으로 예상되는 것에 대한 유일한 단서입니다. 특히이 코드는 실제로 아무것도하지 않기 때문에.
변수 이름 길이를 따르는 가장 좋은 규칙은 범위입니다. 변수가 오래 살수록 이름이 경쟁하는 변수가 더 많아집니다. CandiedOrange 라는 이름 은 스택 교환에서 고유합니다. 우리가 대화중이라면 그냥 "캔디"라고 불러 그러나 지금은 그 이름이 Candide , Candy Chiu 또는 Candyfloss 와 혼동 될 수있는 범위에 있습니다 . 따라서 범위가 길수록 이름이 길어집니다. 범위가 짧을수록 이름이 짧아 질 수 있습니다.
줄 길이는 이름 길이를 지시 해서는 안됩니다 . 느낌이 든다면 코드를 배치하는 다른 방법을 찾으십시오. 이를 수행하는 데 도움이되는 많은 도구가 있습니다.
내가 찾은 첫 번째 것 중 하나는 불필요한 잡음을 제거하는 것입니다. 불행히도이 예제는 아무 것도하지 않기 때문에 불필요한 노이즈입니다. 작업 할 무언가가 필요하므로 먼저 무언가를 해보자.
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
int lengthOfWord = 0;
int lengthOfCipher = 0;
lengthOfWord = length(keyWord);
lengthOfCipher = length(cipherText);
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
continue;
}
}
return cipherColumn;
}
거기, 이제 뭔가를합니다.
이제 무언가를했기 때문에 제거 할 수있는 것을 볼 수 있습니다. 이 길이의 물건은 사용되지 않습니다. 이것은 continue
아무것도하지 않습니다.
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
}
}
return cipherColumn;
}
소스 컨트롤의 세계에 살고 있기 때문에 약간의 공백을 조정 해 봅시다. 라인이 변경된 것으로보고되는 유일한 이유는 라인의 일부가 열에 정렬되어 있어야하기 때문에 다른 무언가를하고 있기 때문입니다.
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
}
}
return cipherColumn;
}
예, 약간 읽기 쉽지는 않지만 vdiff 도구를 사용하여 변경 사항을 감지하는 사람들을 미치게 만들 것입니다.
이제 우리는 줄 길이 제한을 유지하기 위해 가지고있는이 바보 같은 줄 바꿈을 수정 해 봅시다.
int calcCipherColumn(
char keyWord[25],
char cipherText[17424],
int rowSize,
char message[388]
) {
int keyColumn = 0;
int keyOffset = 1;
int nextWord = 1;
int cipherColumn = 0;
int cipherOffset = (rowSize * nextWord) + nextWord;
char key = keyWord[keyColumn];
char keyNext = keyWord[keyColumn + keyOffset];
while (key != cipherText[cipherColumn]) {
cipherColumn++;
if (keyNext != cipherText[cipherColumn + cipherOffset]) {
cipherColumn++;
}
}
return cipherColumn;
}
이제 루프의 논리는 루프의 변경 사항에 중점을 둡니다. 실제로,를 제외한 모든 cipherColumn
것이 표시 될 수 있습니다 final
. 그리고 이봐! 저것 봐. 이제 할 공간이 있습니다.
내가 한 것은 변수를 3 개 더 추가하고 이름을 바꾸고 조금 재정렬하는 것입니다. 그리고 결과는 어리석은 줄 바꿈없이 줄을 짧게 만들었습니다 !=
.
물론 이름 key
과 keyNext
입니다하지 그 설명하지만, 한 번 익숙해 각각, 그 길지 않은 라이브 할, 그리고 가장 중요한 루프에 흥미 것이 아무것도 없습니다. 따라서 그럴 필요는 없습니다. 추가 변수를 도입하여 필요한 경우 이름을 길게 만들 수있는 공간이 생겼습니다. 상황이 변하기 때문에 결국에는 필요할 수도 있습니다. 우리가 호흡 공간을 가지고있는 것이 좋습니다.
또한 라인 길이 제한을 존중하기 위해 입력 매개 변수를 배치하는 Jeff Grigg의 형식 6 변형 스타일을 자유롭게 보여 주었습니다.
cipherColumn + (rowSize*nextWord) + nextWord
는 그 계산이 분명한 그 차종 에 대한을 예를 들어,? 그 이름이 계산보다 짧을 것이므로 가독성 이점 과 줄 길이가 줄어 듭니다. 또한 할당을 정렬하지 않거나 가장 긴 변수의 이름을 바꾸면 모두 이동해야합니다.