যেমনটি উল্লেখ করা হয়েছে, এটি নিয়ে দুটি চিন্তাবিদ্যালয় রয়েছে।
1) ফাংশনগুলির শীর্ষে সমস্ত কিছু ঘোষণা করুন কারণ বছর 1987।
2) প্রথম ব্যবহারের সবচেয়ে নিকটতম এবং সম্ভাব্যতম ক্ষুদ্রতম ক্ষেত্রে ঘোষণা করুন।
আমার এই উত্তর দুটি হয়! আমাকে ব্যাখ্যা করতে দাও:
দীর্ঘ ক্রিয়াকলাপের জন্য, 1) রিফ্যাক্টরিং খুব শক্ত করে। আপনি যদি এমন কোনও কোডবেসে কাজ করেন যেখানে বিকাশকারীগণ সাবরুটাইনগুলির ধারণার বিপরীতে থাকে, তবে ফাংশনটি শুরু করার সময় আপনার কাছে 50 পরিবর্তনশীল ঘোষণা থাকবে এবং এর মধ্যে কয়েকটি লুপের জন্য কেবল "i" হতে পারে ফাংশন নীচে।
অতএব আমি এ থেকে শীর্ষে-পিটিএসডি-তে ঘোষণাটি বিকাশ করেছি এবং ধর্মীয়ভাবে 2 বিকল্পটি করার চেষ্টা করেছি।
একটি কারণের কারণে আমি বিকল্পটিতে ফিরে এসেছি: সংক্ষিপ্ত ফাংশন। যদি আপনার ফাংশনগুলি যথেষ্ট ছোট হয় তবে আপনার কয়েকটি স্থানীয় ভেরিয়েবল থাকবে এবং যেহেতু ফাংশনটি সংক্ষিপ্ত, আপনি যদি এটিকে ফাংশনের শীর্ষে রাখেন তবে সেগুলি এখনও প্রথম ব্যবহারের কাছাকাছি থাকবে।
এছাড়াও, যখন আপনি শীর্ষে ঘোষণা করতে চান তবে "ডিক্লেয়ার এবং এনএলএলএল সেট করুন" এর অ্যান্টি-প্যাটার্নটি যখন আপনি শীর্ষে ঘোষণা করতে চান তবে আপনি আরম্ভের জন্য প্রয়োজনীয় কিছু গণনা করেন নি সমাধান করা হয়েছে কারণ আপনাকে যে জিনিসগুলি আরম্ভ করার দরকার তা সম্ভবত যুক্তি হিসাবে গ্রহণ করা হবে।
সুতরাং এখন আমার চিন্তাভাবনাটি হ'ল আপনাকে প্রথমে ব্যবহারের জন্য শীর্ষস্থানীয় এবং যতটা সম্ভব বন্ধের ঘোষণা দেওয়া উচিত। সুতরাং উভয়! এবং এটি করার উপায় হ'ল ভাল বিভক্ত সাবরুটাইনগুলি।
তবে আপনি যদি দীর্ঘ ফাংশনে কাজ করছেন, তবে প্রথমে ব্যবহারের সবচেয়ে কাছের জিনিসগুলি রাখুন কারণ সেই পদ্ধতিগুলি উত্তোলন করা আরও সহজ হবে।
আমার রেসিপি এটি। সমস্ত স্থানীয় ভেরিয়েবলের জন্য, ভেরিয়েবলটি নিয়ে নিন এবং এর ঘোষণাটি নীচে নিয়ে যান, সংকলন করুন, তারপরে সংকলন ত্রুটির ঠিক আগে ঘোষণাটি সরান। এটিই প্রথম ব্যবহার। সমস্ত স্থানীয় ভেরিয়েবলের জন্য এটি করুন।
int foo = 0;
<code that uses foo>
int bar = 1;
<code that uses bar>
<code that uses foo>
এখন, স্কোপ ব্লকটি সংজ্ঞায়িত করুন যা ঘোষণার আগে শুরু হয় এবং প্রোগ্রামটি সংকলন না হওয়া পর্যন্ত শেষ সরিয়ে নিন
{
int foo = 0;
<code that uses foo>
}
int bar = 1;
<code that uses bar>
>>> First compilation error here
<code that uses foo>
এটি সংকলন করে না কারণ এখানে আরও কিছু কোড রয়েছে যা ফু ব্যবহার করে। আমরা লক্ষ্য করতে পারি যে সংকলকটি বার ব্যবহার করে এমন কোডের মধ্য দিয়ে যেতে সক্ষম হয়েছিল কারণ এটি ফু ব্যবহার করে না। এই মুহূর্তে, দুটি পছন্দ আছে। যান্ত্রিক একটিটি কেবল "} "টিকে নীচের দিকে সরানো হয় যতক্ষণ না এটি সংকলিত হয়, এবং অন্যটি পছন্দটি কোডটি পরীক্ষা করে পর্যায়ক্রমে নির্ধারণ করা হয় যে অর্ডারটি এতে পরিবর্তন করা যেতে পারে:
{
int foo = 0;
<code that uses foo>
}
<code that uses foo>
int bar = 1;
<code that uses bar>
যদি অর্ডারটি স্যুইচ করা যায় তবে আপনি সম্ভবত এটিই চান কারণ এটি অস্থায়ী মানগুলির জীবনকালকে ছোট করে তোলে।
আরেকটি বিষয় লক্ষণীয়, foo এর মান ব্যবহার করা কোডের ব্লকগুলির মধ্যে সংরক্ষণ করা দরকার, বা এটি উভয়ই আলাদা foo হতে পারে। উদাহরণ স্বরূপ
int i;
for(i = 0; i < 8; ++i){
...
}
<some stuff>
for(i = 3; i < 32; ++i){
...
}
এই পরিস্থিতিতে আমার পদ্ধতির চেয়ে বেশি প্রয়োজন। কী করা উচিত তা নির্ধারণ করতে বিকাশকারীকে কোডটি বিশ্লেষণ করতে হবে।
তবে প্রথম পদক্ষেপটি প্রথম ব্যবহারটি সন্ধান করছে। আপনি এটি দৃশ্যত করতে পারেন তবে কখনও কখনও, ঘোষণা মুছে ফেলা সহজ, সহজ সংকলন করার চেষ্টা করুন এবং এটি প্রথম ব্যবহারের উপরে রেখে দিতে পারেন back যদি প্রথম ব্যবহারটি যদি একটি বিবৃতিতে থাকে তবে এটি সেখানে রাখুন এবং এটি সংকলন করে কিনা তা পরীক্ষা করুন। সংকলকটি তখন অন্যান্য ব্যবহারগুলি সনাক্ত করবে। উভয় ব্যবহারকে ঘিরে একটি স্কোপ ব্লক তৈরি করার চেষ্টা করুন।
এই যান্ত্রিক অংশটি সম্পন্ন হওয়ার পরে, ডেটা কোথায় রয়েছে তা বিশ্লেষণ করা সহজ হয়ে যায়। যদি কোনও ভেরিয়েবলটি বড় স্কোপ ব্লকে ব্যবহৃত হয়, পরিস্থিতিটি বিশ্লেষণ করুন এবং দেখুন যে আপনি কেবল দুটি ভিন্ন জিনিসের জন্য একই ভেরিয়েবলটি ব্যবহার করছেন কিনা (যেমন একটি "আমি" যা লুপের জন্য দুটির জন্য ব্যবহৃত হয়)। যদি ব্যবহারগুলি সম্পর্কিত না হয় তবে এই সম্পর্কিত নয় এমন প্রতিটি ব্যবহারের জন্য নতুন ভেরিয়েবল তৈরি করুন।