পরিষ্কার কোড: কয়েকটি পরামিতি সহ ফাংশন [বন্ধ]


49

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

গ্লোবাল ভেরিয়েবলগুলি ব্যবহার এবং ফাংশনগুলিতে অনেকগুলি তর্কগুলি পাস করার উভয় অনুশীলনই খারাপ প্রোগ্রামিং অনুশীলন হবে, তবে বিশ্বব্যাপী ভেরিয়েবলের ব্যবহারের ফলে ফাংশনগুলির পরামিতিগুলির সংখ্যা হ্রাস করতে পারে ...

সুতরাং আমি আপনার এটি সম্পর্কে যা ভাবছেন তা শুনতে চেয়েছিলাম, ফাংশনগুলির পরামিতিগুলির সংখ্যা হ্রাস করার জন্য এটি বৈশ্বিক ভেরিয়েবলগুলি ব্যবহারের পক্ষে মূল্যবান কিনা? কোন ক্ষেত্রে এটি হবে?

আমি যা মনে করি তা হ'ল এটি বিভিন্ন কারণের উপর নির্ভর করে:

  • উত্স কোড আকার।
  • ফাংশনগুলির গড় প্যারামিটারের সংখ্যা।
  • ফাংশন সংখ্যা।
  • ফ্রিকোয়েন্সি যেখানে একই ভেরিয়েবল ব্যবহার করা হয়।

আমার মতে যদি সোর্স কোডের আকার তুলনামূলকভাবে ছোট হয় (কোডের 600 লাইনের চেয়ে কম), সেখানে অনেকগুলি ফাংশন রয়েছে, একই ভেরিয়েবলগুলি প্যারামিটার হিসাবে পাস করা হয় এবং ফাংশনগুলির অনেকগুলি পরামিতি থাকে, তবে গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করা ভাল হবে তবে আমি জানতে ইচ্ছুক...

  • আপনি কি আমার মতামত শেয়ার করেন?
  • সোর্স কোড ইত্যাদির ক্ষেত্রে অন্যান্য ক্ষেত্রে আপনার কী মনে হয়?

দ্রষ্টব্য । আমি এই পোস্টটি দেখেছি , শিরোনামগুলি খুব একই রকম, তবে তিনি কী জানতে চান তা জিজ্ঞাসা করেন না।


144
আমি মনে করি না বিকল্পটি গ্লোবাল হবে, তবে পরিবর্তে বস্তুগুলিতে যুক্তি সংহত করে। এটি সম্ভবত একটি পরামর্শ যা এর postLetter(string country, string town, string postcode, string streetAddress, int appartmentNumber, string careOf)গন্ধযুক্ত সংস্করণ postLetter(Address address)। বইটি পড়া চালিয়ে যান, আশা করি এরকম কিছু বলবে।
নাথান কুপার

3
@ ডকব্রাউন আমি আরও কিছু বোঝার জন্য প্রশ্নটি নিয়েছিলাম যেমন আঙ্কেল বব বলেছেন যে 3 টিরও বেশি প্যারাম ব্যবহার করবেন না তাই আমি বিশ্বব্যাপী ভেরিয়েবলগুলি সঠিকভাবে ব্যবহার করে এই সমস্যাটি ঘটাতে পারি? :-) আমি মনে করি সম্ভবত লেখক জানেন না যে এই সমস্যাটি আরও ভাল করার আরও ভাল উপায় আছে - যেমন নীচের উত্তরে উল্লিখিত হয়েছে।
বাইটেদেভ

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

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

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

উত্তর:


113

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

... একই ভেরিয়েবলগুলি পরামিতি হিসাবে পাস করা হয়

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

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


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

1
এটি কোনও ডিজাইনের সমস্যার মতো শোনায় না। আমি এখনও মনে করি ফাংশনগুলিতে পরামিতিগুলি পাস করা সেরা নকশা। আপনি যেমন বর্ণনা করছেন এমন একটি এআই সিস্টেমে আমি সিস্টেমটির টুকরো পরীক্ষা করার জন্য ইউনিট পরীক্ষাগুলি লিখতে দরকারী এবং এটি করার সহজ উপায় পরামিতিগুলি সহ with
স্যামুয়েল

96
আরও প্যারামিটারগুলি বোঝার জন্য একটি সাব্রোটিনকে আরও শক্ত করে তোলে, গ্লোবাল ভেরিয়েবলগুলি পুরো প্রোগ্রামটিকে অর্থাত্ সমস্ত সাবরুটাইনগুলি বোঝা শক্ত করে তোলে ।
জার্গ ডব্লু মিট্টাগ

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

6
উত্তর যা বলেছে তার মধ্যে সঠিক, তবুও মনে হচ্ছে এটি "ক্লিন কোড" এর পুনর্বিবেচনা সম্পর্কে ওপিদের ভুল বোঝাবুঝির দরকার পড়ে। আমি নিশ্চিত যে বইটিতে গ্লোবাল দ্বারা ফাংশন পরামিতিগুলি প্রতিস্থাপনের জন্য কোনও সুপারিশ নেই।
ডক ব্রাউন

68

প্লেগের মতো আপনার বৈশ্বিক পরিবর্তনগুলি এড়ানো উচিত ।

আমি আর্গুমেন্টের সংখ্যার (যেমন 3 বা 4) একটি সীমাবদ্ধতা রাখব না, তবে আপনি যদি সম্ভব হয় তবে এগুলি ন্যূনতম রাখতে চান না

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

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


5
কাঠামোর মধ্যে লুকিয়ে থাকা দশটি পরামিতিগুলি পাস করার এবং সেগুলি স্পষ্টভাবে পাস করার মধ্যে প্রধান পার্থক্য কী?
রুসলান

21

9
এবং আপনি ফাংশনটিকে ছোট ফাংশনে রিফ্যাক্টর করার সম্ভাবনা বেশি, যেহেতু আপনি দশ প্যারামিটারের পরিবর্তে কেবলমাত্র একটি পরামিতিটি উপ-ফাংশনে যেতে পারেন। এবং যদি আপনি অবস্থানগত যুক্তি ব্যবহার করেন তবে পরামিতিগুলি মিশ্রণের ঝুঁকি কম।
হ্যানস ওলসন

8
এটি ঠিক আছে, তবে আপনাকে স্ট্রাক্টগুলিতে সুসংহততা নিশ্চিত করতে হবে - নিশ্চিত করুন যে স্ট্রাক্টে বিভক্ত পরামিতিগুলি 'সম্পর্কিত'। আপনি কিছু পরিস্থিতিতে একাধিক স্ট্রাক্ট ব্যবহার করতে পারেন।
অ্যান্ড্রু ডড্ডস

8
নিবন্ধন করুন যদি কোনও স্ট্রাক্টে প্যারামিটার স্থাপনের একমাত্র যুক্তি হ'ল এগুলিকে একটি নির্দিষ্ট কার্যক্রমে প্রেরণ করা হয় তবে সংহতি সম্ভবত মায়াময়ী।
sdenham

55

আমরা জ্ঞানীয় লোড সম্পর্কে কথা বলছি, সিনট্যাক্স নয় not তাই প্রশ্ন হচ্ছে ... কি হল এই প্রেক্ষাপটে একটি প্যারামিটার?

একটি প্যারামিটার এমন একটি মান যা ফাংশনের আচরণকে প্রভাবিত করে। যত বেশি প্যারামিটার, মানগুলির তত বেশি সংমিশ্রণগুলি, ফাংশন সম্পর্কে কঠোর যুক্তি পায়।

সেই অর্থে, ফাংশনটি যে বৈশ্বিক ভেরিয়েবলগুলি ব্যবহার করে তা হ'ল পরামিতি। তারা এমন প্যারামিটার যা এর স্বাক্ষরে উপস্থিত হয় না, যেগুলি নির্মাণ-ক্রম, অ্যাক্সেস নিয়ন্ত্রণ এবং পুনরায় পুনর্বিবেচনা সংক্রান্ত সমস্যা রয়েছে।

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


11
আপনার কাছে +1, এটি কোনও টয়লেট বা কমোড হোক তারা একই রকম হন। ভেড়ার পোশাকের নেকড়ের দিকে ইশারা করে দুর্দান্ত কাজ।
জারেড স্মিথ

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

4
অবশ্যই, একটি গ্লোবাল ভেরিয়েবল একটি গোপন প্যারামিটার।
বিল কে

+1 আপনার বক্তব্য, আমি ম্যাটল্যাব সিমুলেশনগুলি দেখেছি যা ডেটা পাস করার জন্য গ্লোবাল ভেরিয়েবলের উপর নির্ভর করে। ফলাফলটি সম্পূর্ণরূপে অপঠনযোগ্য ছিল কারণ কোন ভেরিয়েবলগুলি কোন ফাংশনের পরামিতি ছিল তা বলা খুব শক্ত ছিল।
আম্মন 21

34

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

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


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

2
@ জেএমপিসি 26: ক্লাসগুলি খুব বড় হয়ে ওঠার সাথে সাথে অনেকগুলি সদস্যের ভেরিয়েবল পাওয়া যায় তবে তার ফলে "জটিলতার অসাধারণ বৃদ্ধি" পাওয়া যায়, ফলে ফলাফলটি আর মিলে যায় না।
ডক ব্রাউন

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

3
@ jpmc26 আমি রিফ্যাক্টরিং করার সময় নিয়মিতভাবে ব্যবহার করি এমন একটি প্যাটার্নটি হ'ল কনস্ট্রাক্টর প্রসঙ্গ নির্ধারণের মতো কাজ করে, তারপরে পদ্ধতি আর্গুমেন্টগুলি কোনও ক্রিয়াতে সুনির্দিষ্ট। অবজেক্টটি হুবহু রাষ্ট্রীয় নয়, কারণ এটি ধারণ করা রাষ্ট্রটি কখনই পরিবর্তিত হয় না, তবে এই সাধারণ পদক্ষেপগুলি এই ধারকটির পদ্ধতিগুলিতে সরিয়ে পাঠযোগ্যতার উল্লেখযোগ্যভাবে উন্নতি করে যেখানে এটি ব্যবহৃত হয় (প্রসঙ্গটি কেবল একবার সেট করা হয়, পাইথনের প্রসঙ্গ পরিচালকদের অনুরূপ), এবং সদৃশ হ্রাস পেলে বস্তুর পদ্ধতিতে একাধিক কল করা হয়।
ইজকাটা

3
+1 স্পষ্ট করে বলার জন্য যে সদস্য ভেরিয়েবলগুলি গ্লোবাল ভেরিয়েবল নয়। অনেক লোক ভাবেন তারা।
তুলিনাস কর্ডোভা

34

অনেকগুলি পরামিতি থাকা অনাকাঙ্ক্ষিত হিসাবে বিবেচিত হয় তবে তাদের ক্ষেত্র বা গ্লোবাল ভেরিয়েবলগুলিতে রূপান্তর করা আরও খারাপ কারণ এটি আসল সমস্যাটি সমাধান করে না তবে নতুন সমস্যাগুলির প্রবর্তন করে।

অনেক পরামিতি থাকা নিজেই সমস্যা নয়, তবে এটি এমন একটি লক্ষণ যা আপনার সমস্যা হতে পারে। এই পদ্ধতিটি বিবেচনা করুন:

Graphics.PaintRectangle(left, top, length, height, red, green, blue, transparency);

7 পরামিতি থাকা একটি সুনির্দিষ্ট সতর্কতা চিহ্ন। অন্তর্নিহিত সমস্যাটি হ'ল এই পরামিতিগুলি স্বতন্ত্র নয় তবে গ্রুপগুলিতে অন্তর্ভুক্ত। leftএবং topএকটি হিসেবে একসঙ্গে অন্তর্গত Position-structure, lengthএবং heightহিসেবে Sizeগঠন, এবং red, blueএবং greenহিসেবে Colorগঠন। এবং সম্ভবত Colorএবং স্বচ্ছতা একটি Brushকাঠামোর অন্তর্ভুক্ত? সম্ভবত Positionএবং Sizeকোনও Rectangleকাঠামোর সাথে একত্রে অন্তর্ভুক্ত , Paintএক্ষেত্রে আমরা এমনকি এটির Rectangleপরিবর্তে অবজেক্টের কোনও পদ্ধতিতে রূপান্তর করতে বিবেচনা করতে পারি ? সুতরাং আমরা এর সাথে শেষ করতে পারি:

Rectangle.Paint(brush);

কার্যোদ্ধার! তবে গুরুত্বপূর্ণ বিষয়টি হ'ল আমরা প্রকৃতপক্ষে সামগ্রিক নকশাটি উন্নত করেছি, এবং পরামিতিগুলির সংখ্যা হ্রাস এটির একটি পরিণতি । যদি আমরা অন্তর্নিহিত সমস্যাগুলি সমাধান না করে কেবল প্যারামিটারের সংখ্যা হ্রাস করি তবে আমরা এটির মতো কিছু করতে পারি:

Graphics.left = something;
Graphics.top = something;
Graphics.length = something;
...etc
Graphics.PaintRectangle();

এখানে আমরা প্যারামিটারের সংখ্যায় একই হ্রাস অর্জন করেছি, তবে আমরা আসলে নকশাটিকে আরও খারাপ করেছি

নীচের লাইন: যে কোনও প্রোগ্রামিং পরামর্শ এবং নিয়মের অফ-থাম্বের জন্য অন্তর্নিহিত যুক্তিটি বোঝা সত্যই গুরুত্বপূর্ণ।


4
+1 দুর্দান্ত, গঠনমূলক, বোধগম্য, অ তাত্ত্বিক উত্তর।
AnoE

1
উল্লেখ করার দরকার নেই, দৈর্ঘ্য এবং উচ্চতার বৈশিষ্ট্য উভয়ই কী করছে আপনার "বর্গক্ষেত্র"। :)
ওয়াইল্ডকার্ড

1
+1 স্বীকার করার জন্য যে কিছু উত্তর দ্বারা সূচিত স্পষ্ট তৃতীয় উপায় (যেমন ফাংশন কলের আগে কিছু কাঠামো / অবজেক্টের জন্য অনেক অ্যাসাইনমেন্ট) এর চেয়ে ভাল নয়।
benxyzzy

@ উইল্ডকার্ড: ধন্যবাদ, বিষয়টি বিভ্রান্ত না করার জন্য এটি "আয়তক্ষেত্র" এ পরিবর্তন করেছে!
জ্যাকবিবি

7

ফাংশনগুলির পরামিতিগুলির সংখ্যা হ্রাস করতে বিশ্বব্যাপী ভেরিয়েবলগুলি ব্যবহার করা কি মূল্য?

না

আমি এই বইয়ের প্রথম অধ্যায়গুলি পড়েছি

আপনি বইয়ের বাকীটি পড়েছেন?

গ্লোবাল হ'ল একটি লুকানো প্যারামিটার। এগুলি একটি ভিন্ন ব্যথা ঘটায়। তবে এখনও ব্যথা হচ্ছে। এই নিয়মটি পেতে উপায় সম্পর্কে চিন্তাভাবনা বন্ধ করুন। এটি কীভাবে অনুসরণ করা যায় সে সম্পর্কে ভাবেন।

একটি পরামিতি কি?

এটি স্টাফ একটি দুর্দান্ত লেবেলযুক্ত বাক্সে। আপনি যে কিছু স্টাফ রাখতে পারবেন তাতে আপনার কাছে কতগুলি বাক্স রয়েছে তা কেন গুরুত্বপূর্ণ নয়?

এটি শিপিং এবং হ্যান্ডলিংয়ের ব্যয়।

Move(1, 2, 3, 4)

আমাকে বলুন আপনি এটি পড়তে পারেন। যাও, চেষ্টা করুন।

Move(PointA, PointB)

এই জন্য.

সেই কৌশলটিকে পরিচিতি পরামিতি অবজেক্ট বলা হয় ।

এবং হ্যাঁ এটি কেবল একটি কৌশল যদি আপনি যা করছেন তা পরামিতিগুলি গণনা করছে। আপনার গণনা করা উচিত আইডিএএস! Abstractions! আপনি একবারে আমাকে কতটা ভাবতে বাধ্য করছেন? সহজবোধ্য রাখো.

এখন এটি একই গণনা:

Move(xyx, y)

ও! এটা কি সাংঘাতিক! এখানে কি ভুল হয়েছে?

এটি ধারণার সংখ্যা সীমাবদ্ধ করার পক্ষে যথেষ্ট নয়। তারা অবশ্যই পরিষ্কার ধারণা হতে হবে। হ্যাক একটি জাইএক্স কি?

এখন এটি এখনও দুর্বল। এ সম্পর্কে ভাবার আরও শক্তিশালী উপায় কী?

ফাংশনগুলি ছোট হওয়া উচিত। এর চেয়ে ছোট নয়।

চাচা বব

Move(PointB)

ক্রিয়াকলাপটি আসলে আরও বেশি কী করা দরকার? একক দায়িত্বের নীতিটি কেবল শ্রেণীর জন্য নয়। গুরুতরভাবে, একটি ভার্চালিত দুঃস্বপ্নে পরিণত হওয়া থেকে কোনও ক্রিয়াকলাপ বন্ধ করার জন্য এটি একটি পুরো আর্কিটেকচারটি পরিবর্তনযোগ্য, কখনও কখনও 10 টি সম্পর্কিত পরামিতি যার মধ্যে কিছু অন্যের সাথে ব্যবহার করা যায় না।

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

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


3
"বাকী বইটি পড়েছ?" আপনার প্রশ্নের উত্তর আমার পোস্টের প্রথম 8 টি শব্দের মধ্যে দেওয়া হয়েছে ...
ওসিট্র্যাপ

আমি সম্পূর্ণরূপে একমত - বিষয়টি হ'ল সমস্যাটি ছোট ছোট টুকরো টুকরো করে। বস্তুগুলি এই টুকরোগুলিগুলিকে সংগঠিত করতে এবং গোষ্ঠীগুলিতে সত্যই সহায়তা করতে পারে, তারা সংযোগযুক্ত টুকরাগুলির একগুচ্ছের পরিবর্তে একটি একক ধারণামূলক ইউনিটকে প্যারামিটার হিসাবে পাস করার অনুমতি দেয়। আমি 3 টিরও বেশি পরামিতি সহ কোনও পদ্ধতি দেখিলে আমি antsy পাই। 5 হ'ল এটি ইঙ্গিত দেয় যে আমার নকশাটি কৃপণ হয়ে গেছে এবং আমার আরও একটি রাউন্ড রিফ্যাক্টরিং প্রয়োজন। প্যারামিটার গণনার মতো নকশা সমস্যাগুলি সমাধান করার জন্য আমি যে সর্বোত্তম উপায়টি খুঁজে পেয়েছি তা হ'ল সহজতর রিফ্যাক্টর জিনিসগুলি ছোট, সহজ ইউনিটগুলিতে (ক্লাস / পদ্ধতি)।
বিল কে

2
এই উত্তরের স্বর উন্নত করা যেতে পারে। এটি খুব আকস্মিক এবং কঠোর হিসাবে পড়ছে। উদাহরণস্বরূপ: "আমাকে বলুন আপনি এটি পড়তে পারেন Go এগিয়ে যান, চেষ্টা করুন।" খুব আক্রমণাত্মক বলে মনে হচ্ছে এবং "উপরে / নীচে দুটি ফাংশন কলগুলির মধ্যে আবার কোনটি সহজে লেখা যায়?" আগ্রাসন ছাড়াই আপনার পয়েন্টটি পেতে চেষ্টা করা উচিত। ওপি শেখার চেষ্টা করছে মাত্র।
কাইল এ

ভুলে যাবেন না ওপিও জাগ্রত থাকার চেষ্টা করছে।
candied_orange

4

প্যারামিটারগুলি হ্রাস করতে আমি কখনও বিশ্বব্যাপী ভেরিয়েবল ব্যবহার করব না। কারণ হ'ল বিশ্বব্যাপী ভেরিয়েবলগুলি যে কোনও ফাংশন / কমান্ড দ্বারা পরিবর্তিত হতে পারে, সুতরাং ফাংশন ইনপুটটি অবিশ্বাস্য এবং মূল্যবোধগুলির প্রবণ করে তোলে যা ফাংশনটি পরিচালনা করতে পারে তার সুযোগের বাইরে থাকে। যদি ফাংশনটি কার্যকর করার সময় ভেরিয়েবল পরিবর্তন করা হয় এবং অর্ধেক ফাংশনের অন্যান্য অর্ধেকের চেয়ে আলাদা মান থাকে?

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

প্যারামিটারের পরিবর্তে যদি আপনাকে গ্লোবাল ভেরিয়েবলগুলি পাস করতে হয় তবে কোডটিকে নতুন করে ডিজাইন করা ভাল rable

শুধু আমার দুই সেন্ট।


"প্যারামিটারগুলি হ্রাস করতে আমি বিশ্বব্যাপী চলকগুলি কখনই ব্যবহার করব না" সম্পূর্ণ একমত। এটি অহেতুক সংযোগ তৈরি করে।
বাইটেডেভ

2

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

আপনি যদি ওও ভাষার কোনও পদ্ধতিতে 3 টিরও বেশি ব্যবহার করে থাকেন তবে আপনার বিবেচনা করা উচিত যে পরমগুলি কোনওভাবে একে অপরের সাথে সম্পর্কিত নয় এবং সুতরাং এর পরিবর্তে আপনার সত্যিকার অর্থে কোনও বস্তুতে যেতে হবে?

এছাড়াও, যদি আপনি আরও (ছোট) ফাংশন তৈরি করেন তবে আপনি খেয়ালও করতে পারেন যে ফাংশনগুলিতে প্রায়শই 3 টি প্যারাম বা তার কম থাকে। এক্সট্রাক্ট ফাংশন / পদ্ধতিটি আপনার বন্ধু :-)।

আরও বেশি প্যারাম থাকার জন্য বিশ্বব্যাপী ভেরিয়েবলগুলি ব্যবহার করবেন না! এটি আরও খারাপের জন্য একটি খারাপ অভ্যাসকে বদলে দিচ্ছে!


1

অনেক ফাংশন পরামিতিগুলির একটি বৈধ বিকল্প হ'ল প্যারামিটার অবজেক্টটি প্রবর্তন করা । আপনার যদি এমন একটি রচনা পদ্ধতি থাকে যা এর প্রায় সমস্ত পরামিতিগুলি অন্যান্য পদ্ধতির গুচ্ছটিতে পাস করে।

সাধারণ ক্ষেত্রে এটি একটি সাধারণ ডিটিও যা বৈশিষ্ট্য হিসাবে পুরানো পরামিতি ছাড়া কিছুই নেই।


1

গ্লোবাল ভেরিয়েবলগুলি সর্বদা কোড করার সহজ উপায় বলে মনে হয় (বিশেষত একটি ছোট প্রোগ্রামে) তবে এটি আপনার কোডটিকে প্রসারিত করা শক্ত করে তুলবে।

হ্যাঁ, আপনি কোনও সত্তায় প্যারামিটারগুলি আবদ্ধ করতে কোনও অ্যারে ব্যবহার করে কোনও ফাংশনে পরামিতিগুলির সংখ্যা হ্রাস করতে পারেন।

function <functionname>(var1,var2,var3,var4.....var(n)){}

উপরের ফাংশনটি সম্পাদনা করে [এসোসিয়েটিভ অ্যারে ব্যবহার করে] এ পরিবর্তন করা হবে -

data=array(var1->var1,
           var2->var2
           var3->var3..
           .....
           ); // data is an associative array

function <functionname>(data)

আমি রবার্ট ব্রিস্টো-জনসনের উত্তরের সাথে একমত : আপনি এমনকি কোনও একক সত্তায় ডেটা বাঁধতে স্ট্রাক্ট ব্যবহার করতে পারেন।


1

পিএইচপি 4 থেকে একটি উদাহরণ গ্রহণ করে, এর জন্য ফাংশনের স্বাক্ষরটি দেখুন mktime():

  • int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

আপনি কি বিভ্রান্তিকর খুঁজে পাচ্ছেন না? ফাংশনটিকে "মেক টাইম" বলা হয় তবে এটি দিন, মাস এবং বছরের পরামিতি পাশাপাশি তিনটি সময় প্যারামিটার নেয় takes তারা কোন আদেশে যায় তা মনে রাখা কত সহজ? দেখলে কি হবে mktime(1, 2, 3, 4, 5, 2246);? আপনি কি অন্য কিছু উল্লেখ না করে বুঝতে পারেন? হয় 224624 ঘন্টা সময় "22:46" হিসেবে ব্যাখ্যা করা? অন্যান্য পরামিতি মানে কি? এটি একটি বিষয় হিসাবে ভাল হবে।

পিএইচপি 5 এ সরানো, এখন একটি ডেটটাইম অবজেক্ট রয়েছে। এর পদ্ধতির মধ্যে দুটি বলা হয় setDate()এবং setTime()। তাদের স্বাক্ষরগুলি নিম্নরূপ:

  • public DateTime setDate ( int $year , int $month , int $day )
  • public DateTime setTime ( int $hour , int $minute [, int $second = 0 ] )

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

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

আপনি সম্ভবত নিম্নলিখিত কাঠামো থাকতে পারে:

<?php
$my_date = new Date;
$my_date->setDay(5);
$my_date->setMonth(4);
$my_date->setYear(2246);

$my_time = new Time;
$my_time->setHour(1);
$my_time->setMinute(2);
$my_time->setSecond(3);

$my_date_time = new DateTime;
$my_date_time->setTime($my_time);
$my_date_time->setDate($my_date);
?>

প্রতিবার দুটি বা তিনটি পরামিতি সেট করা কি বাধ্যতামূলক? আপনি যদি কেবল ঘন্টা বা মাত্র দিন পরিবর্তন করতে চান তবে এখন তা করা সহজ। হ্যাঁ, প্রতিটি প্যারামিটার অন্যদের সাথে কাজ করে কিনা তা নিশ্চিত করার জন্য অবজেক্টটি বৈধ হওয়া দরকার any

সর্বাধিক গুরুত্বপূর্ণ বিষয় হ'ল এটি বোঝা সহজ, এবং তাই বজায় রাখা সহজ? নীচে কোড ব্লকটি একটি mktime()ফাংশনের চেয়ে বড় তবে আমি যুক্তিটি বোঝার চেয়ে অনেক সহজ; এমনকি একটি নন-প্রোগ্রামার এর কাজটি করে কাজ করতে খুব বেশি সমস্যা করবে না। লক্ষ্যটি সর্বদা সংক্ষিপ্ত কোড বা চালক কোড নয়, তবে আরও রক্ষণাবেক্ষণযোগ্য কোড।

ওহ, এবং গ্লোবাল ব্যবহার করবেন না!


1

এখানে প্রচুর ভাল উত্তর এখনও বেশিরভাগ পয়েন্টটি সম্বোধন করছে না। থাম্বের এই নিয়ম কেন? এটি সুযোগ সম্পর্কে, এটি নির্ভরতা সম্পর্কে এবং এটি সঠিক মডেলিং সম্পর্কে।

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

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

সাধারণ সমস্যাটি নয় যে আপনি প্রচুর পরিমাণে যুক্তি দিয়ে একটি নতুন ফাংশন লিখছেন, আপনি কেবলমাত্র কয়েকটি দিয়ে শুরু করবেন যখন আপনি বুঝতে পারবেন না যে আপনি যে সমস্যাটি সমাধান করছেন তা আসলেই কত জটিল। আপনার প্রোগ্রামটি বিকশিত হওয়ার সাথে সাথে যুক্তির তালিকাগুলি ধীরে ধীরে দীর্ঘ হতে থাকে get কোনও মডেল আপনার মনে একবার সেট হয়ে গেলে আপনি এটি রাখতে চান কারণ এটি একটি নিরাপদ রেফারেন্স যা আপনি জানেন। কিন্তু পূর্ববর্তী ক্ষেত্রে মডেলটি দুর্দান্ত হতে পারে না। আপনি যুক্তিতে একটি পদক্ষেপ বা খুব বেশি মিস করেছেন এবং আপনি দু'একটি সত্তাকেও চিনতে ব্যর্থ হয়েছেন। "ঠিক আছে ... আমি আবার শুরু করতে পারি এবং আমার কোডটি রিফ্যাক্টারে এক বা দুটি দিন কাটাতে পারি বা ... আমি এই যুক্তিটি যুক্ত করতে পারি তাই আমি এটি সর্বোপরি সঠিক কাজটি করতে এবং এটি দিয়ে শেষ করতে পারি now আপাতত। এই দৃশ্যের জন্য এই বাগটি আমার প্লেট থেকে সরাতে যাতে আমি স্টিকি নোটটি শেষ করতে পারি ""

আপনি প্রায়শই দ্বিতীয় সমাধানটি নিয়ে যান তত বেশি ব্যয়বহুল আরও রক্ষণাবেক্ষণ হতে চলেছে এবং আরও শক্ত এবং অপ্রত্যাশিত একটি চুল্লী হয়ে উঠবে।

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


0

বেশ কয়েকবার আমি দেখতে পেয়েছি যে উন্নত জিনিসগুলি একসাথে প্রেরণ করা হয়েছিল এমন অনেকগুলি পরামিতিগুলিকে গোষ্ঠীকরণ করা।

  • এটি আপনাকে একসাথে ব্যবহৃত ধারণাগুলির এই উত্থানকে একটি ভাল নাম দিতে বাধ্য করে। আপনি যদি এই পরামিতিগুলি একসাথে ব্যবহার করেন তবে এটির সাথে তাদের সম্পর্ক থাকতে পারে (বা আপনার একসাথে ব্যবহার করা উচিত নয়)।

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

  • পরের বার যখন আমাকে একটি নতুন প্যারামিটার যুক্ত করতে হবে তখন প্রচুর পদ্ধতির স্বাক্ষর পরিবর্তন না করে এটিকে অন্তর্ভুক্ত করার জন্য আমার একটি সুন্দর জায়গা রয়েছে।

সুতরাং এটি 100% বার কাজ নাও করতে পারে তবে নিজেকে জিজ্ঞাসা করুন প্যারামিটারের এই তালিকাটি কোনও অবজেক্টে গ্রুপ করা উচিত কিনা। এবং দয়া করে। অবজেক্টটি এড়ানোর জন্য টিপল জাতীয় টাইপযুক্ত ক্লাস ব্যবহার করবেন না। আপনি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ব্যবহার করছেন, আপনার যদি প্রয়োজন হয় তবে আরও বস্তু তৈরি করতে আপত্তি করবেন না।


0

সমস্ত যথাযোগ্য সম্মানের সাথে, আমি বেশ নিশ্চিত যে আপনি কোনও ফাংশনে অল্প সংখ্যক পরামিতি থাকার বিন্দুটি পুরোপুরি মিস করেছেন missed

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

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

মানগুলির পরিবর্তে অবজেক্টগুলি অতিক্রম করে, সম্ভবত আপনি আপনার মস্তিষ্কের জন্য বিমূর্ততার একটি স্তর অর্জন করেছেন কারণ এখন এটি হ্যাঁ উপলব্ধি করা দরকার , সেই অনুসন্ধান প্রসঙ্গে থাকা 15 টি বৈশিষ্ট্যের কথা চিন্তা না করে এখানে কাজ করার জন্য একটি অনুসন্ধানকন্টেক্সটেক্স পেয়েছি

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

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

গ্লোবালি স্কোপযুক্ত ভেরিয়েবলগুলি কোনও প্রকল্পে দেখা সবচেয়ে খারাপ জিনিসগুলির মধ্যে একটি (বড় বা ছোট)। তারা সঠিক স্কোপ ম্যানেজমেন্টের জন্য একটি অক্ষমতা বোঝায় যা প্রোগ্রামিংয়ের জন্য একটি অত্যন্ত মৌলিক দক্ষতা। তারা। হয়। মন্দ।

আপনার ক্রিয়াকলাপের বাইরে পরামিতিগুলি সরিয়ে এবং গ্লোবালগুলিতে রেখে, আপনি নিজেকে খারাপ (বা পা, বা মুখ) এ গুলি করেছেন। এবং Godশ্বর আপনাকে কখনও সিদ্ধান্ত নিতে নিষেধ করেন যে ওহে, আমি এই গ্লোবালটিকে অন্য কোনও কিছুর জন্য পুনরায় ব্যবহার করতে পারি ... এই চিন্তায় আমার মন কাঁপছে।

পুরো আদর্শটি হ'ল জিনিসগুলি পরিচালনা করা সহজ করে দেওয়া, এবং বিশ্বব্যাপী ভেরিয়েবলগুলি এটি করে না। আমি এতদূর যেতে পেরেছিলাম যে তারা বিপরীত দিকে যেতে সবচেয়ে খারাপ কাজগুলির মধ্যে একটি're


-1

ইন্টারফেসের মধ্যে ঘর্ষণ হ্রাস করতে আমি একটি অত্যন্ত কার্যকর পদ্ধতির (জাভাস্ক্রিপ্টে) সন্ধান করেছি: সমস্ত মডিউলগুলির জন্য অভিন্ন ইন্টারফেস ব্যবহার করুন , বিশেষত: একক প্যারাম ফাংশন।

যখন আপনার একাধিক পরামিতি প্রয়োজন: একটি একক অবজেক্ট / হ্যাশ বা অ্যারে ব্যবহার করুন।

আমার সাথে থাকুন, আমি প্রতিশ্রুতি দিচ্ছি যে আমি ট্রোলিং করছি না ...

আপনি বলার আগে "একটি একক পরম ফানক ভাল?" বা "1 অ্যারে এবং মাল্টি আরগ ফানকের মধ্যে কোনও পার্থক্য রয়েছে?"

হ্যাঁ ঠিক. এটি সম্ভবত দৃশ্যত সূক্ষ্ম, তবে পার্থক্যটি বহুগুণে - আমি এখানে প্রচুর সুবিধাগুলি অন্বেষণ করি

সম্ভবত কিছু পিপিএল 3 টি যুক্তিগুলির সঠিক # বলে মনে করে। কেউ কেউ মনে করেন এটি ২. আচ্ছা, এটি এখনও প্রশ্নটি করে, "কোন পরম আর্গুমেন্ট [0] এ যায়?" বিকল্পটি বাছাইয়ের পরিবর্তে যা ইন্টারফেসকে আরও কঠোর ঘোষণার সাথে সীমাবদ্ধ করে।

আমার ধারণা আমি আরও মৌলিক অবস্থানের জন্য তর্ক করি: অবস্থানগত যুক্তির উপর নির্ভর করবেন না। আমি কেবল এটি ভঙ্গুর মনে করি এবং জঘন্য আর্গুমেন্টের অবস্থান সম্পর্কে তর্ক বাড়ে। এড়িয়ে যান এবং ফাংশন এবং ভেরিয়েবলের নাম সম্পর্কে অনিবার্য লড়াইয়ের সাথে ডানদিকে যান। 😉

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

function sendMessage({toUser, fromUser, subject, body}) { }

// And call the method like so:
sendMessage({toUser: this.parentUser, fromUser: this.currentUser, subject: ‘Example Alert’})


6
নামযুক্ত আর্গুমেন্টগুলি ফ্যাকিং করা সত্যই কেবল একটি যুক্তিই পার করছে না।
জেডিগোগস

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

2
নামযুক্ত প্যারামগুলি একটি শক্তিবৃদ্ধি শেখার কৌশলও - মানুষ শব্দের সংকলনের সাথে আরও বেশি অর্থ যুক্ত করে।
ড্যান লেভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.