通常、ここにあなたのようなコードが投稿されているのを見ると、水平スクロールが嫌いなので編集します。しかし、それはあなたの質問の一部なので、ここで編集を示します。
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という名前は、スタック交換で一意です。チャットをしている場合は、「Candy」と呼んでください。しかし、今、あなたはその名前がCandide、Candy Chiu、Candyflossと混同される可能性のある範囲にいます。したがって、スコープが長いほど、名前は長くなります。スコープが短いほど、名前は短くなります。
行の長さが名前の長さを決定することはありません。もしそうなら、コードをレイアウトする別の方法を見つけてください。そのためのツールがたくさんあります。
私が最初に探すものの1つは、取り除く必要のないノイズです。残念ながら、この例は何もしませんので、すべて不要なノイズです。動作するものが必要なので、最初に何かをさせましょう。
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つの変数を追加し、1つの名前を変更して、それらを少し再配置することだけでした。そして結果はたまたま行を短くして馬鹿げた改行なしで収まるようにした!=
。
確かに名前key
とkeyNext
説明のことではないですが、彼らそれぞれが長いこと生きていない操作を行い、一度のみ慣れ、そして最も重要なループで興味深いことは何もやっていません。だから彼らはそうである必要はありません。追加の変数を導入することで、必要に応じて名前を長くする余地ができました。状況は変化するため、最終的には必要になる可能性があります。もしそうなら、呼吸の余地があるのはいいことです。
また、Jeff Griggのフォーム6バリアントスタイルで入力パラメーターをレイアウトして、行の長さの制限を尊重することも示しました。
cipherColumn + (rowSize*nextWord) + nextWord
その計算が何のためであるかを明確にする記述方法を考えることができますか?あなたが読みやすさの恩恵を得るので、私は、計算よりもその名前の短い賭けると減少ラインの長さを。また、割り当てを揃えないでください。最も長い変数の名前を変更する場合は、すべてを割り当てる必要があります。