Normalement, quand je vois du code affiché ici comme le vôtre, je le modifie, car nous détestons le défilement horizontal. Mais puisque cela fait partie de votre question, je vais vous montrer le montage ici:
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;
}
}
}
Cette pause peut surprendre, mais il est plus lisible que la version avec défilement horizontal, et il vaut mieux que raccourcir les noms i
, j
et k
.
Ce n'est pas que vous ne devez jamais utiliser i
, j
et k
. Ce sont de bons noms lors de l'indexation de 3 for
boucles imbriquées . Mais ici, les noms sont vraiment mon seul indice sur ce que vous attendiez. D'autant plus que ce code ne fait rien.
La meilleure règle à suivre sur la longueur du nom de variable est la portée. Plus une variable vit longtemps, plus il y a de variables avec lesquelles son nom doit rivaliser. Le nom CandiedOrange est unique sur l'échange de pile. Si nous étions en discussion, tu pourrais juste m'appeler "Candy". Mais en ce moment, vous êtes dans une perspective où ce nom pourrait être confondu avec Candide , Candy Chiu ou Candyfloss . Donc, plus la portée est longue, plus le nom doit être long. Plus la portée est courte, plus le nom peut être court.
La longueur de ligne ne doit jamais dicter la longueur du nom. Si vous en avez envie, trouvez une autre façon de présenter votre code. Nous avons de nombreux outils pour vous y aider.
L'une des premières choses que je recherche, c'est le bruit inutile pour s'en débarrasser. Malheureusement, cet exemple ne fait rien, donc tout ce bruit inutile. J'ai besoin de quelque chose avec lequel travailler alors commençons par faire quelque chose.
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;
}
Là, maintenant ça fait quelque chose.
Maintenant qu'il fait quelque chose, je peux voir de quoi je peux me débarrasser. Ce truc de longueur n'est même pas utilisé. Cela continue
ne fait rien non plus.
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;
}
Faisons quelques ajustements mineurs dans les espaces blancs, car nous vivons dans un monde de contrôle de source et c'est bien quand la seule raison pour laquelle une ligne est signalée comme modifiée est parce qu'elle fait quelque chose de différent, pas parce qu'une partie de celle-ci devait s'aligner dans une colonne.
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;
}
Oui, je sais que c'est un peu moins lisible, mais sinon, vous rendrez fou les gens qui utilisent les outils vdiff pour détecter les changements.
Maintenant, corrigeons ces sauts de ligne stupides que nous avons parce que nous essayons de rester sous les limites de longueur de ligne.
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;
}
Là, maintenant la logique dans la boucle se concentre sur ce qui change dans la boucle. En fait, tout sauf cipherColumn
pourrait être marqué final
. Et bon! Regarde ça. Nous avons maintenant de la place pour le faire.
Tout ce que j'ai fait, c'est ajouter 3 variables supplémentaires, renommer une et les réorganiser un peu. Et le résultat est arrivé à rendre les lignes suffisamment courtes pour s'adapter sans un saut de ligne idiot !=
.
Bien sûr , les noms key
et keyNext
ne sont pas que descriptive, mais chacun ne s'utilisé qu'une seule fois, ne pas vivre longtemps, et surtout ne font pas tout ce qui intéressant dans la boucle. Ils n'ont donc pas besoin de l'être. En introduisant des variables supplémentaires, nous avons maintenant de la place pour rendre leurs noms longs si nous en avons besoin. Les choses changent, nous devrons donc éventuellement le faire. Si nous le faisons, c'est bien que nous ayons de la respiration.
J'ai également pris la liberté de vous montrer le style de variante de la forme 6 de Jeff Grigg de présentation des paramètres d'entrée pour respecter les restrictions de longueur de ligne.
cipherColumn + (rowSize*nextWord) + nextWord
qui fait clairement ce que le calcul est pour , par exemple? Je parie que ce nom est plus court que le calcul, donc vous obtenez un avantage de lisibilité et une longueur de ligne réduite. N'alignez pas non plus les affectations, ou vous devez toutes les déplacer si vous renommez la variable la plus longue.