আমার কি এমন ভাষাগুলিতে বাসা বাঁধতে হবে যা আমাকে তা করতে দেয় বা আমি এটিকে এড়ানো উচিত?


12

জাভাস্ক্রিপ্ট, পিএল / এসকিউএল এবং কিছু অন্যান্য ভাষায়, ফাংশনগুলি নেস্ট করা যেতে পারে, অর্থাৎ অন্য ফাংশনের মধ্যে ঘোষিত। এটি কোনও বৃহত ফাংশনকে ছোট ছোট টুকরো টুকরো করার জন্য ব্যবহৃত হতে পারে তবে সেই টুকরাগুলি বৃহত্তর ফাংশনের প্রসঙ্গে রাখুন।

function doTooMuch() {
    function doSomething () {
       ...
    }
    function doSomethingElse() {
       ...
    }
    function doYetAnotherThing() {
       ...
    }

    // doTooMuch body

    doSomething();
    doSomethingElse();
    doYetAnotherThing();
}

কিছু ক্ষেত্রে, যখন সেই ছোট ফাংশনগুলি বৃহত্তর ফাংশনের স্থানীয় ভেরিয়েবলগুলি ব্যবহার করে না, এটি সহজেই এমন সংস্করণে পরিবর্তিত হতে পারে যেখানে সমস্ত ফাংশন অদক্ষিত are

function doSomething () {
   ...
}
function doSomethingElse() {
   ...
}
function doYetAnotherThing() {
   ...
}
function doTooMuch() {
    doSomething();
    doSomethingElse();
    doYetAnotherThing();
}

ধরে নিই যে n নেস্টেড ফাংশনগুলি অন্য কোথাও ব্যবহার করা হবে না, এগুলি বৃহত ফাংশনের প্রেক্ষাপটে রাখা ভাল কি খারাপ? কারণ এটি ঠিক এটিই বৃহত ফাংশনটি ভাল, বৃহত্তর করে তোলে?

উত্তর:


8

এটি মতামতের বিষয়, তবে এটি যদি আপনার নকশার প্রয়োজনীয় এবং ইচ্ছাকৃত অংশ না হয় তবে আমি বাসা বাঁধতে হবে functions

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

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

আপনি যদি এগুলি ব্যবহার না করেন, তবে অনেক লোক কোডটি পড়বেন এবং এমন কিছুই দেখতে পাবে না - তাই তারা ধরে নিবে যে তারা এটিটি মিস করেছে, এবং আবার দেখুন, আপনি কেন সেভাবে এটি করেছেন তা চেষ্টা করার চেষ্টা করছেন, এবং পৃথক সুযোগে নয়।

আপনি ঝুঁকিও নিয়েছেন যে ভবিষ্যতের প্রোগ্রামাররা ইচ্ছাকৃতভাবে বা দুর্ঘটনাক্রমে এমন কিছু ঘনিষ্ঠভাবে বন্ধ করবে যা তারা উদ্দেশ্য করে না, ঠিক সেখানে ঝুঁকিটি না দেখে।

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

চূড়ান্ত নোট হিসেবে কারণ পৃথক ফাংশন সাহায্যের সীমানা কোড, পাখির ফাংশন একটি একক দৈত্য ফাংশন কম বিরক্তিজনক, কিন্তু শেষ পর্যন্ত এটা না আরো অনেক কোড পড়া বুঝতে গড় doTooMuch()- বিশেষ করে যদি আপনি নেস্টেড ফাংশন ঘোষণা মধ্যে কোড লুকিয়ে রাখতে পারেন, অথবা কেউ পরীক্ষা করেনি তা পরীক্ষা করা দরকার।


-1: জাভাস্ক্রিপ্ট "বেশিরভাগ ভাষা" নয়। জাভাস্ক্রিপ্টে নেস্টিং ফাংশনগুলি সাধারণ অনুশীলন।
কেভিন ক্লাইন

2
জাভাস্ক্রিপ্টে @ কেভিঙ্কলাইন বাসা বাঁধার ফাংশনগুলি একটি সাধারণ খারাপ অভ্যাস
রায়নোস

@ রায়নোস: আপনি যদি এগুলিকে বাসা বাঁধেন না তবে আপনি কোথায় রাখবেন? এগুলি ধারণ করার জন্য আপনার কোনও শ্রেণি নেই। এখানে কিছু সাধারণ কোড রয়েছে:jquery(function($){ $('#id').click(function(){...}); }
কেভিন ক্লিন

@ কেভিঙ্কলাইন ... নুবসের জন্য সাধারণ কোড, আপনার খুব গভীরভাবে ফাংশন প্রয়োজন। এবং এটি কারণ জাভাস্ক্রিপ্টের কোনও মডিউল স্কোপ নেই, সুতরাং আপনার সেই বেনামে বন্ধ হওয়া দরকার।
রায়নস

এবং যদি সেই ক্লিকটি একটি সম্পন্ন কলব্যাক সহ একটি অ্যাজাক্স কল কার্যকর করে? এখন আপনার দুটি স্তরের ফাংশন রয়েছে। অবশ্যই, আপনি ভেরিয়েবলগুলিতে বেনামে সমাপনীকরণের মাধ্যমে বাসা বাঁধতে সীমাবদ্ধ করতে পারেন। এটা কি আরও ভাল?
কেভিন ক্লিন

2

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


0

এই প্রশ্নের কোনও সঠিক উত্তর নেই, কারণ কোনও পছন্দই encapsulation সর্বাধিক করে না। আপনি যদি এগুলিকে বাসা বেঁধেন, তাদের এখনও চলকগুলিতে অ্যাক্সেস থাকতে হবে। যদি আপনি না করেন, তবে অন্যান্য ক্রিয়াকলাপগুলিতে তাদের করা উচিত নয় এমন ফাংশনে অ্যাক্সেস রয়েছে। যেভাবেই হোক, আপনি হেরে গেছেন।

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