মন্তব্য প্রতিস্থাপন হিসাবে অতিরিক্ত স্থানীয় ভেরিয়েবলগুলি উপস্থাপন করা হচ্ছে


12

কি ঘটছে তা বর্ণনা করার জন্য অতিরিক্ত, প্রযুক্তিগতভাবে অতিরিক্ত অতিরিক্ত, স্থানীয় ভেরিয়েবলগুলি ব্যবহার করা কি ভাল স্টাইল নয়?

উদাহরণ স্বরূপ:

bool easyUnderstandableIsTrue = (/* rather cryptic boolean expessions */);

if(easyUnderstandableIsTrue)
{
    // ...
}

যখন প্রযুক্তিগত ওভারহেডের বিষয়টি আসে তখন আমি সংযোজকটি এই সংযোজন লাইনটি অপ্টিমাইজ করার আশা করি। কিন্তু এটি কি অপ্রয়োজনীয় কোড ব্লাট হিসাবে বিবেচিত হয়? আমার চোখে এটি বাসি মন্তব্যের ঝুঁকি হ্রাস করে।


10
"কী ঘটছে তা বর্ণনা করার জন্য অতিরিক্ত, প্রযুক্তিগতভাবে অতিরিক্ত অতিরিক্ত, স্থানীয় ভেরিয়েবলগুলি ব্যবহার করা কি ভাল স্টাইল?" হ্যাঁ. এখানে অন্য কিছু বলা যায় না, সত্যই।
ডেভিড আরনো

3
আমার কোডটি পরে পড়ার সময় আমি এই জাতীয় একটি শৈলী পেয়েছি (অর্থাত্ বর্ণনামূলক নাম সহ অনেকগুলি মধ্যবর্তী ভেরিয়েবলগুলি ব্যবহার করা) helpful অবশ্যই আপনি জটিল এক্সপ্রেশন লিখতে পারেন এবং মধ্যবর্তী ভেরিয়েবলগুলি প্রবর্তন না করে কয়েকটি নাম সংরক্ষণ করতে পারেন তবে আপনি কেন চান? তুলনামূলকভাবে ভাল লেখা থাকলেও পঠন কোডটি বেশ চ্যালেঞ্জ হতে পারে, তাই আমি মনে করি না যে অযথা এটিকে আরও জটিল করে তোলা একটি বুদ্ধিমান রুট।
মেল

আমি বিশ্বাস করি মার্টিন ফওলারের রেফ্যাক্টরিংয়ের ক্যাটালগটিতে একে কনসোলিডেট শর্তসাপেক্ষ এক্সপ্রেশন বলা হয় ।
ব্র্যান্ডিন

উত্তর:


16

অতিরিক্ত পরিবর্তনশীল থাকার ব্যয় কী? বেশিরভাগ ভাষায়, দুটিই সংকলিত এবং ব্যাখ্যামূলক ভাষায় নেই।

এর কী লাভ?

  • একইভাবে একটি পৃথক পদ্ধতিতে ক্রিপ্টিক বুলিয়ান এক্সপ্রেশন বের করতে, আপনি নকল কোডের ঝুঁকি হ্রাস করছেন , তবে আলাদা পদ্ধতির ক্ষেত্রে তুলনায় কিছুটা কম। শর্তসাপেক্ষ এক্সপ্রেশনটি যদি নিজেই পদ্ধতিতে পুনরায় ব্যবহার করা হয় তবে আপনি পরিবর্তনশীলটিকে পুনরায় ব্যবহার করতে সক্ষম হবেন; যদি অভিব্যক্তিটি অন্য কোনও পদ্ধতিতে উপস্থিত হয়, আপনি তা করবেন না।

    মনে রাখবেন যে আপনার প্রোগ্রামিং ভাষাটি যদি না পরিবর্তনযোগ্য স্থানীয় ভেরিয়েবলগুলি রাখার অনুমতি দেয় বা আপনার প্রয়োগ করার উপায় না থাকে তবে স্টাইল অনুসারে ভেরিয়েবলগুলির কোনওটিই পুনরায় নিয়োগ না করা হয়, যেমন রিফ্যাক্টরিং দীর্ঘমেয়াদে ঝুঁকিপূর্ণ হতে পারে। যদি ভেরিয়েবলের মান পরিবর্তন করা হয় তবে কোড সম্পর্কে যুক্তি দেওয়া খুব কঠিন হতে পারে।

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

    // Find if the user is an actual author in order to allow her to edit the message.
    if (currentUser.isAdministrator || (message.author == currentUser && !message.locked))

অভিব্যক্তিটি সম্ভবত দিয়ে শুরু হয়েছিল if (message.author == currentUser), এবং তারপরে লক করা বার্তাগুলি এবং প্রশাসকদের ক্ষেত্রে যারা লেখক হওয়ার প্রয়োজন নেই এবং লক করা জিনিসগুলির যত্ন নেই তাদের ক্ষেত্রে পরিচালনা করতে বিকশিত হয়েছে; যাইহোক, মন্তব্য এই সমস্ত পরিবর্তনগুলির কোনও প্রতিফলন ঘটেনি।

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

মনে রাখবেন যে আপনার বুলিয়ান এক্সপ্রেশন অতিরিক্ত জটিল হয়ে উঠলে: ²

  • এটি একটি পৃথক পদ্ধতিতে এক্সট্রাক্ট করুন এবং:
  • এটি একাধিক সাধারণ বুলিয়ান এক্সপ্রেশনগুলিতে রিফ্যাক্টর।

উপরের উদাহরণটি হয়ে যায়:

class Message
{
    ...
    public boolean canBeEditedBy(User user)
    {
        ...
        if (user.isAdministrator) {
            return true;
        }

        return this.author == user && !this.locked;
    }
}

...
if (message.canBeEditedBy(currentUser)) // See? Much more readable now!
{
    ...
}

¹ উত্স: বেশিরভাগ ব্যবসায়িক সফ্টওয়্যার বিকাশকারী আমার সমবয়সীদের আমার নিজস্ব পর্যবেক্ষণ; YMMV। একটি বাস্তব গবেষণা বিভিন্ন ফলাফল প্রদর্শন করতে পারে। ব্যক্তিগতভাবে, আমি অনুমান করি যে বিকাশকারীরা কোড পড়েন, তারা কোডের দিকে মনোনিবেশ করছেন এবং মন্তব্যগুলি নথি নয়, কোড নয়; সুতরাং, তারা সাধারণত মন্তব্য পড়েন না, তাই তাদের আপডেট করা আশা করা তাদের পক্ষে কঠিন।

Complex অতিরিক্ত জটিল প্রান্তিকতা একটি সাধারণ সূত্রের সাহায্যে সংজ্ঞায়িত করা হয়: আপনার কোড পর্যালোচনা করে যারা অর্ধেক বিকাশকারী আপনাকে হত্যার অভিপ্রায় প্রকাশ করে, দ্বারপ্রান্তে পৌঁছে যায়। উপরের বুলিয়ান এক্সপ্রেশনটি রিফ্যাক্টরিংয়ের জন্য প্রয়োজনীয় যথেষ্ট সহজ; তবে if ((a && b) || (c && d))একটানা চারটি অংশ এটিকে সম্ভাব্যভাবে অপসারণযোগ্য করে তুলবে। মনে রাখবেন যে অভিব্যক্তিটি সমতল হলে অংশগুলির সংখ্যা বেশিরভাগ অপ্রাসঙ্গিক: if (a || b || c || d || ... || z)যথেষ্ট পাঠযোগ্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.