পদ্ধতি বনাম ফাংশন বনাম পদ্ধতি


107

সাধারণ প্রশ্ন, তবে আমি প্রায়শই এই উগ্রতার সাথে সংজ্ঞায়িত এই তিনটি শর্তটি শুনি, তবে যা বছরের পর বছর ধরে আমার কাছে বিভিন্ন জিনিস বোঝার জন্য পরিচিত।

"পদ্ধতি", "পদ্ধতি", "ফাংশন", "সাবরোটাইনস" ইত্যাদির "সঠিক" সংজ্ঞাগুলি কী কী?


4
আপনি "রুটিন" ত্যাগ করেন
মেফিস্টো

1
@ টেরেসকো: আমি মনে করি "সাব্রোটাইন" বেশি সাধারণ।
এম কে 12

উত্তর:


108

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

"পদ্ধতি, ফাংশন, সাব্রোটিন, সাবপ্রোগ্রাম এবং পদ্ধতি" পদগুলির অর্থ একই জিনিস: বৃহত্তর প্রোগ্রামের মধ্যে কলযোগ্য উপ-প্রোগ্রাম la তবে এই সংজ্ঞাগুলির সমস্ত বৈকল্পিক ব্যবহারগুলিকে ক্যাপচার করে এমন সংজ্ঞা নিয়ে আসা কঠিন, কারণ প্রোগ্রামিং ভাষা বা দৃষ্টান্তগুলিতে এগুলি ধারাবাহিকভাবে ব্যবহৃত হয় না।

আপনি বলতে পারেন কোনও ফাংশন একটি মান দেয়। ঠিক আছে, নীচের সি ফাংশনটি কোনও মান দেয় না:

void f() { return; }

... তবে আমি সন্দেহ করি যে আপনি যাকে এটিকে একটি প্রক্রিয়া বলবেন এমন কেউ খুঁজে পেয়েছেন।

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

প্রকৃতপক্ষে, "প্রসেসরিয়াল প্রোগ্রামিং" শব্দটি সি, ফোর্টরান এবং পাস্কাল সহ ভাষার একটি সম্পূর্ণ শ্রেণিকে বোঝায়, যার মধ্যে একটিরই আসলে কোনও অর্থ বোঝাতে "প্রক্রিয়া" শব্দটি ব্যবহার করা হয়।

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

মুল বক্তব্যটি হ'ল এগুলির কোনওটিই সত্যিই সামঞ্জস্যপূর্ণ নয়। এটি কেবল সেই সময়ে যে সকল ভাষাতে ব্যবহৃত হয় তার দ্বারা পরিভাষাটি প্রতিফলিত করে।


উত্তরটি হ'ল ঠিক সেটাই আমি মনে করি। (আমার পশ্চাতচর্চায় অন্য রূপ হিসাবে "সাব্রুটিন" যুক্ত হওয়া উচিত ছিল) আমি কি জিজ্ঞাসা করতে পারি: যে সি ফাংশনটিকে "কার্যবিধি" বলছেন এমন কাউকে আপনি কেন খুঁজে পাবেন না? কারণ এটি প্রযুক্তিগতভাবে ভুল, বা "পদ্ধতি" শব্দটি বর্তমানে প্রচলিত নয় বলে?
জাজানো রাইনহার্ট

7
সি প্রোগ্রামাররা "ফাংশন" শব্দটি কেবল ব্যবহার করেন কারণ সি এর ডিজাইনাররা সেই শব্দটি ব্যবহার করেছিলেন।
চার্লস সালভিয়া

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

9
C ++ এর দ্বৈত ধরনের, যা পদ্ধতিগুলিকে "সদস্য ফাংশন", জাভা এবং সি # কল ফাংশনগুলিকে "স্ট্যাটিক পদ্ধতি" বলে calls
Jörg ডব্লু মিট্টাগ

2
আপনি প্রোগ্রামিংয়ে নতুন হলে ব্রুসের উত্তর অবশ্যই আপনার উচিত। তার সংজ্ঞাগুলি একেবারে সঠিক হবে, সময়ের 99%। তবে আমি আরও প্রযুক্তিগত / তাত্ত্বিক উত্তর খুঁজছিলাম। কখনও কখনও নতুন প্রোগ্রামাররা কেবল তাদের নিজস্ব ডোমেন জানেন এবং সেখানে যা আছে তা জোর দিয়ে থাকেন। বাস্তবে আজ এমন প্রোগ্রামাররা কাজ করছেন যারা এখনও পুরানো ভাষা ব্যবহার করেন এবং যারা বিভিন্ন সংজ্ঞা ব্যবহারের জন্য "ভুল" নন। এটিই ছিল আমার সবচেয়ে আগ্রহী
জাঙ্গো রেইনহার্ট

67

একটি ফাংশন একটি মান দেয়, কিন্তু একটি পদ্ধতি না।

একটি পদ্ধতি একটি ফাংশনের অনুরূপ, তবে এটি একটি শ্রেণীর অংশের অভ্যন্তরীণ । মেয়াদ পদ্ধতি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং প্রায় একচেটিয়াভাবে ব্যবহার করা হয়।


8
একেবারে অভ্যন্তরীণ নয়। একটি পদ্ধতি এমন কোনও ফাংশন বা পদ্ধতি যা শ্রেণীর অংশ is
স্কট হুইটলক

8
সুতরাং এসকিউএলে একটি "সঞ্চিত পদ্ধতি" কোনও মান ফেরায় না? পাস্কালের মতো কোনও কিছুর "পদ্ধতি" সম্পর্কে কী? আপনার সংজ্ঞা কি বর্তমান প্রবণতার ভিত্তিতে বা সেগুলি সর্বজনীন সংজ্ঞা হিসাবে বিবেচনা করা উচিত? ধন্যবাদ!
জাজানো রেইনহার্ট

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

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

2
@ 3p1c_d3m0n এটি অবশ্যই সত্য যে জেএসের functionউভয় ভূমিকা পালন করে, তবে জেএস ফাংশনগুলি সমস্ত প্রত্যাবর্তন করে। যখন কোনও রিটার্নের বিবৃতিতে কোনও মান থাকে না, মানটি অন্তর্নিহিত হয় undefined। যখন কোনও রিটার্নের বিবৃতি অনুপস্থিত থাকে, দোভাষী তার অন্তর্নিহিত রিটার্ন স্টেটমেন্ট যুক্ত করেন। এসোটেরিক, হতে পারে, তবে এটি এখানে দেওয়া সংজ্ঞার সাথে সামঞ্জস্যপূর্ণ। এ কারণেই var x = function() {}();জেএসে আইনী; যদি অন্তর্নিহিত রিটার্নের জন্য না হয় তবে এটি পাস্কলে যেমন হবে তেমনি একটি ত্রুটি হওয়া দরকার।
সেমিকোলন

52

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

একটি পদ্ধতি একটি ফাংশন যে একটি মান না। বিশেষত, এর অর্থ এই যে কোনও প্রক্রিয়া কেবলমাত্র পার্শ্ব প্রতিক্রিয়া তৈরি করতে পারে। (এর মধ্যে একটি ইনপুট প্যারামিটার পরিবর্তন করা অন্তর্ভুক্ত থাকতে পারে!)

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

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

পরবর্তী সংজ্ঞাটি অবজেক্ট = স্ট্রাক্ট + ক্লোজার্স চিঠিপত্রের দিকে নিয়ে যায় ।


5
সুতরাং একটি বস্তু হল ভেরিয়েবলের সংগ্রহ এবং এই সাধারণ ভেরিয়েবলগুলির চেয়ে ক্লোজারের সংগ্রহ। মূলত, অবজেক্ট-ওরিয়েন্টেড ভাষাগুলির সর্বদা ক্লোজার ছিল এবং কেউ জানত না? আকর্ষণীয় দেখুন! +1
জর্জিও

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

3
foo.doSomething()fooপরিবর্তনশীল উপর বন্ধ । যে কোনও বিবৃতি আপনার ভাষার উপর নির্ভর করে বা এর মাধ্যমে doSomethingঅ্যাক্সেস করতে পারে । এটি "ক্লোজ ওভার" এর খুব সংজ্ঞা। ক্লাসগুলি তাদের সদস্য ভেরিয়েবলগুলির চেয়ে বেশি ঘনিষ্ঠ হয়, সুতরাং ("ওও কী" উপেক্ষা করে), ওও যথেষ্ট। এটি সাহিত্যে বেশ সুপরিচিত ...foothisself
ফ্রাঙ্ক শায়ারার

1
Er কোন. foo.সামনের দিকে একটু দেখি foo.doSomething()? এটি আপনি doSomething()একটি প্যারামিটার উত্তীর্ণ হয় । এটি প্যারেন্থিসিসের মধ্যে নেই বলে কেবল এটি প্যারামিটার নয়। thisবা selfপদ্ধতি ভিতরে যে পরামিতি উল্লেখ করার জন্য কেবল অন্বিত চিনি।
বিট্রি

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

14

ব্রুস একটি ভাল উত্তর আছে । আমি যুক্ত করব, শব্দার্থভাবে:

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

দুর্দান্ত উত্তর! কেবলমাত্র একটি ছোট সংযোজন: A procedure should "do something" to the arguments- বা অন্য কোনও পার্শ্ব প্রতিক্রিয়া সৃষ্টি করুন (যেমন printf)।
অ্যালন গুরালেনেক

1
@ অ্যালন নোট যে printfএকটি মান দেয় - মুদ্রিত অক্ষরের সংখ্যা - সুতরাং এটি প্রযুক্তিগতভাবে একটি ফাংশন।
সজোয়ার্ড

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

4

উপরে ভাল বিস্তারিত উত্তর; ছোট গল্পটি হ'ল এগুলি সব সাবটাইনগুলির স্বাদ হবে; প্রতিটি শব্দ বলতে যা বোঝায় তা প্রোগ্রামিং ভাষার প্রসঙ্গ অনুসারে পরিবর্তিত হয়

সাধারণভাবে, ফাংশনগুলি একটি মান দেয়, তবে তাদের দরকার হয় না

পদ্ধতি বর্তমানে জেনেরিক ওওপি শর্তাদি

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

আবার, এই শর্তগুলির মধ্যে সুনির্দিষ্ট পার্থক্য নির্ভর করে আপনি কার সাথে কথা বলছেন!


2

দক্ষতার 80% সরাসরি নামের সাথে পরিচিতির সাথে সম্পর্কিত,

95% উত্পাদনশীলতা হ'ল এই মুহূর্তে কী কী দরকারী তা বর্ণনার জন্য ব্যবহৃত শর্ত সত্ত্বেও সনাক্ত করার ক্ষমতা

আমি বেশিরভাগ ক্ষেত্রে সি # তে সমস্ত পদ্ধতিতে কল করতে পছন্দ করি যখন আমি এমএসএসকিউএল ব্যবহার করি যখন আমাদের স্প্রোক ছিল, তবে অবশ্যই এখন আমরা পোস্টগ্রিস ব্যবহার করি এবং তাদের ফাংশন বলা হয়।


13
সমস্ত পরিসংখ্যানের 83.5% ঘটনাস্থলে গঠিত ;
জাঙ্গো রেইনহার্ট

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

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