প্যারামিট্রাইজ পদ্ধতি বনাম গ্লোবাল ভেরিয়েবল


10

আমার কোডটি বাড়তে শুরু করার সাথে আমার খুব সাধারণ প্রশ্ন রয়েছে যা কিছুক্ষণের জন্য আমাকে হতাশ করে চলেছে।

প্যারামিটারগুলি নেস্টেড ফাংশন কলগুলির দীর্ঘ রুটগুলির মধ্য দিয়ে গেলে গ্লোবাল ভেরিয়েবলগুলি দ্বারা প্রতিস্থাপন করা উচিত?

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

আমাকে নিজের ব্যাখ্যা করুন:

functionA(){
   x = something
   functionB(x)
}
functionB(x){
   functionC(x)
}
functionC(x){
   finallyDoSomethingWithX(x)
}
finallyDoSomethingWithX(x){
  x += 1 //Very dummy example ignoring pass by value, not reference.
}

পরিবর্তে:

globalX;
functionA(){
   globalX = something
   functionB()
}
...
...
...
finallyDoSomethingWithX(){
   globalX += 1
}

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

আমি মনে করি এটি আমার সাথে ঘটছে কারণ আমি আসলে ডিজাইনের ধরণগুলি ব্যবহার করছি না কারণ আমি জাভাস্ক্রিপ্টে প্রোগ্রামিং করছি যা আমার কাছে মাঝারি প্রকল্পগুলির জন্য একটি-স্ক্রিপ্ট-ডিল-সমস্ত ভাষার সাথে মনে হয়।

কোন পরামর্শ? নিদর্শন? প্রয়োজনে আমি আরও নির্দিষ্ট হতে পারি।


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

প্লেগের মতো এড়িয়ে চলুন বুঝতে পারছিল না। "আপনি সমস্যাটি সঠিকভাবে ভেঙে তোলেননি" - এর উপর আপনি আরও কিছুটা ব্যাখ্যা করতে পারেন। আমি সাধারণ ধারণাটি বুঝতে পারি তবে আমি এটি উদাহরণে বুঝতে বা বোঝার জন্য কিছু করতে পারি না with
এএফপি_৫৫৫

2
একটি সাধারণ প্রতিকার যখন আপনি নিজেকে অনেক স্তর গভীরভাবে তর্কগুলি পাস করে দেখেন একটি পদ্ধতি অবজেক্ট তৈরি করা : একটি নতুন শ্রেণীর একটি অবজেক্ট যার পদ্ধতিগুলি পরামিতিগুলি পাশ করে এমন ফাংশনের সাথে সামঞ্জস্য করে। প্যারামিটারগুলি পরে বস্তুর স্থানীয় ভেরিয়েবল হয়ে উঠতে পারে এবং এর পদ্ধতিগুলি আর মানগুলির সাথে অতিক্রম করার প্রয়োজন হয় না।
কিলিয়ান ফট

ধন্যবাদ কিলিয়ানফথ ধন্যবাদ আপনি দয়া করে কিছু কোড দিয়ে বিস্তারিত বলতে পারেন যাতে আমি উত্তরটি পরীক্ষা করতে পারি?
এএফপি_৫৫৫

1
আপনার জাভাস্ক্রিপ্ট কোডের কাঠামোর সাথে আপনি অন্যান্য ভাষায় যেমন আচরণ করতে চান (যেমন "যারা" প্রকৃত "শ্রেণি ব্যবহার করে)। এসও সম্পর্কিত এই সম্পর্কিত প্রশ্নের কয়েকটি দরকারী লিঙ্ক: স্ট্যাকওভারফ্লো
বেন কট্রেল

উত্তর:


7

গ্লোবাল ভেরিয়েবল ব্যবহার করবেন না।

এছাড়াও, ফাংশনগুলির শৃঙ্খলে ডাউন প্যারামিটারগুলি পাস করবেন না!

এটি কঠিন কারণ আপনি প্রকৃত উদাহরণ ব্যবহার করেন না। তবে সাধারণত সেখানে আরও ভাল পদ্ধতির ব্যবস্থা করা যেতে পারে।

আসুন আমাদের বলুন যে আমাদের কাছে একটি পাসওয়ার্ড ভেরিয়েবল রয়েছে যা আমাদের এপিআইএস কল করতে প্রয়োজন যা বিভিন্ন নিম্ন স্তরের ফাংশন দ্বারা ব্যবহৃত হয়।

গ্লোবাল পদ্ধতির (psudo কোড)

var pass;

function multiply(a,b) {
   return apiMultiply(pass,a,b);
}

প্যারামিটার পাসিং পদ্ধতির

function multiply(a,b,pass) {
    return apiMultiply(pass,a,b);
}

অবজেক্ট অ্যাপ্রোচ

class math {
    var api;
    constructor(pass) {
        api = new api(pass);
    }

    function Multiply(a,b) {
        api.Multiply(a,b); //uses pass from constructor
    }
}

Excelent। এইভাবে পাসটি বৈশ্বিক পরিবেশে নয় এবং মাল্টিপল ফাংশনগুলির জন্য প্যারামিটারও নয় কারণ এটি বস্তুর বৈশিষ্ট্যগুলি থেকে নেওয়া যেতে পারে। ধন্যবাদ।
এএফপি_৫৫৫

3

প্লেগের মতো গ্লোবালগুলি এড়িয়ে চলুন।

যে কোনও কোড একটি বিশ্বব্যাপী পরিবর্তন করতে পারে। সুতরাং আপনার যদি শৃঙ্খলা এ (x) -> বি (এক্স) -> সি (এক্স) -> ... -> জেড (এক্স) থাকে এবং আপনি এক্সকে একটি গ্লোবাল এক্সে সংরক্ষণ করেন এবং এখন আপনার শৃঙ্খল রয়েছে এ- > বি-> সি -> ...-> জেড, তারপরে সেই দীর্ঘ শৃঙ্খলার প্রতিটি একক ধাপে বা সম্পূর্ণ স্বাধীন কোডে, কেউ এক্স পরিবর্তন করতে পারে Z এবং জেড যে মানটি ব্যবহার করে তা এর থেকে সম্পূর্ণ আলাদা হতে পারে A দিয়ে শুরু

এটি একটি দুঃস্বপ্ন তবে যদি আপনি কখনই নিশ্চিত হন যে আপনার কোডটি এটি করার কথা বলেছে তা করে বা আপনার মনে হয় যা করে তা এটি করে।


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