ক্রিয়ামূলক এবং আবশ্যক প্রোগ্রামিং ভাষার মধ্যে পার্থক্য কী?


159

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

আমি জানি এটি প্রোগ্রামিংয়ের উপায় চয়ন করার জন্য ব্যবহারকারীর প্রয়োজনীয়তার উপর নির্ভর করে তবে কার্যকরী প্রোগ্রামিং ভাষা শেখার জন্য এটি কেন সুপারিশ করা হয়?



1
এই অন্যান্য [পোস্ট] [1] পরীক্ষা করুন। এটি স্পষ্টভাবে পার্থক্য বর্ণনা করে। [1]: স্ট্যাকওভারফ্লো.com
থেইটা

উত্তর:


160

সংজ্ঞা: একটি নির্দিষ্ট ভাষা কীভাবে পৌঁছাতে হয় তা নির্ধারণ করার জন্য একটি বাধ্যতামূলক ভাষা বিবৃতিগুলির ক্রম ব্যবহার করে। এই বিবৃতিগুলিতে প্রত্যেককে পালাক্রমে কার্যকর করা হয় বলে প্রোগ্রামের অবস্থা পরিবর্তন করতে বলা হয়।

উদাহরণ: জাভা একটি আবশ্যকীয় ভাষা। উদাহরণস্বরূপ, একটি ক্রম সংখ্যার যোগ করতে একটি প্রোগ্রাম তৈরি করা যেতে পারে:

 int total = 0;
 int number1 = 5;
 int number2 = 10;
 int number3 = 15;
 total = number1 + number2 + number3; 

প্রতিটি বিবৃতি প্রোগ্রামের স্থিতি পরিবর্তন করে, প্রতিটি ভেরিয়েবলের মান নির্ধারণ থেকে শুরু করে সেই মানগুলির চূড়ান্ত সংযোজন পর্যন্ত। পাঁচটি স্টেটমেন্টের ক্রম ব্যবহার করে প্রোগ্রামটি স্পষ্টভাবে বলা হয়েছে যে কীভাবে 5, 10 এবং 15 সংখ্যা একসাথে যুক্ত করতে হবে।

কার্যকরী ভাষা: সমস্যা সমাধানের জন্য খাঁটি কার্যকরী পদ্ধতির সমর্থন করার জন্য কার্যকরী প্রোগ্রামিং দৃষ্টান্তটি স্পষ্টভাবে তৈরি করা হয়েছিল। ফাংশনাল প্রোগ্রামিং হ'ল ঘোষণামূলক প্রোগ্রামিংয়ের একটি রূপ।

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

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

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

ওওপি লোক বা প্রয়োজনীয় ভাষাগুলির জন্য:

যখন আপনার জিনিসগুলির নির্দিষ্ট ক্রিয়াকলাপ থাকে এবং আপনার কোডটি যখন বিকশিত হয় তখন অবজেক্ট ওরিয়েন্টেড ভাষাগুলি ভাল। বিদ্যমান ক্লাসগুলি একা রেখে নতুন ক্লাস যুক্ত করে এটি সম্পাদন করা যেতে পারে।

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

কনস:

এটি প্রোগ্রামিংয়ের উপায় চয়ন করার জন্য ব্যবহারকারীর প্রয়োজনীয়তার উপর নির্ভর করে, সুতরাং যখন ব্যবহারকারীরা সঠিক উপায়টি বেছে না নেন কেবল তখনই ক্ষতি হয়।

যখন বিবর্তনটি ভুল পথে যায়, আপনার সমস্যা আছে:

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

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

সুতরাং, রক্ষণাবেক্ষণযোগ্য এবং টেস্টেবল ওপ অ্যাপ্লিকেশনগুলি রচনার সঠিক উপায়গুলি এবং মনের একটি অবনমিত রাষ্ট্রের সাথে আবশ্যক কোডটি ডিজাইন করার প্রবণতা রয়েছে?
কমল গলটেকিন

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

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

230

এখানে পার্থক্য:

অনুজ্ঞাসূচক:

  • শুরু
  • আপনার জুতো আকার 9 1/2 চালু করুন।
  • কীগুলির একটি অ্যারে [7] রাখার জন্য আপনার পকেটে জায়গা করুন।
  • পকেটে চাবিগুলির জন্য ঘরে কীগুলি রাখুন।
  • গ্যারেজ প্রবেশ করুন।
  • ওপেন গ্যারেজ
  • গাড়ী প্রবেশ করুন।

... এবং আরও অনেক কিছু ...

  • দুধ ফ্রিজে রেখে দিন।
  • স্টপ।

ঘোষণামূলক, যার কার্যকরী একটি উপশ্রেণী:

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

... এবং আরও অনেক কিছু ...

  • ফ্রিজে আমাদের দুধ রয়েছে তা নিশ্চিত করুন (যখন আমাদের এটি প্রয়োজন - অলস কার্যকরী ভাষার জন্য)।

সংক্ষিপ্তসার: অপরিহার্য ভাষাগুলিতে আপনি কম্পিউটারকে বলবেন কীভাবে এটির মেমোরিতে বিট, বাইট এবং শব্দ পরিবর্তন করতে হয় এবং কোন ক্রমে order কার্যকরী বিষয়গুলিতে, আমরা কম্পিউটারকে বলি জিনিস, ক্রিয়া ইত্যাদি what উদাহরণস্বরূপ, আমরা বলি যে 0 এর বর্ণনাকারী 1 এবং অন্য প্রতিটি প্রাকৃতিক সংখ্যার বর্ণনাকারী হল সেই সংখ্যার গুণফল এবং তার পূর্বসূরীর ফ্যাক্টরিয়াল। আমরা বলি না: এন এর ফ্যাক্টরিয়াল গণনা করার জন্য, একটি মেমরি অঞ্চল সংরক্ষণ করুন এবং সেখানে 1 সংরক্ষণ করুন, তারপরে সেই মেমরি অঞ্চলে সংখ্যাটি 2 থেকে n এর সাথে গুণিত করুন এবং ফলাফলটি একই জায়গায় এবং শেষে সংরক্ষণ করুন, মেমরি অঞ্চলটি ফ্যাক্টরিয়াল ধারণ করবে।


1
ধন্যবাদ. এটি দেখার জন্য দুর্দান্ত উপায়।
এল-সামুয়েলস

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

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

3
এটি দূরবর্তীভাবে যা আমি কার্যকরী প্রোগ্রামিং হতে বুঝি তা নয়। আমি ভেবেছিলাম ফাংশনাল প্রোগ্রামিং হ'ল ফাংশন থেকে লুকানো ইনপুট এবং আউটপুট অপসারণ করা।
রিঙ্গো

7
কনভোলটেড ব্যাখ্যা।
জোটিডি

14

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

ফাংশনাল প্রোগ্রামিং: এন অর্থাত্ ফ্যাকটোরিয়াল গণনা করুন! অর্থাত্ এনএক্স (এন -১) এক্স (এন -২) এক্স ... এক্স 2 এক্স 1

-- | Haskell comment goes like
-- | below 2 lines is code to calculate factorial and 3rd is it's execution  

factorial 0 = 1
factorial n = n * factorial (n - 1)
factorial 3

-- | for brevity let's call factorial as f; And x => y shows order execution left to right
-- | above executes as := f(3) as 3 x f(2) => f(2) as 2 x f(1) => f(1) as 1 x f(0) => f(0) as 1  
-- | 3 x (2 x (1 x (1)) = 6

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

//somewhat functional way
function factorial(n) {
  if(n < 1) {
     return 1;
  }
  return n * factorial(n-1);   
}
factorial(3);

//somewhat more imperative way
function imperativeFactor(n) {
  int f = 1
  for(int i = 1; i <= n; i++) {
     f = f * i
  }
  return f;
}

এই পঠিত বুঝতে একটি ভাল রেফারেন্স হতে পারে কিভাবে অনুজ্ঞাসূচক কোড ফোকাস আরো কিভাবে অংশ, (লুপ জন্য ঝ) মেশিনের রাষ্ট্র, মৃত্যুদণ্ড আদেশ, নিয়ন্ত্রণ প্রবাহ উপর।

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

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


1
এটা করা উচিত নয় return n * factorial(n-1);?
jinwee

@ জিনাউই, দেখানোর জন্য ধন্যবাদ, আমি এটিকে সংশোধন করেছিn * (n-1)
পুরাতন-সন্ন্যাসী

10

ফাংশনাল প্রোগ্রামিং হ'ল ঘোষণামূলক প্রোগ্রামিংয়ের একটি রূপ, যা গণনার যৌক্তিকতা বর্ণনা করে এবং সম্পাদনের ক্রমটি সম্পূর্ণরূপে জোর দেওয়া হয়।

সমস্যা: আমি এই প্রাণীটিকে একটি ঘোড়া থেকে জিরাফে পরিবর্তন করতে চাই।

  • লম্বা গলা
  • লম্বা পা
  • দাগ প্রয়োগ করুন
  • জীবকে একটি কালো জিহ্বা দিন
  • ঘোড়ার লেজ সরান

প্রতিটি আইটেম একই ফলাফল তৈরি করতে যে কোনও ক্রমে চালানো যেতে পারে।

ইমপিটেটিভ প্রোগ্রামিং পদ্ধতিগত is রাষ্ট্র এবং শৃঙ্খলা গুরুত্বপূর্ণ।

সমস্যা: আমি আমার গাড়ী পার্ক করতে চাই।

  1. গ্যারেজ দরজার প্রাথমিক অবস্থা নোট করুন
  2. ড্রাইভওয়েতে গাড়ি থামান
  3. গ্যারেজের দরজা বন্ধ থাকলে গ্যারেজের দরজাটি উন্মুক্ত করুন, নতুন রাষ্ট্রের কথা মনে রাখবেন; অন্যথায় চালিয়ে যান
  4. গ্যারেজে গাড়ি টানুন
  5. গ্যারেজের দরজা বন্ধ করুন

কাঙ্ক্ষিত ফলাফল পৌঁছানোর জন্য প্রতিটি পদক্ষেপ অবশ্যই করতে হবে। গ্যারেজের দরজা বন্ধ থাকাকালীন গ্যারেজে টানলে গ্যারেজের দরজা ভাঙা।


আমি কেবল অ্যাসিঙ্ক বনাম সিঙ্কের মধ্যে পার্থক্য দেখতে পাচ্ছি।
ভ্লাদিমির ভুকানাক

@ ভ্লাদিমিরভুকানাক অ্যাসিঙ্ক / সিঙ্ক একটি প্রক্রিয়া, প্রোগ্রামিংয়ের একধরনের নয়
জাকুব কেলার

2
ওহ, ধন্যবাদ, আমি এ সম্পর্কে আরও গবেষণা করব। আপনি কি দয়াবান হবেন, সমস্যাটিকে 1 আপডেট করার জন্য সমস্যাটি 2 হিসাবে সমান হতে হবে "" আমি আমার গাড়ী পার্ক করতে চাই "তবে কার্যকরী প্রোগ্রামিং পদ্ধতিতে লিখিত? তাহলে সমান্তরালতা বাদ দেওয়া হবে।
ভ্লাদিমির ভুকানাক

6

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

এটি অনুসরণ করে যে একটি কার্যকরী প্রোগ্রাম নিছক একটি অভিব্যক্তি।

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

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

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


3

2005 সালে 2013 অবধি 2013 পর্যন্ত ওয়েব বিকাশে জরুরী প্রোগ্রামিং স্টাইলটি অনুশীলন করা হয়েছিল।

অত্যাবশ্যক প্রোগ্রামিং সহ, আমরা এমন কোড লিখেছিলাম যা আমাদের অ্যাপ্লিকেশনটি ঠিক কী করা উচিত তা ধাপে ধাপে ধাপে লিখিত ছিল।

ক্রিয়ামূলক প্রোগ্রামিং শৈলী ফাংশনগুলির সংমিশ্রনের চতুর পদ্ধতির মাধ্যমে বিমূর্ততা তৈরি করে।

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

এখন, এই দ্রুত বিবরণগুলি সম্ভবত খুব বেশি অর্থবোধ করে না, তাই প্রয়োজনীয়তা এবং ঘোষণামূলক প্রোগ্রামিংয়ের মধ্যে পার্থক্যটি একটি উপমা দিয়ে হাঁটতে দেয় by

কল্পনা করুন যে আমরা সফ্টওয়্যার তৈরি করছি না, পরিবর্তে আমরা জীবিকার জন্য পাইগুলি বেক করছি। সম্ভবত আমরা খারাপ বেকার এবং আমরা কীভাবে একটি সুস্বাদু পাই বেক করব তা জানি না।

সুতরাং আমাদের বস আমাদের দিকনির্দেশগুলির একটি তালিকা দেয়, যা আমরা রেসিপি হিসাবে জানি।

রেসিপিটি কীভাবে পাই তৈরি করতে হবে তা আমাদের জানাবে। একটি রেসিপি এর মতো অপরিহার্য স্টাইলে লেখা হয়েছে:

  1. ময়দা 1 কাপ মিশ্রিত করুন
  2. 1 ডিম যোগ করুন
  3. চিনি 1 কাপ যোগ করুন
  4. মিশ্রণটি একটি প্যানে Pেলে দিন
  5. প্যানটি 30 মিনিট এবং 350 ডিগ্রি এফের জন্য চুলায় রাখুন।

ঘোষণামূলক রেসিপি নিম্নলিখিত কাজ করবে:

ময়দা 1 কাপ, 1 ডিম, চিনি 1 কাপ - প্রাথমিক অবস্থা

বিধি

  1. যদি সবকিছু মিশ্রিত হয় তবে প্যানে রাখুন।
  2. যদি সব কিছু অমীমাংসিত থাকে তবে বাটিতে রাখুন।
  3. যদি প্যানে সবকিছু থাকে তবে চুলায় রাখুন।

সুতরাং অপরিহার্য পদ্ধতিগুলি ধাপে ধাপে পদ্ধতির দ্বারা চিহ্নিত করা হয়। আপনি প্রথম ধাপে শুরু করুন এবং দ্বিতীয় ধাপে যান so

আপনি শেষ পর্যন্ত কিছু শেষ পণ্য সঙ্গে শেষ। সুতরাং এই পাইটি তৈরি করে, আমরা এই উপাদানগুলি সেগুলি মিশিয়ে নিই, এটি একটি প্যানে এবং চুলায় রাখুন এবং আপনি আপনার শেষ পণ্যটি পেয়েছেন।

একটি ঘোষণামূলক বিশ্বে, এটির পৃথক the সুতরাং এখানে আমাদের ভেরিয়েবলগুলি আমাদের উপাদানগুলির পরিমাণ এবং তাদের ধরণের।

আমরা প্রাথমিক অবস্থা বা প্রাথমিক উপাদান গ্রহণ করি এবং সেগুলিতে কিছু বিধি প্রয়োগ করি।

সুতরাং আমরা প্রাথমিক অবস্থা গ্রহণ করি এবং এগুলি নিয়মগুলি বারবার পাস করি যতক্ষণ না আমরা রাইবার্ব স্ট্রবেরি পাই বা যা কিছু খেতে প্রস্তুত না হয়ে যাই।

সুতরাং একটি ঘোষণামূলক পদ্ধতির মধ্যে, আমাদের জানতে হবে কীভাবে এই নিয়মগুলি সঠিকভাবে গঠন করতে হয়।

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

আমাদের প্রাথমিক অবস্থার সাথে, এটি মেলে না কারণ আমরা এখনও আমাদের উপাদানগুলি মিশ্রিত করি নি।

সুতরাং নিয়ম 2 বলছে, যদি তারা মিশ্রিত না হয় তবে তাদের একটি বাটিতে মিশিয়ে দিন। ঠিক আছে হ্যাঁ এই বিধিটি প্রযোজ্য।

আমাদের রাজ্য হিসাবে এখন আমাদের কাছে একটি বাটি মিশ্র উপাদান রয়েছে।

এখন আমরা নতুন নিয়মটি আবার আমাদের বিধিগুলিতে প্রয়োগ করি।

সুতরাং নিয়ম 1 বলছে যদি উপাদানগুলি মিশ্রিত হয় তবে সেগুলি একটি প্যানে রাখুন, ঠিক আছে হ্যাঁ এখন নিয়ম 1 প্রয়োগ হয়, এটি করা যাক।

এখন আমাদের এই নতুন রাষ্ট্র রয়েছে যেখানে উপাদানগুলি মিশ্রিত করা হয় এবং একটি প্যানে। বিধি 1 আর প্রাসঙ্গিক নয়, বিধি 2 প্রযোজ্য নয়।

বিধি 3 বলছে যদি উপাদানগুলি একটি প্যানে থাকে তবে সেগুলিকে চুলায় রাখুন, দুর্দান্ত এই নিয়মটি এই নতুন রাজ্যে প্রযোজ্য, এটি করতে দিন।

এবং আমরা একটি সুস্বাদু গরম অ্যাপল পাই বা যা কিছু দিয়ে শেষ করি।

এখন, আপনি যদি আমার মতো হন, আপনি ভাবতে পারেন, কেন আমরা এখনও অপরিহার্য প্রোগ্রামিং করছি না। এইবার বুঝতে পারছি.

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

একটি ঘোষণামূলক পদ্ধতির মধ্যে আমাদের কিছু প্রাথমিক উপাদান বা প্রাথমিক অবস্থা যেমন textInput=“”একক পরিবর্তনশীল থাকতে পারে।

হতে পারে পাঠ্য ইনপুটটি খালি স্ট্রিং হিসাবে শুরু হবে।

আমরা এই প্রাথমিক অবস্থাটি গ্রহণ করি এবং এটি আপনার আবেদনে সংজ্ঞায়িত নিয়মের একটি সেটটিতে প্রয়োগ করি।

  1. যদি কোনও ব্যবহারকারী পাঠ্যে প্রবেশ করে তবে পাঠ্য ইনপুট আপডেট করুন। ঠিক আছে, এখনই এটি প্রযোজ্য নয়।

  2. যদি টেম্পলেটটি রেন্ডার করা হয় তবে উইজেটটি গণনা করুন।

  3. যদি টেক্সটইনপুট আপডেট হয় তবে টেম্পলেটটি রেন্ডার করুন।

ঠিক আছে, এর কোনওটিই প্রযোজ্য না তাই প্রোগ্রামটি কেবল কোনও ইভেন্ট হওয়ার জন্য অপেক্ষা করবে।

সুতরাং এক পর্যায়ে কোনও ব্যবহারকারী পাঠ্য ইনপুট আপডেট করে এবং তারপরে আমরা নিয়ম 1 নম্বর প্রয়োগ করতে পারি।

আমরা তা আপডেট করতে পারি “abcd”

সুতরাং আমরা কেবলমাত্র আমাদের পাঠ্য এবং পাঠ্য আপডেট করেছি ইনপুট আপডেটগুলি, নিয়ম সংখ্যা 2 প্রযোজ্য নয়, নিয়ম সংখ্যা 3 বলছে যদি পাঠ্য ইনপুটটি আপডেট হয় যা সবেমাত্র ঘটেছে, তারপরে টেমপ্লেটটি রেন্ডার করুন এবং তারপরে আমরা 2 নিয়মে ফিরে যাই থ্যালাপ বলে যে টেমপ্লেট রেন্ডার করা হয়েছে , উইজেট গণনা করুন, ঠিক আছে উইজেট গণনা করা যাক।

সাধারণত, প্রোগ্রামার হিসাবে, আমরা আরও ঘোষিত প্রোগ্রামিং ডিজাইনের জন্য প্রচেষ্টা করতে চাই।

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


2

E অপরিহার্য ভাষা:

  • দক্ষ কার্যকর

  • জটিল শব্দার্থক

  • জটিল বাক্য গঠন

  • কনকুরেন্সি প্রোগ্রামার ডিজাইন করা হয়

  • জটিল পরীক্ষার কোনও রেফারেন্সিয়াল স্বচ্ছতা নেই, এর পার্শ্ব প্রতিক্রিয়া রয়েছে

  • রাষ্ট্র আছে

• কার্যকরী ভাষা:

  • সাধারণ শব্দার্থক

  • সাধারণ বাক্য গঠন

  • কার্যকর কার্যকর কার্যকর

  • প্রোগ্রামগুলি স্বয়ংক্রিয়ভাবে একযোগে তৈরি করা যায়

  • সাধারণ পরীক্ষা, রেফারেন্সিয়াল স্বচ্ছতা আছে, এর কোনও পার্শ্ব প্রতিক্রিয়া নেই

  • কোন রাষ্ট্র নেই

1

আমি মনে করি একটি অত্যাবশ্যকীয় পদ্ধতিতে কার্যকরী প্রোগ্রামিং প্রকাশ করা সম্ভব:

  • অনেকগুলি অবজেক্টের স্টেট চেক এবং if... else/switch স্টেটমেন্টগুলির
  • অসমর্থন যত্ন নেওয়ার জন্য কিছু সময়সীমা / অপেক্ষার প্রক্রিয়া

এই ধরনের পদ্ধতির সাথে বিশাল সমস্যা রয়েছে:

  • বিধি / পদ্ধতি পুনরাবৃত্তি হয়
  • রাষ্ট্রীয়তা পার্শ্ব প্রতিক্রিয়া / ভুলের সম্ভাবনা ছেড়ে দেয়

কার্যকরী প্রোগ্রামিং, অবজেক্টের মতো ফাংশন / পদ্ধতির চিকিত্সা করা এবং রাষ্ট্রহীনতা আলিঙ্গন, আমি বিশ্বাস করি সেই সমস্যাগুলি সমাধান করার জন্য জন্ম হয়েছিল।

ব্যবহারের উদাহরণ: অ্যান্ড্রয়েড, আইওএস বা ওয়েব অ্যাপ্লিকেশনগুলির লজিকগুলি সহ ফ্রন্টএন্ড অ্যাপ্লিকেশনগুলি। ব্যাকএন্ডের সাথে যোগাযোগ।

অপরিহার্য / পদ্ধতিগত কোড সহ ফাংশনাল প্রোগ্রামিং সিমুলেট করার সময় অন্যান্য চ্যালেঞ্জগুলি:

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

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


-1

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

সমস্যা: 1 টি সারণি লেখা।

সমাধান: -

আবশ্যক শৈলী দ্বারা: =>

    1*1=1
    1*2=2
    1*3=3
    .
    .
    .
    1*n=n 

কার্যকরী শৈলী দ্বারা: =>

    1
    2
    3
    .
    .
    .
    n

অপরিহার্য শৈলীতে ব্যাখ্যা আমরা নির্দেশাবলী আরও স্পষ্টভাবে লিখি এবং যা আরও সরল পদ্ধতিতে বলা যেতে পারে।

যেমন কার্যকরী শৈলীতে, স্ব-বর্ণনামূলক জিনিসগুলি এড়ানো হবে।

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