সাধারণ প্রশ্ন, তবে আমি প্রায়শই এই উগ্রতার সাথে সংজ্ঞায়িত এই তিনটি শর্তটি শুনি, তবে যা বছরের পর বছর ধরে আমার কাছে বিভিন্ন জিনিস বোঝার জন্য পরিচিত।
"পদ্ধতি", "পদ্ধতি", "ফাংশন", "সাবরোটাইনস" ইত্যাদির "সঠিক" সংজ্ঞাগুলি কী কী?
সাধারণ প্রশ্ন, তবে আমি প্রায়শই এই উগ্রতার সাথে সংজ্ঞায়িত এই তিনটি শর্তটি শুনি, তবে যা বছরের পর বছর ধরে আমার কাছে বিভিন্ন জিনিস বোঝার জন্য পরিচিত।
"পদ্ধতি", "পদ্ধতি", "ফাংশন", "সাবরোটাইনস" ইত্যাদির "সঠিক" সংজ্ঞাগুলি কী কী?
উত্তর:
আমি এখানে একটি ভিন্ন উত্তর নিয়ে যাচ্ছি: ব্যবহারিকভাবে বলতে গেলে, আসলেই কোনও পার্থক্য নেই , সামান্য ব্যতিক্রমের সাথে "পদ্ধতি" বলতে সাধারণত ওও ভাষাগুলিতে কোনও অবজেক্টের সাথে যুক্ত সাব্রোটিনকে বোঝায়।
"পদ্ধতি, ফাংশন, সাব্রোটিন, সাবপ্রোগ্রাম এবং পদ্ধতি" পদগুলির অর্থ একই জিনিস: বৃহত্তর প্রোগ্রামের মধ্যে কলযোগ্য উপ-প্রোগ্রাম la তবে এই সংজ্ঞাগুলির সমস্ত বৈকল্পিক ব্যবহারগুলিকে ক্যাপচার করে এমন সংজ্ঞা নিয়ে আসা কঠিন, কারণ প্রোগ্রামিং ভাষা বা দৃষ্টান্তগুলিতে এগুলি ধারাবাহিকভাবে ব্যবহৃত হয় না।
আপনি বলতে পারেন কোনও ফাংশন একটি মান দেয়। ঠিক আছে, নীচের সি ফাংশনটি কোনও মান দেয় না:
void f() { return; }
... তবে আমি সন্দেহ করি যে আপনি যাকে এটিকে একটি প্রক্রিয়া বলবেন এমন কেউ খুঁজে পেয়েছেন।
অবশ্যই, পাস্কলে, পদ্ধতিগুলি মান এবং ফাংশনগুলি ফেরতের মান দেয় না, তবে এটি কেবল পাস্কালকে কীভাবে ডিজাইন করা হয়েছিল তার প্রতিফলন। ফোর্টরানে একটি ফাংশন একটি মান দেয় এবং একটি সাব্রুটাইন একাধিক মান প্রদান করে। তবুও এর কোনটিই আমাদের এই শর্তগুলির জন্য একটি "সর্বজনীন" সংজ্ঞা নিয়ে আসতে দেয় না।
প্রকৃতপক্ষে, "প্রসেসরিয়াল প্রোগ্রামিং" শব্দটি সি, ফোর্টরান এবং পাস্কাল সহ ভাষার একটি সম্পূর্ণ শ্রেণিকে বোঝায়, যার মধ্যে একটিরই আসলে কোনও অর্থ বোঝাতে "প্রক্রিয়া" শব্দটি ব্যবহার করা হয়।
সুতরাং এই কিছুই সত্যিই সামঞ্জস্যপূর্ণ। কেবলমাত্র ব্যতিক্রম সম্ভবত "পদ্ধতি", যা মনে হয় প্রায় সম্পূর্ণরূপে OO ভাষার সাথে ব্যবহৃত হয়, এটি কোনও কোনও জিনিসের সাথে সম্পর্কিত যা কোনও ফাংশনকে উল্লেখ করে। যদিও, এমনকি এটি সবসময় সামঞ্জস্যপূর্ণ হয় না। সি ++, উদাহরণস্বরূপ, সাধারণত পদ্ধতির পরিবর্তে "সদস্য ফাংশন" শব্দটি ব্যবহার করে (যদিও "পদ্ধতি" শব্দটি প্রোগ্রামারদের মধ্যে সি ++ স্থানীয় ভাষায় প্রবেশ করেছে))
মুল বক্তব্যটি হ'ল এগুলির কোনওটিই সত্যিই সামঞ্জস্যপূর্ণ নয়। এটি কেবল সেই সময়ে যে সকল ভাষাতে ব্যবহৃত হয় তার দ্বারা পরিভাষাটি প্রতিফলিত করে।
একটি ফাংশন একটি মান দেয়, কিন্তু একটি পদ্ধতি না।
একটি পদ্ধতি একটি ফাংশনের অনুরূপ, তবে এটি একটি শ্রেণীর অংশের অভ্যন্তরীণ । মেয়াদ পদ্ধতি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং প্রায় একচেটিয়াভাবে ব্যবহার করা হয়।
function
উভয় ভূমিকা পালন করে, তবে জেএস ফাংশনগুলি সমস্ত প্রত্যাবর্তন করে। যখন কোনও রিটার্নের বিবৃতিতে কোনও মান থাকে না, মানটি অন্তর্নিহিত হয় undefined
। যখন কোনও রিটার্নের বিবৃতি অনুপস্থিত থাকে, দোভাষী তার অন্তর্নিহিত রিটার্ন স্টেটমেন্ট যুক্ত করেন। এসোটেরিক, হতে পারে, তবে এটি এখানে দেওয়া সংজ্ঞার সাথে সামঞ্জস্যপূর্ণ। এ কারণেই var x = function() {}();
জেএসে আইনী; যদি অন্তর্নিহিত রিটার্নের জন্য না হয় তবে এটি পাস্কলে যেমন হবে তেমনি একটি ত্রুটি হওয়া দরকার।
একটি ফাংশন এমন একটি জিনিস যা একগুচ্ছ ইনপুট নেয় এবং এক বা একাধিক মান প্রদান করে। যদি ফিরে আসা মানগুলি সম্পূর্ণ ইনপুটগুলি দ্বারা নির্ধারিত হয় এবং ফাংশনটির কোনও পার্শ্ব প্রতিক্রিয়া না থাকে (লগিং, সম্ভবত, বা নিজের অবস্থার বাইরে রাষ্ট্রের পরিবর্তন ঘটায়), তবে এটিকে খাঁটি ফাংশন বলে।
একটি পদ্ধতি একটি ফাংশন যে একটি মান না। বিশেষত, এর অর্থ এই যে কোনও প্রক্রিয়া কেবলমাত্র পার্শ্ব প্রতিক্রিয়া তৈরি করতে পারে। (এর মধ্যে একটি ইনপুট প্যারামিটার পরিবর্তন করা অন্তর্ভুক্ত থাকতে পারে!)
একটি পদ্ধতি একটি ফাংশন যে ভেরিয়েবল একটি সেট, যে, একটি ওভার বন্ধ হয় অবসান । এটি শূন্য বা আরও বেশি ইনপুট পরামিতি নেয়, ভেরিয়েবলগুলির এই সেটটিতে অ্যাক্সেস রয়েছে এবং শূন্য বা আরও মান প্রদান করে। ওও ভাষায় এই পদ্ধতিগুলি বস্তু বা শ্রেণীর সাথে সংযুক্ত থাকে।
বেশিরভাগ মূলধারার ওও ভাষায়, ক্লোজড ওভার ভেরিয়েবলগুলিকে কোনও অবজেক্টের সদস্য ক্ষেত্র বা উদাহরণ ভেরিয়েবল বলা হয়। একটি পদ্ধতি একটি খাঁটি ফাংশন, একটি অশুচি ফাংশন বা পদ্ধতি হতে পারে।
পরবর্তী সংজ্ঞাটি অবজেক্ট = স্ট্রাক্ট + ক্লোজার্স চিঠিপত্রের দিকে নিয়ে যায় ।
foo.doSomething()
প্যারামিটারলেস নয়। এটিতে একটি প্যারামিটার (অবজেক্ট foo
) রয়েছে যা কিছু সিনট্যাকটিক চিনির সাথে দেওয়া হয়েছে। একটি ক্লোজার এ জাতীয় প্যারামিটারের প্রয়োজন ছাড়াই তার অবজেক্টটি উল্লেখ করতে সক্ষম হবে। এটি বলার অপেক্ষা রাখে না যে পদ্ধতিগুলি ক্লোজার হতে পারে না , কেবল এটি বেশিরভাগ নয় এবং ক্লোসারের পক্ষে সমর্থন করার জন্য কোনও ভাষা ওও হওয়া যথেষ্ট নয়।
foo.doSomething()
foo
পরিবর্তনশীল উপর বন্ধ । যে কোনও বিবৃতি আপনার ভাষার উপর নির্ভর করে বা এর মাধ্যমে doSomething
অ্যাক্সেস করতে পারে । এটি "ক্লোজ ওভার" এর খুব সংজ্ঞা। ক্লাসগুলি তাদের সদস্য ভেরিয়েবলগুলির চেয়ে বেশি ঘনিষ্ঠ হয়, সুতরাং ("ওও কী" উপেক্ষা করে), ওও যথেষ্ট। এটি সাহিত্যে বেশ সুপরিচিত ...foo
this
self
foo.
সামনের দিকে একটু দেখি foo.doSomething()
? এটি আপনি doSomething()
একটি প্যারামিটার উত্তীর্ণ হয় । এটি প্যারেন্থিসিসের মধ্যে নেই বলে কেবল এটি প্যারামিটার নয়। this
বা self
পদ্ধতি ভিতরে যে পরামিতি উল্লেখ করার জন্য কেবল অন্বিত চিনি।
ব্রুস একটি ভাল উত্তর আছে । আমি যুক্ত করব, শব্দার্থভাবে:
printf
)A procedure should "do something" to the arguments
- বা অন্য কোনও পার্শ্ব প্রতিক্রিয়া সৃষ্টি করুন (যেমন printf
)।
printf
একটি মান দেয় - মুদ্রিত অক্ষরের সংখ্যা - সুতরাং এটি প্রযুক্তিগতভাবে একটি ফাংশন।
printf
এটি একটি মান। এটির আমন্ত্রণের সুযোগের বাইরে এটির একটি নির্দিষ্ট পার্শ্ব প্রতিক্রিয়া ছিল: যথা স্ট্যান্ডার্ড আউটপুট যা মনে করা হোক তার কাছে I / O। যদিও স্কট এই পার্থক্যটি স্পষ্টভাবে প্রকাশ করেন নি, কার্যকরী প্রোগ্রামিং কার্যগুলিতে পার্শ্ব প্রতিক্রিয়া হওয়ার কথা নয় এবং এটি যে প্রশ্নে ফিরে আসে তার সত্যিকারের তথ্যের মতো প্রশ্নের উত্তর দিতে সক্ষম হওয়া উচিত।
উপরে ভাল বিস্তারিত উত্তর; ছোট গল্পটি হ'ল এগুলি সব সাবটাইনগুলির স্বাদ হবে; প্রতিটি শব্দ বলতে যা বোঝায় তা প্রোগ্রামিং ভাষার প্রসঙ্গ অনুসারে পরিবর্তিত হয়
সাধারণভাবে, ফাংশনগুলি একটি মান দেয়, তবে তাদের দরকার হয় না
পদ্ধতি বর্তমানে জেনেরিক ওওপি শর্তাদি
এসকিউএল-এ, সঞ্চিত পদ্ধতিগুলির আউটপুট থাকে তবে সাধারণত ত্রুটি কোডটি ফিরে আসে, যখন ব্যবহারকারী-সংজ্ঞায়িত ফাংশনগুলিকে অবশ্যই একটি মান ফেরত দেয় (যা ফলাফল-সেট হতে পারে)
আবার, এই শর্তগুলির মধ্যে সুনির্দিষ্ট পার্থক্য নির্ভর করে আপনি কার সাথে কথা বলছেন!
দক্ষতার 80% সরাসরি নামের সাথে পরিচিতির সাথে সম্পর্কিত,
95% উত্পাদনশীলতা হ'ল এই মুহূর্তে কী কী দরকারী তা বর্ণনার জন্য ব্যবহৃত শর্ত সত্ত্বেও সনাক্ত করার ক্ষমতা
আমি বেশিরভাগ ক্ষেত্রে সি # তে সমস্ত পদ্ধতিতে কল করতে পছন্দ করি যখন আমি এমএসএসকিউএল ব্যবহার করি যখন আমাদের স্প্রোক ছিল, তবে অবশ্যই এখন আমরা পোস্টগ্রিস ব্যবহার করি এবং তাদের ফাংশন বলা হয়।