আমি কি আর "কলম্বড" কোডের জন্য সংক্ষিপ্ত পরিবর্তনশীল নামগুলি ত্যাগ করি?


17

আমি সিএস ক্লাসে একজন অপেশাদার প্রগ্রেমার সঠিক প্রোগ্রামিং দক্ষতা শেখার চেষ্টা করছি। এইভাবে আমার কোডটি দেখায়, এর প্রান্তগুলি 103 কলামে প্রসারিত।

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;
        }
    }

আমার কাছে সেই দীর্ঘ দীর্ঘ ভেরিয়েবলের নাম থাকার আগে আমার কাছে আই, জে, কে এর মতো জিনিস ছিল, তবে আমার অধ্যাপক জোর দিয়ে বলেছেন যে আমরা "পেশাদার জগতে" এর মতো ভেরিয়েবলগুলি ব্যবহার করব না এবং লেনওয়ার্ডের মতো সংক্ষিপ্ত পরিবর্তনগুলিও অপর্যাপ্ত কারণ লোকেরা ধরে নিতে পারে এটি "লেনার্ডের বিশ্ব সাহিত্যের" জন্য দাঁড়িয়েছে। তিনি অর্থপূর্ণ পরিবর্তনশীল নামগুলি বেছে নেওয়ার জন্য বলেছেন তবে এটি করে আমার মনে হয় যে আমি 80 টি কলামের আওতায় রাখতে কোডিংয়ের সুবর্ণ নিয়মটি ভঙ্গ করেছি। আমি কিভাবে এই কাছাকাছি পেতে পারি?


26
চোলতে থাকা; যোগ আরো দরকারী নাম থাকবে না। আপনি একটি উপায় বর্ণনা করতে মনে করতে পারেন cipherColumn + (rowSize*nextWord) + nextWordযে করে তোলে পরিষ্কার যে হিসাব হয় জন্য , উদাহরণস্বরূপ? আমি হিসাবের চেয়ে সেই নামটির সংক্ষিপ্ততর বাজি ধরেছি, তাই আপনি একটি পঠনযোগ্যতা সুবিধা এবং হ্রাস পংক্তির দৈর্ঘ্য পান। এছাড়াও অ্যাসাইনমেন্টগুলি প্রান্তিককরণ করবেন না, বা আপনি যদি দীর্ঘতম চলকটির নাম পরিবর্তন করেন তবে আপনাকে সেগুলি সরিয়ে নিতে হবে।
জোনারশপে

2
হুম .. তাই আপনি কি বলছেন যে আমি একটি নতুন ভেরিয়েবল তৈরি করব এবং সিফার কলাম + (সারি সাইজ * নেক্সট ওয়ার্ড) + এর নেক্সট ওয়ার্ড এর ফলাফল সংরক্ষণ করব যাতে আমি এটি আরও ব্যবহার করতে পারি? পেশাদাররা কি তাই করে? আমি সত্যিই জিজ্ঞাসা করছি
রাউল্ট

8
হ্যাঁ, এটি আমার পরামর্শ। আমি একজন প্রো এবং আমি এটিই করতাম, তাই ... তাদের মধ্যে কিছুটা অন্তত:
জোনারশপে

11
সুবর্ণ নিয়মটি এমন কোড লেখা যা পড়া এবং বোঝা যায়। আমরা মেশিনের জন্য নয় অন্য লোকের (!) কোড লিখি। মেশিনগুলির জন্য মেশিন কোড রয়েছে। কারও কাছে, কোড বর্ণিত বলে মনে হচ্ছে যা আপনি বর্ণিত (একক বর্ণের নাম ইত্যাদি) অন্যান্য প্রোগ্রামারদের (এবং ভবিষ্যতের আপনি - কারণ আপনি আগামী কয়েক সপ্তাহ বা মাসে ভুলে যাবেন) সম্মানের অভাব। 80 টি কলামে আটকে থাকার কোনও কারণ নেই, এটি 80 এর দশকে এমএস ডস নয়।
আরএসএম

3
@ স্টিজন হ্যাঁ, তবে এটি আমাদের শেষবারের দরকার হয়েছিল। পাঞ্চ কার্ডে এটি সংরক্ষণ করার প্রয়োজনে আমি 8-বিট 8086 প্রসেসরের জন্য আমার সি কোডটি সংকলন করি না, আমি 21 শতকে 80 কলামের সোনার স্টারার্ডের কোনও তাত্পর্য আছে বলে মনে করি না । আমাদের এই প্রযুক্তিটি প্রসারিত করা উচিত, 80 এর দশকে না বসে মনে করা উচিত এটি আমাদের চালাক হ্যাকার করে তোলে। চালাক হ'ল সরলতা, পঠনযোগ্যতা এবং সর্বাধিক প্রযুক্তির দিকে ঠেলে। আমাদের পূর্ণ-এইচডি মনিটর রয়েছে, এটি এটি ব্যবহারের সময়।
আরএসএম

উত্তর:


24

সাধারণত যখন আমি এখানে আপনার মতো পোস্ট পোস্ট দেখি তখন আমি এটিকে সম্পাদনা করি কারণ আমরা অনুভূমিক স্ক্রোলকে ঘৃণা করি। তবে এটি আপনার প্রশ্নের অংশ হিসাবে, আমি আপনাকে সম্পাদনাটি এখানে দেখাব:

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লুপগুলি ইনডেক্স করার সময় সেগুলি সূক্ষ্ম নাম । তবে এখানে নামগুলি হ'ল আপনি কী ঘটবেন বলে আশা করেছিলেন সে সম্পর্কে আমার একমাত্র সূত্র। বিশেষত যেহেতু এই কোডটি আসলে কিছুই করে না।

পরিবর্তনশীল নামের দৈর্ঘ্যের উপর অনুসরণ করার সেরা নিয়ম হ'ল সুযোগ। পরিবর্তনশীল জীবন যত দীর্ঘ হয়, তার নামটির সাথে আরও সহকর্মী ভেরিয়েবলের প্রতিযোগিতা করতে হয়। ক্যান্ডিডআরঞ্জ নামটি স্ট্যাক এক্সচেঞ্জের ক্ষেত্রে অনন্য। আমরা যদি কোনও আড্ডায় থাকি তবে আপনি আমাকে কেবল "ক্যান্ডি" ডাকবেন। তবে এই মুহুর্তে আপনি এমন একটি সুযোগে রয়েছেন যেখানে নামটি ক্যান্ডাইড , ক্যান্ডি চিউ বা ক্যান্ডিফ্লোসের সাথে বিভ্রান্ত হতে পারে । সুতরাং সুযোগটি যত দীর্ঘ হবে তত বেশি নাম হওয়া উচিত। এর পরিধিটি যত কম হবে, নামটিও তত ছোট হতে পারে।

লাইনের দৈর্ঘ্য কখনই নামের দৈর্ঘ্য নির্ধারণ করে না । আপনার যদি মনে হয় এটির পরে আপনার কোডটি প্রেরণের জন্য আলাদা উপায় খুঁজে বের করুন। আপনাকে এটি করতে সহায়তা করার জন্য আমাদের কাছে অনেক সরঞ্জাম রয়েছে।

আমি প্রথমে যে জিনিসটির সন্ধান করি তার মধ্যে একটি থেকে মুক্তি পাওয়া অযথা শব্দ noise দুর্ভাগ্যক্রমে এই উদাহরণটি কিছু করে না, সুতরাং এটি সমস্ত অযথা গোলমাল। আমার সাথে কাজ করার কিছু দরকার তাই প্রথমে এটি কিছু করা যাক।

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;
}

হ্যাঁ, আমি জানি এটি কিছুটা কম পঠনযোগ্য তবে অন্যথায় আপনি এমন মানুষদের পাগল হয়ে যাবেন যারা পরিবর্তনগুলি সনাক্ত করতে ভিডিফ সরঞ্জাম ব্যবহার করেন।

এখন আসুন আমরা এই নির্বোধ রেখা বিরতি ঠিক করি কারণ আমরা লাইন দৈর্ঘ্যের সীমাতে থাকার চেষ্টা করছি।

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বর্ণনামূলক নয়, তবে তারা প্রত্যেকে কেবল একবার ব্যবহার করা হবে, এত দিন বাঁচবেন না এবং সর্বাগ্রে লুপের মধ্যে আকর্ষণীয় এমন কিছু করছেন না। সুতরাং তাদের হওয়ার দরকার নেই। অতিরিক্ত ভেরিয়েবল প্রবর্তন করে আমাদের যদি প্রয়োজন হয় তবে তাদের নামগুলি আরও দীর্ঘ করার জন্য আমাদের কাছে আরও জায়গা রয়েছে। বিষয়গুলি পরিবর্তিত হয়, তাই শেষ পর্যন্ত আমাদের প্রয়োজন হতে পারে। যদি আমরা এটি করি, তবে আমাদের শ্বাসকষ্ট থাকার জায়গাটি ভাল।

লাইন দৈর্ঘ্যের সীমাবদ্ধতার প্রতি শ্রদ্ধা জানাতে ইনপুট প্যারামিটারগুলি ছড়িয়ে দেওয়ার জন্য আপনাকে জেফ গ্রিগের ফর্ম var রূপের স্টাইলটি দেখানোর স্বাধীনতাও নিয়েছিলাম ।


বাহ যে বর্ণনামূলক! হ্যাঁ আমি জানি যে কোডটি আসলে কিছুই করে না, আমার সম্ভবত এটির একটি ছোট স্নিপেটের চেয়ে বেশি পোস্ট করা উচিত ছিল তবে আমার ধারণা আমি কোড কলামের দৈর্ঘ্য এবং ভেরিয়েবল নামের ক্ষেত্রে পেশাদাররা কী করে সে সম্পর্কে সাধারণ ধারণা পাওয়ার চেষ্টা করছিলাম, তবে আপনার উত্তরটি খুব মধুর পরিবর্তন দেখিয়েছে আমি এখন থেকে আমার কোডগুলিতে অবশ্যই প্রয়োগ করব! আমার আর একটি প্রশ্ন হ'ল: লাইনব্রেকগুলি তৈরি করার পক্ষে আপনি কোথায় এটি উপযুক্ত বলে মনে করেন? অপারেটরদের আগে? কোনও গ্রহণযোগ্য "মান" আছে কি?
রাউলটি

1
@ রোল্ট আপনার কাজ করা কোডবেস যা কিছু পড়তে কিছুটা সময় ব্যয় করেছেন It এটি আপনাকে একটি ধারণা দেবে যা আপনি কী ব্যবহার করতে পারেন যা অন্যান্য কোডারদের অবাক করে না। আপনার যদি মানক ডকুমেন্ট থাকে তবে তা অনুসরণ করুন। তবে সবচেয়ে ভাল হ'ল সহকারী প্রোগ্রামারদের জিজ্ঞাসা করা এবং তাদের জিজ্ঞাসা করুন যে আপনার জিনিসগুলি কতটা পাঠযোগ্য। ওহ এবং
কোডেরভিউ.স্ট্যাকেক্সচেঞ্জ.কম

আমি সিফার অফসেটের নীচে একটি মন্তব্য যুক্ত করব এবং গণনাটি ব্যাখ্যা করব কারণ সূত্রটি সুস্পষ্ট নয়। আপনি কেন তিন সপ্তাহের মধ্যে ভুলে যাবেন।
নেলসন

15

অন্যরা ইতিমধ্যে কিছু দরকারী পরামর্শ দিয়েছেন, আমাকে সংক্ষেপে বলি:

  • ৮০ এর দশকে প্রতি লাইনে 80 টি অক্ষর একটি সোনার নিয়ম হতে পারে। আজকাল বেশিরভাগ লোকেরা একমত যে 100 থেকে 130 টি অক্ষর ভাল।
  • আপনার এক্সপ্রেশন ভিতরে লাইনব্রেক ব্যবহার করুন।
  • অন্তর্বর্তী ফলাফল প্রবর্তন করে দীর্ঘ প্রকাশগুলি বিভক্ত করুন।

আমি অন্য একটি সুপারিশ যুক্ত করতে চাই: দীর্ঘ নামগুলি সম্পর্কে কৌতূহল বোধ করবেন না! কোনও ভেরিয়েবলের পরিধি যত বেশি হয় তত বেশি তথ্যের নাম লিখতে হয়। এবং সাধারণত ভেরিয়েবলের পরিধি ছোট রাখাই ভাল ধারণা।

উদাহরণস্বরূপ, আপনার কীওয়ার্ড এনক্রিপশন টেবিলের কলামের জন্য যদি আপনার একটি ভেরিয়েবল থাকে এবং এটি স্পষ্ট হয় যে আপনার ভেরিয়েবলের স্কোপটিতে কেবল এই একটি টেবিল ব্যবহার করা হয়, তবে এটি কল করা columnঠিক আছে col। যদি ক্ষেত্রটি বৃহত্তর হয় এবং একাধিক সারণী জড়িত থাকে তবে এটিকে কল করা বুদ্ধিমান keyWordEncryptionTableColumn

অন্য উদাহরণ: আপনার যদি দুটি বা তিনটি লাইনের বিস্তৃত শরীরের একটি লুপ থাকে এবং অ্যারের উপাদানগুলিতে অ্যাক্সেসের জন্য একটি সূচক ব্যবহার করতে হয় তবে সূচকটি কল করার ক্ষেত্রে কোনও ভুল নেই i। এই প্রসঙ্গে এটি বলার চেয়ে অনেক বেশি পঠনযোগ্য (বেশিরভাগ লোকের পক্ষে) arrayIndexOfMyVerySpecialDataSet


1
আমি আপনার সাথে উত্তর সম্মত। কর্মক্ষেত্রে আমরা উত্তরাধিকারগত কারণে সি / সি ++ এর জন্য 80 চর / লাইন ব্যবহার করি এবং কারণ আমরা রিভিউবোর্ড ব্যবহার করি। সি # 100 অক্ষর / রেখার জন্য, কখনও কখনও আমি নিয়মটি ভঙ্গ করি এবং পাঠযোগ্যতা বজায় রাখতে 100 এর কিছুটা বেশি চলে যাই।
peval27

বাহ, কি দুর্দান্ত উত্তর !! এই সমস্ত উত্তরযোগ্য দুর্দান্ত হয়েছে, আমি যে প্রশংসা করি তার জন্য ধন্যবাদ!
রাউলটি

আমি 80 টি চরিত্রের রেখা পুরানো হয়ে গেছে এই ধারণাটি চাপ দিয়ে দৃ strongly়ভাবে একমত। এটি এখনও কিছু প্রকল্প এবং জায়গাগুলির জন্য প্রযোজ্য (বেশিরভাগ ধারাবাহিকতার জন্য) তবে অনেকের কাছে এটি কেবল অপ্রয়োজনীয়। অনেক ডেভস সম্পূর্ণ মনিটরে ভিজ্যুয়াল স্টুডিও বা ইন্টেলিজের মতো কিছু ব্যবহার করছে এবং অন্যান্য স্টাফগুলির জন্য দ্বিতীয় মনিটর রয়েছে (ডকুমেন্টেশন ইত্যাদি)। তাদের কোডের জন্য এই জাতীয় স্ক্রিন রিয়েল এস্টেট রয়েছে। আপনি যদি প্রতি লাইনে কেবলমাত্র 80 টি অক্ষর ব্যবহার করেন তবে আপনার কাছে সম্ভবত এক টন অব্যবহৃত স্থান রয়েছে। এবং 80 টি চরিত্রের সীমা আপনাকে ব্যথা দেয়! বিশেষত যখন আপনি বিবেচনা করেন যে স্ট্যান্ডার্ড লিব দীর্ঘ পাছার নামগুলিকে বাধ্য করতে পারে।
ক্যাট

1
আমার বক্তব্যটি যে কয়েকটি ভাষায়, 80 অক্ষর একটি বড় সীমাবদ্ধতা এই সত্যটি এড়ানো যায় না। তাহলে অহেতুক কেন? এটি আরও উল্লেখ করে যে এই সময়ের মধ্যে সমস্ত বড় নাম সম্পাদক এবং আইডিইতে দুর্দান্ত স্মার্ট নরম শব্দ মোড়ানো রয়েছে, যা আপনাকে সমস্ত ক্ষেত্রে লাইন দৈর্ঘ্যকে সীমাবদ্ধ করতে দেয় না। পাঠক দেখতে পান না কেন আপনি লাইনের দৈর্ঘ্য হতে পারেন। আরও অনুকূল ফলাফল পেতে তারা তাদের উইন্ডোটির আকার পরিবর্তন করতে পারে। আমি ব্যক্তিগতভাবে এই পদ্ধতির মাঝে মাঝে আদর্শ হতে দেখেছি। এবং এই নরম মোড়ক কীভাবে কাজ করে তা নিয়ে আমি এখনও হতাশ হই।
ক্যাট

আপনি যখনই সাধারণ ভেরিয়েবলের নাম ব্যবহার করেন, আপনার অবশ্যই 100% সুযোগের সুনির্দিষ্ট হতে হবে। আমি জাভাস্ক্রিপ্ট বন্ধ সম্পর্কে শিখতে তিন ঘন্টা ব্যয় করেছি।
নেলসন

3

আমি আপনার সাথে সাধারণত শিক্ষক একমত। তবে, আপনার যদি কোনও ভেরিয়েবল থাকে যা আপনি একটি ফল্য আকারে বড় আকারের কোডটিতে প্রচুর পরিমাণে ব্যবহার করতে যাচ্ছেন তবে এর অর্থ সম্পর্কে স্পষ্ট হওয়ার পরে এটির জন্য একটি শর্টহ্যান্ড ফর্ম ব্যবহার করা ভাল। আপনার যখন জটিল গাণিতিক বহিঃপ্রকাশ এবং কার্যভারগুলি অনেক বেশি থাকে, তেমনি দীর্ঘতর পরিবর্তনশীল নামের সাথে সেগুলি ভালভাবে পড়ে না।

রূপরেখা সম্পর্কে:

ExtractMessage(char keyWord[25], char cipherText[17424],
               int rowSize, char message[388]) 

এটি কোনও উদ্দেশ্য করে না, কেবল রেখার দৈর্ঘ্য সীমাবদ্ধ করা এটিকে আরও পঠনযোগ্য করে তোলে না। আপনি যদি এটি পঠনযোগ্য হতে চান তবে এটি করুন:

ExtractMessage(
  char keyWord[25],
  char cipherText[17424],
  int rowSize,
  char message[388]
  )
{

এবং তারপরে আপনি এমনকি প্রকারের শনাক্তকরণগুলি সারিবদ্ধ করতে চাইতে পারেন (int এর পরে একটি স্থান যুক্ত করুন)। তবে, এই জাতীয় রূপরেখা বা যুক্তি তালিকার রূপরেখার সাথে সাবধান / সীমাবদ্ধ থাকুন:

int keyColumn    = 0;
int cipherColumn = 0;
int offset       = 1;
int nextWord     = 1;

সমস্যাটি হ'ল যখন আপনি কোনও নাম পরিবর্তন করেন বা কোনও ভেরিয়েবল যুক্ত করেন, চমত্কার চেহারাটি বজায় রাখতে আপনাকে পুরো ব্লকটি পুনরায় ফর্ম্যাট করতে হতে পারে। এটি কাজের জন্য যতটা অর্থহীন পরিবর্তন আপনি প্রবর্তন করবেন তার পক্ষে নয়, এটি কোনও সংস্করণ নিয়ন্ত্রণ সিস্টেমে ভয়ঙ্কর দেখাবে। আপনার সহকর্মী দেখতে পাবেন যে আপনি ফাইলটি পরিবর্তন করেছেন এবং আপনি কী করেছেন তা দেখতে পূর্ববর্তী সংস্করণটির সাথে আলাদা হয়ে যায়। তারপরে প্রতিটি লাইন প্রকৃত পরিবর্তনকে অস্পষ্ট করে পরিবর্তিত হিসাবে আলোকিত করবে। এটি তুলনামূলক সরঞ্জামটির ব্যবহারের তুলনায় কিছুটা নির্ভর করবে যা ব্যবহার করা হবে এটি আসলে কতটা খারাপ general

কখনও কখনও রূপরেখা একটি উদ্দেশ্যকে পরিবেশন করতে পারে, যদি আপনার দশটি পরপর লাইন থাকে তবে প্রায় একই রকম থাকে তবে আপনি যদি সেগুলি উল্লেখ করে থাকেন তবে এটি কোথায় আলাদা সেগুলি খুঁজে পাওয়া সহজ হবে।

নোট করুন যে কোনও কর্মক্ষেত্রে কিছু অটোমেটেড ফর্ম্যাটিং চলছে যা সংস্করণ নিয়ন্ত্রণ সিস্টেমে জমা দেওয়ার আগে আপনার কোডটিতে আপনি যে কোনও অভিনব ফর্ম্যাটিং করেছেন কেবল তা মুছে ফেলবে।


1
ব্যক্তিগতভাবে আপনার উত্তরের প্রথম কোড ব্লকটি আমার চেয়ে দ্বিতীয়টির চেয়ে অনেক বেশি পঠনযোগ্য।
মাইলস রাউটিং

1
তৃতীয়টি কখনই করবেন না, এটি ঠিক রাখার জন্য এটি রক্ষণাবেক্ষণের দুঃস্বপ্ন।
জেভেন্টিং

3

দাবি অস্বীকার: আমি আমার বিষয়টি পরিষ্কার করার জন্য এখানে কিছুটা বাড়িয়ে বলছি। সুতরাং যে কোনও সুপারলিটিকে লবণের দানা দিয়ে নিন।

আপনার শিক্ষক 100% সঠিক: প্রায় 80 টি অক্ষর নেই "সোনার নিয়ম" আর নেই (যদি না আপনি লিনাক্স কোডটি লিখে থাকেন)। সেই নিয়মটি সেসময় টার্মিনালের আকারের কারণে প্রতিষ্ঠিত হয়েছিল, কিন্তু আজকাল আপনি সহজেই আপনার এন্ডিটার উইন্ডোতে 150 টিরও বেশি অক্ষর ক্র্যাম করে। এমনকি আপনি যদি এই সীমাটি অতিক্রম করেন, আপনার সম্পাদক আশাবাদী এই লাইনটি নরম-মোড়কে দেবেন যাতে আপনাকে স্ক্রোল করতে না হয়।এবং 80 টি চরিত্রের অতিক্রম না করার একমাত্র কারণ ছিল স্ক্রোলিংয়ের প্রয়োজন

এটি বলেছিল, আপনার লাইনগুলি অনির্দিষ্টকালের জন্য বাড়তে দেওয়া দরকার না। লাইনটি দীর্ঘতর, পার্স করার পক্ষে এটি শক্ত। কিন্তু সংক্ষিপ্ত পরিবর্তনশীল নামগুলি দীর্ঘ লাইনের ইস্যুটির প্রতিকার নয়

প্রতিকারটি হ'ল আরও সঠিকভাবে নামযুক্ত ভেরিয়েবলগুলি প্রবর্তন করে আপনার অভিব্যক্তিগুলিকে যৌক্তিকভাবে বিভক্ত করা । সাদা স্থানের সাথে চালাক হওয়ার চেষ্টা করবেন না। যথাযথভাবে নামকরণ করা যায় এমন কোনও subexpression সনাক্ত করুন এবং এর জন্য একটি ভেরিয়েবল তৈরি করুন। এটি ভেরিয়েবল গণনা করে কোড এবং সেই ভেরিয়েবলটি ব্যবহার করে কোড উভয়ই সহজ করে


আপনার প্রশ্নের অংশ নয়, তবে আমি যাইহোক এটিতে মন্তব্য করতে চাই: আপনার উল্লম্বভাবে সারিবদ্ধ করা খুব খারাপ ধারণা is = অপারেটরগুলি

এর জন্য তিনটি কারণ রয়েছে:

  1. উল্লম্বভাবে স্বাক্ষরযুক্ত অপারেটর সমন্বিত একটি ব্লক সম্পাদনা করা একটি পিআইটিএ। যখনই বৃহত্তম পরিবর্তনশীল পরিবর্তনের দৈর্ঘ্য (পুনরায় নামকরণ, সংযোজন, মোছা) হয়, আপনার "সুন্দর" লেআউটটি আবার ফিরে পেতে আপনাকে ব্লকের সমস্ত লাইন পুনরায় স্পর্শ করতে হবে।

    অবশ্যই, একজন দক্ষ সম্পাদক ব্যবহার করে এই সমস্যাটি কিছুটা হ্রাস হতে পারে, সুতরাং এটি সামান্য কারণ। আসল কারণ দ্বিতীয়:

  2. রিয়েলইনিংয়ের মাধ্যমে প্রবর্তিত এই প্রফুল্ল হোয়াইটস্পেস পরিবর্তনগুলি আধুনিক সংস্করণ নিয়ন্ত্রণ সিস্টেমের মতো সুন্দরভাবে খেলবে না git। তাদের মধ্যে উল্লেখযোগ্য পরিমাণে সংহত দ্বন্দ্ব তৈরি হওয়ার প্রবণতা রয়েছে যেখানে সত্যিকারের দ্বন্দ্ব হয়নি এবং যেখানে সারিবদ্ধতা ব্যবহার না করা হলে কোনও বিরোধ সংকেত দেওয়া হবে না। এই তীব্র দ্বন্দ্বগুলির প্রত্যেকটির জন্য আপনার মূল্যবান সময় ব্যয় হবে না

  3. সারিবদ্ধতা শূন্য শব্দার্থক অর্থ বহন করে । ইহা অর্থহীন. প্রান্তিককরণের সাথে আপনি আরও ভাল করে বুঝতে পারেন এমন কিছুই নেই। এটি কী করে তা বুঝতে আপনার ব্লকের প্রতিটি লাইনকে নিজেই পড়তে হবে, উপরে এবং নীচের লাইনের সংযোগটি নিখুঁত বাক্যগত প্রকৃতির।

যেহেতু প্রান্তিককরণটি কোনও শব্দার্থক অর্থ বহন করে না, তবে উল্লেখযোগ্য ব্যয় করে, তাই আপনার আরও বেশি সময় ব্যয় করার আগে আপনার অভ্যাসটি প্রকাশ করা উচিত।


আপনি যদি 80 টি চরিত্রের সীমাটি এত পছন্দ করেন তবে কিছু ফোরট্রান প্রোগ্রামিং চেষ্টা করুন। সত্য, নতুন মানগুলি দুর্গের রেখার সীমাটি 132 টি অক্ষরে উন্নীত করেছে, তবে সীমা ছাড়িয়ে যাওয়া কোনও প্রোগ্রামের সংকলনটিকে পঙ্গু করে দেওয়ার ক্ষেত্রে এটি কার্যকর রয়েছে। আপনি যদি প্রোগ্রামিংয়ে কিছু ভাল হন তবে আপনি শীঘ্রই এর লাইন দৈর্ঘ্য সীমা সহ কৌতুকপূর্ণ ঘৃণা করতে আসবেন। এর পরে, আপনি আপনার সারা জীবন সুস্থ হয়ে উঠবেন।

আমাকে পেশাগতভাবে কিছু কেল্লান প্রোগ্রামিং করতে হয়েছিল এবং আমি আপনাকে বলছি, এটি আমাকে সেই লাইনের দৈর্ঘ্যের সীমাটি অত্যন্ত প্রিয়তার সাথে ঘৃণা করতে শিখিয়েছে। অন্যথায় সরল ও পঠনযোগ্য লাইনের অংশগুলিতে বিভক্ত করা ছাড়া হতাশার কিছুই একেবারেই নেই কারণ সংকলক এটি আর সঠিকভাবে সংকলন করবে না। এবং কোডের লাইনগুলি অবশ্যই রয়েছে যা একক লাইন হিসাবে প্রকাশ করার সময় সর্বাধিক সহজ।


3

প্রোগ্রামিং পরিবেশে সীমাবদ্ধতার কারণে বছরের পর বছর ধরে প্রচুর স্টাইলিস্টিক কনভেনশনস উদ্ভূত হয়েছিল (নিয়ম নয়!) পাঞ্চ-কার্ডের দিনগুলিতে, আপনি কোনও শারীরিক উত্স লাইনে উপস্থিত হতে পারে এমন অক্ষরগুলির সংখ্যার উপর একটি কঠোর সীমা ছিল (যার কারণেই লাইন-ধারাবাহিকতা অক্ষরের জন্য ফোর্টরান সংরক্ষিত কলাম 6)। এটি বহু দশক আগে নয় যে আমি একটি 80x24 অ্যাম্বার-অন-ব্ল্যাক ভিটি 220 টার্মিনালে কাজ করছিলাম; আমি যে সম্পাদকগুলি ব্যবহার করেছি সেগুলি 80 টি বর্ণের মধ্যে সীমাবদ্ধ করে না, আপনি যদি অনুভূমিক স্ক্রোলিং এড়ানোর জন্য যথাসাধ্য চেষ্টা করেন তবে জীবন কেবল অনেক সহজ ছিল।

ফোরট্রান (আপ '77 চাই, IINM) এর পুরোনো সংস্করণগুলি অধীনে, আপনি এমনকি করতে পারেনি আছে identifers যে বেশী 6 8 টি অক্ষর দীর্ঘ ছিল। এমনকি '80 এর দশকের শেষের দিকে, সি কেবল গ্যারান্টি দিয়েছিল যে বাহ্যিক নামের প্রথম 8 টি অক্ষর অর্থবহ ছিল (এ কারণেই কিছু গ্রন্থাগারের কার্যক্রমে বিস্ময়করভাবে বর্ণনামূলক নাম রয়েছে strpbrk) names

অবশ্যই, একবিংশ শতাব্দীর দুই দশক পরেও আমাদের আর এই সীমা নেই। আরও বর্ণনামূলক শনাক্তকারী ব্যবহার না করার কোনও কারণ নেই

জিনিস অধিকার প্রেক্ষিতে হল, iএবং jএবং kহয় পুরোপুরি যুক্তিসঙ্গত, অর্থপূর্ণ নাম । যদি আমি কোনও লুপে একটি অ্যারে বা ভেক্টর দিয়ে পুনরাবৃত্তি করি এবং বর্তমান উপাদানটি সনাক্ত করার জন্য আমার কেবল কিছু প্রয়োজন হয়, iপুরোপুরি ভালভাবে কাজ করে। আমি এর মতো কোনও নাম ব্যবহার করব না currentElement- এটি প্রসঙ্গে আর কোনও অর্থবহ নয় এবং এটি কেবল ভিজ্যুয়াল গন্ডগোল যুক্ত করে।

এটি বলার পরেও, আপনার শিক্ষক আপনাকে আরও দীর্ঘ, প্রত্যেকটির জন্য আরও বর্ণনামূলক নাম হিসাবে বিবেচনা করতে বাধ্য করা ভুল নয় - আপনি যদি সেই অভ্যাসে প্রথমে যান তবে আপনার পক্ষে জীবন আরও সহজ হবে, এবং তারপরে প্রয়োজনীয় যেখানে অর্থায়ন করবেন তা শিখবেন। যেহেতু একসময় যিনি সমস্ত সময়ে 8 টি অক্ষর বা তার চেয়ে কম কিছুতে সমস্ত কিছু ফিট করতে বাধ্য করেছিলেন, কম তথ্যের চেয়ে আরও তথ্যের দিক থেকে ভুল করা অবশ্যই ভাল। আপনি আরও অভিজ্ঞতা অর্জন করার সাথে সাথে আপনি শিখবেন যে আপনি কোথায় সনাক্তকারী দৈর্ঘ্যের উপর অর্থায়ন করতে পারবেন এবং যেখানে আপনাকে আরও কিছুটা বর্ণনামূলক হতে হবে।


-1

আমি নিশ্চিত নই যে এটি সি এর জন্য কাজ করে বা না তবে একাধিক লাইন জুড়ে সূত্রগুলি বিভক্ত করার কোনও উপায় আছে কি? অজগরটির জন্য আমি এরকম কিছু জানি।

আপনি নতুন লাইনে + (সারি সাইজ * NextWord) + NextWord]) start শুরু করতে পারেন কিনা দেখুন। (আপনার আইডিইতে প্রবেশ করুন টিপুন এবং দেখুন যে এটি এতে প্রবেশ করে কিনা তাই সি জানে যে বর্তমানের লাইনে পূর্বের এক্সপ্রেশনটি সম্পূর্ণ হচ্ছে)


1
হ্যাঁ, এটি অবশ্যই সম্ভব। আপনি সেমিকোলনের মতো কিছু যোগ না করা পর্যন্ত সি কোডের লাইন এবং লাইনগুলি সনাক্ত করে। এর সাথে সমস্যাটি হ'ল আমাদের ফাংশনগুলি 50 টি লাইন অতিক্রম করতে পারে না, এবং যদিও আমার উদাহরণ কোডটিতে 50 টি লাইন নেই এটি আমার মোট ফাংশনের একটি ভগ্নাংশ মাত্র। আমি একটি 50 বাই 80 বাক্সে লিখতে ভারী সংকীর্ণ বোধ করি, অর্থপূর্ণ ভেরিয়েবলগুলি সহ অ্যালগরিদমগুলি যা আমার তাদের প্রয়োজনীয় ফাংশনগুলি সম্পাদন করতে পারে। আমি কোডগুলির এই দীর্ঘ অংশগুলি নতুন ফাংশনগুলিতে সংরক্ষণ করতে পারি তবে আমার মনে হয় আমি এতগুলি ফাংশন কল দিয়ে শেষ করব, লোকেরা কোডটি পড়ে হারিয়ে ফেলবে।
রাউলটি

5
"আমার মনে হচ্ছে আমি এতগুলি ফাংশন কল দিয়ে শেষ করব, লোকেরা কোডটি পড়ে হারিয়ে ফেলবে।" পুরোপুরি বিপরীত! পৃথক পদ্ধতিতে কোড এক্সট্রাক্ট করা আপনাকে তাদের বর্ণনামূলক নামগুলি পাঠযোগ্যতা বৃদ্ধি করার অনুমতি দেয় (বিশেষত আপনি যে পদ্ধতি থেকে উত্তোলন করছেন) of যদি আপনি অনেকগুলি পদ্ধতির সাথে শেষ করেন তবে আপনার ক্লাসটি খুব বেশি কিছু করছে (একক দায়িত্বের নীতি)। পদ্ধতিগুলিকে পৃথক শ্রেণিতে আবার এক্সট্রাক্ট করা আপনাকে সেই জিনিসটিকে একটি বর্ণনামূলক নাম দেওয়ার অনুমতি দেয়।
রোমান রেইনার

50 টি লাইনের কাছে আসা যে কোনও ক্রিয়াকলাপটি সম্ভবত খুব দীর্ঘ এবং খুব জটিল, (1 এর জটিলতার সাথে ডেটা ইনিশিয়ালেশনের সম্ভাব্য ব্যতিক্রম সহ) তবে সাধারণত যখন এর মতো সীমাগুলি আলোচনা করা হয় তখন তারা কোডের রেখাগুলি নয় পাঠ্য রেখাগুলিকে এককভাবে বিভক্ত করে তোলে কোড লাইন, অর্থাত্ সেমিকোলন প্রায়শই একটি অতিরিক্ত লাইন হিসাবে গণনা করা হবে না, অধ্যাপকের সাথে চেক করুন!
স্টিভ বার্নেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.