কাজ শুরু করার পরিবর্তে, অভ্যন্তরীণ ব্লকগুলিতে ঘোষণা দেওয়ার সম্ভাব্য অসুবিধা কী?


9

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

উত্তর:


8

আমি দুটি প্রধান সুবিধা দেখতে পাচ্ছি:

  • ভিন্ন ধরণের সাথে পরিবর্তনশীল নামগুলি পুনরায় ব্যবহার করা প্রতিরোধ করা হয়।
  • এটি পূর্ববর্তী সময়ে স্পষ্ট হয়ে যায় যে একটি রুটিনটি রিফ্যাক্ট করা দরকার। শীর্ষে থাকা ভেরিয়েবলগুলি মোটামুটি দ্রুত একটি বড় জগাখিচুড়ি হয়ে যায় এবং এই জগাখিচুদি চিনতে পারা সহজ।

এর নুনের মূল্য নির্ধারণকারী যে কোনও সংকলক যেভাবেই চলকগুলির পরিধি অপসারণ করতে পারে, সুতরাং এটি নিখুঁতভাবে বিন্যাসের উদ্বেগ।

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


3

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


3

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


3

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

এভি বিধি 136
Declarations should be at the smallest feasible scope

এর জন্য যুক্তি হিসাবে বর্ণনা করা হয়

This rule attempts to minimize the number of live variables that must be simultaneously considered. Furthermore, variable declarations should be postponed until enough information is available for full initialization

আপনি যদি সি ++ তে থাকেন তবে আপনার যখন প্রয়োজন হয় তখন ভেরিয়েবলটিকে অগ্রাধিকার দেওয়া হয় lar


3

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

আমি এই মতামত নিয়ে একা নই। এখানে একটি প্রশ্ন যা একই সমস্যাটিকে মোকাবেলা করে: /software/56585/where-do-you-declare-variables-the-top-of-a-method- or-hen-you-need -তাহতের উত্তরটি হ'ল আপনি তাদের কোথায় ব্যবহার করবেন তা তাদের ঘোষণার জন্য। একই অভ্যাসটি রবার্ট সি মার্টিনের 'ক্লিন কোড' বইয়ে বর্ণনা করা হয়েছে।

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


2

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

যদি এটি কোনও লুপের মধ্যে থাকে তবে আপনাকে বার বার মেমরিটি পুনঃস্থাপন করতে হবে, পারফরম্যান্সের ক্ষেত্রে এটি ব্যয়বহুল হতে পারে।

উভয় উপায়ে জিনিস করার কারণ রয়েছে।


1

1989 এর পুরানো সি-স্ট্যান্ডার্ড কেবল একটি ব্লকের শুরুতে পরিবর্তনশীল ঘোষণার অনুমতি দেয়।

কেবলমাত্র C99 ঘোষণার যে কোনও জায়গায় অনুমতি দেওয়া হয়েছে। হয়তো আপনার জায়গাটি এখনও C99 এ স্যুইচ করেনি।


আমরা সি 99 ব্যবহার করি - তবে আরও গুরুত্বপূর্ণ, আমি এটি সন্ধান করার চেয়ে ফাংশন শুরুর পরিবর্তে অভ্যন্তরীণ ব্লকের মধ্যে কীভাবে এর ঘোষণার অন্তর্নিহিত রয়েছে are সম্ভবত, আমি যথেষ্ট পরিষ্কার ছিল না ...
টিসিএসগ্রাদ

1

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

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

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