आम तौर पर जब मुझे आपके जैसे यहां पोस्ट किए गए कोड दिखाई देते हैं, तो मैं इसे संपादित करता हूं, क्योंकि हम क्षैतिज स्क्रॉल से नफरत करते हैं। लेकिन जब से यह आपके प्रश्न का हिस्सा है, मैं आपको यहाँ संपादित दिखाऊंगा:
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
छोरों को अनुक्रमित करते समय वे ठीक नाम हैं । लेकिन यहां नाम वास्तव में मेरे एकमात्र सुराग हैं कि आप क्या होने की उम्मीद करते हैं। खासकर जब से यह कोड वास्तव में कुछ भी नहीं करता है।
चर नाम लंबाई पर अनुसरण करने के लिए सबसे अच्छा नियम गुंजाइश है। एक चर जितना अधिक समय तक रहता है, उतना अधिक साथी चर उसके नाम के साथ प्रतिस्पर्धा करना पड़ता है। स्टैक एक्सचेंज पर कैंडिडऑरेंज नाम अद्वितीय है। अगर हम बातचीत में थे, तो आप मुझे "कैंडी" कह सकते हैं। लेकिन अभी, आप उस दायरे में हैं, जहां वह नाम कैंडाइड , कैंडी चियु या कैंडीफ्लॉस के साथ भ्रमित हो सकता है । तो जितना लंबा दायरा होगा, उतना लंबा नाम होना चाहिए। दायरा जितना छोटा होगा, नाम उतना ही कम होगा।
लाइन की लंबाई कभी भी नाम की लंबाई तय नहीं करनी चाहिए । अगर आपको ऐसा लगता है तो अपना कोड बिछाने का एक अलग तरीका खोज लें। आपके पास ऐसा करने के लिए हमारे पास कई उपकरण हैं।
पहली चीजों में से एक है जिससे मैं छुटकारा पाने के लिए अनावश्यक शोर कर रहा हूं। दुर्भाग्य से यह उदाहरण कुछ भी नहीं करता है, इसलिए यह सभी अनावश्यक शोर है। मुझे काम करने के लिए कुछ चाहिए तो पहले उसे कुछ करने दें।
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
उस वर्णनात्मक नहीं हैं, लेकिन वे केवल एक ही बार उपयोग करते हैं, उस लंबे समय तक नहीं रहते हैं, और सबसे महत्वपूर्ण बात यह है कि लूप में दिलचस्प कुछ भी नहीं कर रहे हैं। तो वे होने की जरूरत नहीं है। अतिरिक्त चर पेश करने से अब हमारे पास उनके नाम लंबे समय तक रखने के लिए जगह है, अगर हमें आवश्यकता है। चीजें बदलती हैं, इसलिए आखिरकार हमें इसकी जरूरत पड़ सकती है। यदि हम करते हैं, तो यह अच्छा है कि हमारे पास सांस लेने का कमरा है।
मैंने आपको लाइन लंबाई प्रतिबंधों का सम्मान करने के लिए इनपुट मापदंडों को बिछाने के लिए जेफ ग्रिग के फॉर्म 6 संस्करण शैली को दिखाने की स्वतंत्रता भी ली ।
cipherColumn + (rowSize*nextWord) + nextWord
इसका वर्णन करने के तरीके के बारे में सोच सकते हैं जो यह स्पष्ट करता है कि उदाहरण के लिए गणना क्या है ? मैं शर्त लगाता हूं कि गणना की तुलना में यह नाम छोटा है, इसलिए आपको एक पठनीयता और कम लाइन की लंबाई मिलती है । इसके अलावा असाइनमेंट्स को संरेखित न करें, या आपको सबसे लंबे चर का नाम बदलने पर उन सभी को स्थानांतरित करना होगा।