ঘোষিত প্রোগ্রামিং কি? [বন্ধ]


193

আমি এই শব্দটি প্রায় বিভিন্ন প্রসঙ্গে ছড়িয়ে পড়ে শুনছি। এটা কি?


7
আপনি যে উত্তরটি সঠিক উত্তর হিসাবে নির্বাচিত করেছেন (সবুজ চেক চিহ্ন দ্বারা নির্দেশিত), এটি ভুল। এটি অ্যান্টিথেসিস - আবশ্যক প্রোগ্রামিং থেকে ঘোষণামূলক প্রোগ্রামিংকে কী আলাদা করে তা সংজ্ঞায়িত করে না। আপনার নির্বাচন পরিবর্তন বিবেচনা করুন।
শেলবি মুর III

3
হ্যাঁ, উত্তর হিসাবে চিহ্নিত উত্তরটি সঠিক নয়।
ডার্মোট

4
@ শেলবিমুরআইআইআইও উত্তরটি সঠিক কিনা তাও নির্দিষ্ট করুন যাতে আমরা এটি পড়তে পারি!
vivek.m

@ vivek.m আমি আজ একটি নতুন উত্তর সরবরাহ করেছি ।
শেলবি মুর তৃতীয়

উত্তর:


148

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

ঘোষিত প্রোগ্রামিং ভাষার উদাহরণগুলি এসকিউএল এবং প্রোলগ।


29
আপনি এখনও "কী" কম্পিউটারকে "কী" বলতে চান তা "কীভাবে" বের করতে হবে :)
হেসেন

7
@ হাসেনজ এটি এবং অন্যান্য উত্তরগুলি কেবলমাত্র অত্যাবশ্যক প্রোগ্রামিংয়ের সাথে ভাগ করে নেওয়া নয় এমন একমাত্র গুণকে সংজ্ঞায়িত করে - যা অপরিবর্তনীয়তা
শেলবি মুর III

3
এটি কীভাবে অত্যাবশ্যক প্রোগ্রামিং (সি, সি ++, সি # এর মতো ভাষা) থেকে আলাদা তা উল্লেখ করতে পারলে পাঠকদের পক্ষে এই পার্থক্যটি করা আরও সহজ হবে if
আরবিটি

1
প্রোগ্রামার : "আমি প্যারিস ভ্রমণ করতে চাই।" ঘোষক (গ) : "আপনি কীভাবে সেখানে যেতে চান? নৌকায় করে যাত্রা করবেন? অথবা একটি বিমানে উড়তে হবে? সম্ভবত, অর্ধেকটা পথ নিয়ে যাত্রা করবেন এবং তারপর সেখানে বাকি পথটি উড়াবেন?" প্রোগ্রামার : "এটি কীভাবে হয়েছে তাতে আমার আগ্রহ নেই" " আবশ্যকীয় (স্কয়ার) : "চিন্তা করবেন না you আপনার যা প্রয়োজন তার জন্য আমি জিজ্ঞাসা করতে পারি" " ( এই আমি উত্তর বুঝতে )
Nate

যদি এসকিউএল রেফারেন্সিয়ালি স্বচ্ছ নয় এমন অভিব্যক্তিগুলিকে সমর্থন করে তবে কীভাবে তা ঘোষক হতে পারে?
জাভা-আসক্তি 301

80

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

প্রসঙ্গ স্বাধীনতা

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

yaccউদাহরণ হিসাবে নিন । এটি একটি পার্সার জেনারেটর ওরফে। সংকলক সংকলক, কোনও ভাষার ব্যাকরণ বর্ণনা করার জন্য একটি বাহ্যিক ঘোষণামূলক ডিএসএল, যাতে সেই ভাষার জন্য কোনও পার্সার বর্ণনা থেকে স্বয়ংক্রিয়ভাবে উত্পন্ন হয়। এর প্রসঙ্গে স্বাধীনতার কারণে আপনি এই জাতীয় ব্যাকরণের সাহায্যে অনেকগুলি বিভিন্ন কাজ করতে পারেন:

  • সেই ব্যাকরণের জন্য একটি সি পার্সার তৈরি করুন (এর জন্য আসল ব্যবহারের কেস yacc)
  • সেই ব্যাকরণের জন্য একটি সি ++ পার্সার তৈরি করুন
  • সেই ব্যাকরণের জন্য একটি জাভা পার্সার তৈরি করুন (জে ব্যবহার করে)
  • সেই ব্যাকরণের জন্য একটি সি # পার্সার তৈরি করুন (জিপিপিজি ব্যবহার করে)
  • সেই ব্যাকরণের জন্য একটি রুবি পার্সার তৈরি করুন (র্যাক ব্যবহার করে)
  • সেই ব্যাকরণের জন্য একটি ট্রি ভিজ্যুয়ালাইজেশন তৈরি করুন (গ্রাফভিজ ব্যবহার করে)
  • ইয়্যাক উত্স ফাইলটি নিজেই কিছু চমত্কার-মুদ্রণ, অভিনব-বিন্যাসকরণ এবং সিনট্যাক্স হাইলাইট করুন এবং এটিকে আপনার ভাষার সিনট্যাক্টিক স্পেসিফিকেশন হিসাবে আপনার রেফারেন্স ম্যানুয়ালে অন্তর্ভুক্ত করুন

এবং আরো অনেক …

অপ্টিমাইজেশান

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

সেখানে একটি আকর্ষণীয় ট্রেড বন্ধ এখানে: মেশিন কঠিন কাজ করতে হবে জিনিসটা কিভাবে এটি একটি অনুজ্ঞাসূচক ভাষায় would চেয়ে কিছু করতে, কিন্তু আপনার এটি আছে এটা চিত্রে আউট, এটি অপ্টিমাইজেশান জন্য আরো অনেক কিছু স্বাধীনতা এবং আরো অনেক কিছু তথ্য রয়েছে পর্যায়।


23

ঢিলেঢালাভাবে:

ঘোষণামূলক প্রোগ্রামিংয়ের দিকে ঝুঁকছে: -

  • ঘোষণাপত্রের সেটগুলি, বা ঘোষণামূলক বিবৃতিগুলির প্রত্যেকটির অর্থ রয়েছে (প্রায়শই সমস্যা ডোমেনে থাকে) এবং এটি স্বাধীনভাবে এবং বিচ্ছিন্নভাবে বোঝা যেতে পারে।

অত্যাবশ্যক প্রোগ্রামিংয়ের দিকে ঝোঁক: -

  • কমান্ডের অনুক্রম, যার প্রত্যেকটিতে কিছু না কিছু ক্রিয়া সম্পাদন করা হয়; তবে সমস্যা ডোমেনে যার অর্থ বা নাও থাকতে পারে।

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

রিয়েল প্রোগ্রামগুলি (এমনকি ভাষাগুলিতে লেখা যেগুলি বর্ণালীটির শেষ প্রান্তকে সমর্থন করে, যেমন প্রোলগ বা সি) উভয় শৈলীর বিভিন্ন পর্বে বিভিন্ন ডিগ্রীতে উপস্থিত থাকে, টুকরোটির বিভিন্ন জটিলতা এবং যোগাযোগের প্রয়োজনীয়তাগুলি পূরণ করতে পারে। একটি শৈলী অন্য চেয়ে উচ্চতর নয়; এগুলি কেবল বিভিন্ন উদ্দেশ্যে পরিবেশন করে এবং জীবনের অনেকগুলি জিনিস যেমন সংযম হয় তেমনি গুরুত্বপূর্ণ।


এটাই সঠিক উত্তর। উপরের যে কোনও বিড়বিড়তা নেই
ক্রিজিসটফ ওয়েন্ডে

কেবলমাত্র প্রশ্নের উত্তর না দিয়ে, প্রসঙ্গ এবং ব্যবহারিকতার সাথে "ব্যাখ্যা আমি লাইক আই 5" শৈলীটি করার জন্য আপনাকে ধন্যবাদ। দুর্দান্ত উত্তর।
মনস্টো

17

এখানে একটি উদাহরণ।

সিএসএসে (এইচটিএমএল পৃষ্ঠাগুলি স্টাইল করার জন্য ব্যবহৃত), আপনি যদি কোনও চিত্রের উপাদানটি 100 পিক্সেল উচ্চ এবং 100 পিক্সেল প্রশস্ত করতে চান তবে আপনি কেবল "ঘোষণা" করুন যা আপনি যা চান তা নীচে:

#myImageId {
height: 100px;
width: 100px;
}

আপনি সিএসএসকে একটি ঘোষিত "স্টাইল শীট" ভাষা বিবেচনা করতে পারেন।

ব্রাউজার ইঞ্জিন যা পড়ে এবং ব্যাখ্যা করে এই সিএসএসটি করে তা চিত্রটিকে এই লম্বা এবং এর চেয়েও প্রশস্ত করে তোলে যদিও এটি চায়। বিভিন্ন ব্রাউজার ইঞ্জিন (উদাঃ, IE এর ইঞ্জিন, ক্রোমের জন্য ইঞ্জিন) এই কাজটি আলাদাভাবে বাস্তবায়ন করবে।

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


11

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

সংজ্ঞা

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

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

স্প্রেডশিট উদাহরণ

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

সুতরাং যখন প্রোগ্রামটি সমাপ্ত হয় (তখন থেকে আউটপুট হিসাবে main()) কোষগুলিতে মানগুলিকে পরিবর্তিত করার ক্ষমতা, নিয়মের প্রসঙ্গে তাদের পরিবর্তনীয় সঞ্চিত মানগুলিকে তৈরি করে না। মূল পার্থক্য হ'ল প্রতিটি স্প্রেডশিট সূত্র সম্পাদনের পরে কক্ষের মানগুলি আপডেট করা হয় না, সুতরাং সূত্রগুলি সম্পাদনের ক্রমটি বিবেচনা করে না। সমস্ত ঘোষণামূলক সূত্রগুলি সম্পাদন করার পরে কক্ষের মানগুলি আপডেট করা হয়।


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

8

ডিক্লারেটিভ প্রোগ্রামিং সেই চিত্র, যেখানে আবশ্যক প্রোগ্রামিং সেই চিত্র আঁকার নির্দেশনা instructions

আপনি যেখানে চান সেখানে পৌঁছানোর জন্য কম্পিউটারের কী পদক্ষেপ নিতে হবে তার বর্ণনা না দিয়ে আপনি যদি "এটি কী তা বলছেন" তবে আপনি একটি ঘোষণামূলক স্টাইলে লিখছেন।

আপনি যখন এক্সএমএল ডেটা মার্ক করার জন্য ব্যবহার করেন, আপনি ঘোষণামূলক প্রোগ্রামিং ব্যবহার করছেন কারণ আপনি বলছেন যে "এটি একজন ব্যক্তি, এটি জন্মদিন, এবং সেখানে রাস্তার ঠিকানা রয়েছে"।

বৃহত্তর প্রভাবের জন্য যেখানে ঘোষণামূলক এবং অপরিহার্য প্রোগ্রামিং একত্রিত হয় তার কয়েকটি উদাহরণ:

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

  • স্ট্রাকচার্ড কনফিগারেশন ফাইলগুলি ডেটার স্ট্রিং বা মান বলতে কী বোঝায় তা ঘোষণামূলক সিনট্যাক্স ("কী = মান" জোড়া হিসাবে সহজ) ব্যবহার করে।

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


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

1
একটি অন্তর্নিহিত প্রসঙ্গ থাকতে হবে (ডোমেন?) যেখানে ঘোষণামূলক প্রোগ্রাম ব্যবহৃত হয়। সুতরাং এএনটি-র সাথে মিলিত এক্সএমএল ব্যবহার করে ঘোষিত প্রোগ্রাম হিসাবে বিবেচনা করা যেতে পারে।
গুটজফটার

7

ডিক্লারেটিভ প্রোগ্রামিং হ'ল ডিক্লেয়ারেশন, অর্থাৎ ডিক্লেটারিটিভ বাক্য সহ প্রোগ্রামিং। ঘোষিত বাক্যগুলিতে এমন অনেকগুলি বৈশিষ্ট্য রয়েছে যা তাদের বাধ্যতামূলক বাক্যগুলি থেকে পৃথক করে। বিশেষতঃ ঘোষণাগুলি হ'ল:

  • পরিবর্তনমূলক (পুনরায় সাজানো যেতে পারে)
  • সাহসী (পুনরায় গ্রুপবদ্ধ করা যেতে পারে)
  • আদর্শবান (অর্থ পরিবর্তন না করে পুনরাবৃত্তি করতে পারেন)
  • একঘেয়ে (ঘোষণাগুলি তথ্য বিয়োগ করে না)

একটি প্রাসঙ্গিক বিষয় হ'ল এগুলি সমস্ত কাঠামোগত বৈশিষ্ট্য এবং বিষয়গুলির সাথে অরথোগোনাল। ঘোষণাপত্রটি "কী বনাম কীভাবে" তা নিয়ে নয় । আমরা ঘোষণা করতে পারেন (প্রতিনিধিত্ব করেন এবং সীমাবদ্ধ) একটি "কিভাবে" ঠিক যেমন সহজে হিসাবে আমরা ঘোষণা একটি "কি"ঘোষণাপত্র বিষয়বস্তু নয়, কাঠামো সম্পর্কে।আমরা কীভাবে আমাদের কোডটিকে বিমূর্ত করি এবং পুনরায় সংশোধন করি এবং কীভাবে আমরা এটিকে উপ-প্রোগ্রামগুলিতে রূপান্তর করি, কিন্তু ডোমেন মডেলটিতে এতটা নয়, সে ক্ষেত্রে ডিক্লারেটিভ প্রোগ্রামিংয়ের উল্লেখযোগ্য প্রভাব রয়েছে।

প্রায়শই, আমরা প্রাসঙ্গিকতা যুক্ত করে আবশ্যক থেকে ঘোষণাপত্রে রূপান্তর করতে পারি। যেমন "বাম দিকে ঘুরুন। (... এটির জন্য অপেক্ষা করুন ...) ডানদিকে ঘুরুন from" "বব ১১:১০ এ ফু ও বারের চৌরাস্তাতে বাম দিকে ঘুরবে। বব ডানদিকে বার এবং বাজে ছেদ হবে ১১:০6 এ।" মনে রাখবেন যে পরবর্তী ক্ষেত্রে বাক্যগুলি আদর্শবান ও পরিবর্তনশীল, যদিও পূর্বের ক্ষেত্রে বাক্যগুলিকে পুনর্বিন্যাস করা বা পুনরাবৃত্তি করা প্রোগ্রামটির অর্থকে মারাত্মকভাবে পরিবর্তন করতে পারে।

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


1
ঘোষণামূলক এক্সপ্রেশনগুলি প্রোগ্রামের উদ্দেশ্যমূলক আচরণে অবদান রাখে, অনিবার্যভাবে উদ্দেশ্যযুক্ত বা অযৌক্তিকভাবে অবদান রাখতে পারে। এটি ইচ্ছাকৃত শব্দার্থবিজ্ঞান হলে ঘোষণাপত্রের পরিবর্তন ও আদর্শবান হওয়ার দরকার নেই।
শেলবি মুর III

6

আপনি কী চান তা কোনও কম্পিউটারকে বর্ণনা করা, কীভাবে কিছু করা যায় না।


6

একটি এক্সেল পৃষ্ঠা কল্পনা করুন। আপনার ট্যাক্স রিটার্ন গণনা করার জন্য সূত্রগুলি সহ কলামগুলি বিশিষ্ট।

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

এটি ডিক্লেয়ারেশনাল প্রোগ্রামিং সম্পর্কে কী সাজানো। আপনি প্রোগ্রামের প্রবাহের চেয়ে সমস্যার স্থান এবং সমাধানটি ঘোষণা করেন।

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


6

আমি কোনও উত্তর সরবরাহ করার পরে ডিসেম্বর ২০১১ সাল থেকে আমি ঘোষিত প্রোগ্রামিং সম্পর্কে আমার বোঝার সংশোধন করেছি এই প্রশ্নের । এখানে আমার বর্তমান বোঝাপড়া অনুসরণ করা হয়।

আমার বোঝার দীর্ঘ গবেষণা (গবেষণা) এই লিঙ্কটিতে বিস্তারিত রয়েছে , যা আমি নীচে সরবরাহ করব সেই সংক্ষিপ্তসারটির গভীর ধারণা পেতে আপনার পড়া উচিত।

অপরিহার্য প্রোগ্রামিং হ'ল যেখানে পরিবর্তনীয় স্থিতি সংরক্ষণ করা হয় এবং পড়া হয়, সুতরাং প্রোগ্রামের নির্দেশাবলীর ক্রমবিন্যাস এবং / বা সদৃশকরণ প্রোগ্রামের আচরণ (শব্দার্থবিজ্ঞান )গুলিকে পরিবর্তন করতে পারে (এবং এমনকি কোনও বাগ, অর্থাৎ অনিচ্ছাকৃত আচরণও ঘটায়)।

সর্বাধিক নিষ্পাপ এবং চরম অর্থে (যা আমি আমার পূর্বের উত্তরে দৃ as়ভাবে বলেছিলাম), ঘোষিত প্রোগ্রামিং (ডিপি) সমস্ত সঞ্চিত পরিবর্তনীয় স্থিতি এড়িয়ে চলেছে, সুতরাং প্রোগ্রামের নির্দেশাবলীর ক্রমবর্ধমান এবং / অথবা সদৃশ করা যায় না আচরণ (শব্দার্থক) কোনও পরিবর্তন ।

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

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

পরবর্তী পদক্ষেপটি হ'ল ডিপিতে কোন প্রোগ্রামিং মডেল বা দৃষ্টান্তগুলি সহায়তা করে সে সম্পর্কে কথা বলা হবে, তবে এখানে প্রশ্নটি নয়।


আপডেট: দয়া করে ঘোষিত প্রোগ্রামিংয়ের সংজ্ঞা সম্পর্কে আমার অন্যান্য উত্তরের আরও পরিস্কার ব্যাখ্যাটি দেখুন ।
শেলবি মুর তৃতীয়

Functional programmingএই দিনগুলিতে এটি একটি গুঞ্জন শব্দ যা মূলত ডিক্যারেটিভ প্রোগ্রামিংয়ের একটি উপসেট। সি # ভাষায় লাইনকিউ কার্যকরী প্রোগ্রামিংয়ের একটি উপাদান যখন ভাষা নিজেই প্রকৃতির দ্বারা আবশ্যক হয়। সুতরাং সি # সংজ্ঞায়িত হয়ে সংজ্ঞায়িত হয়ে ধরণের হয়।
আরবিটি

1
কম্পিউট ডট কম লিঙ্কটি মারা গেছে।
কেদার মহাশ্বদে

5

এটি কীভাবে কাজ করা উচিত তা বর্ণনা করার পরিবর্তে কিছু কী করা উচিত বা কী করা উচিত তা বর্ণনা করার চারপাশে প্রোগ্রামিংয়ের একটি পদ্ধতি ।

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

এই উইকিপিডিয়া নিবন্ধটি একটি ভাল ওভারভিউ: http://en.wikedia.org/wiki/Declarative_programming


1
মাইনর কুইবল। ডাব্লুপিএফ একটি লাইব্রেরি, সত্যই কোনও ভাষা বা দৃষ্টান্ত নয়। আমি মনে করি আপনি XAML বলতে প্রকৃতপক্ষে ঘোষিত ভাষার উদাহরণ say
নিক

এবং আপনি কিভাবে একটি লাইব্রেরি / কাঠামো ব্যবহার করে প্রোগ্রামিং বর্ণনা করবেন?
গুটজফটার

এটি ঘোষণা করা ভুল যে ঘোষণামূলক প্রোগ্রামিংয়ে এক্সপ্রেশন থাকতে পারে না। মূল পার্থক্য হ'ল প্রকাশগুলি সঞ্চিত মানগুলিকে রূপান্তর করতে পারে না
শেলবি মুর III

এইচটিএমএল একটি প্রোগ্রামিং ভাষা নয়
Lud

5

যেহেতু আমি আমার পূর্ববর্তী উত্তরটি লিখেছি, আমি ঘোষিত সম্পত্তির একটি নতুন সংজ্ঞা তৈরি করেছি যা নীচে উদ্ধৃত হয়েছে। আমি বাধ্যতামূলক প্রোগ্রামিংকে দ্বৈত সম্পত্তি হিসাবেও সংজ্ঞায়িত করেছি।

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

সংজ্ঞার উদ্ধৃত ব্যাখ্যা ঘোষণামূলক প্রোগ্রামিংয়ে খাঁটি কার্যকরী প্রোগ্রামিংয়ের ভূমিকা নিয়ে আলোচনা করে ।

ঘোষণাপত্র বনাম আবশ্যক

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

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

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

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

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

সংজ্ঞা:


ঘোষণামূলক সম্পত্তি যেখানে কেবলমাত্র একটি সম্ভাব্য বিবৃতি আছে যা প্রতিটি নির্দিষ্ট মডুলার অর্থ প্রকাশ করতে পারে সেট করতে পারে।

অপরিহার্য সম্পত্তি 3 দ্বৈত, যেখানে শব্দার্থ রচনার অধীনে বেমানান হয় এবং / অথবা বিবৃতিগুলির সেটগুলির বিভিন্নতার সাথে প্রকাশ করা যেতে পারে।


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

এই modular ঘোষণামূলক শব্দার্থবিদ্যা উদাহরণ বিভাগ তত্ত্ব functors যেমন অন্তর্ভুক্ত , নামমাত্র টাইপিং, নামব্যবধান নাম ক্ষেত্র, এবং wrt তারপর বিশুদ্ধ কার্যকরী প্রোগ্রামিং শব্দার্থবিদ্যা কর্মক্ষম স্তর।Applicative

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

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

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

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

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

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


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

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


সম্পাদনা: আমি রবার্ট হার্পারের ব্লগে নিম্নলিখিত মন্তব্যটি পোস্ট করেছি :

ফাংশনাল প্রোগ্রামিংয়ে ... একটি ভেরিয়েবলের পরিবর্তনের পরিসর এক প্রকার

কীভাবে একজন অপরিহার্য প্রোগ্রামিং থেকে কার্যকরী পার্থক্য করে তার উপর নির্ভর করে, একটি অপরিহার্য প্রোগ্রামে আপনার 'কার্যনির্বাহী' তেও এর প্রকরণের পরিবর্তনশীলতার উপর একটি টাইপ থাকতে পারে।

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

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

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

যেমনটি আমি 2012 সালে লিখেছি যা আপনার সাম্প্রতিক ব্লগে মন্তব্যগুলির মত সমান .কমত্য বলে মনে হচ্ছে , ঘোষিত প্রোগ্রামিংটি ধারণাটি বোঝার জন্য যে প্রচেষ্টা করা অর্থহীন শব্দার্থবিজ্ঞান কখনও অস্বচ্ছ নয় capture অস্বচ্ছ শব্দার্থবিদ্যার উদাহরণগুলি হ'ল আদেশের উপর নির্ভরতা, অপারেশনাল শব্দার্থক স্তরের উচ্চ স্তরের শব্দার্থসমূহের ক্ষয়ের উপর নির্ভরতা (উদাহরণস্বরূপ কাস্তগুলি রূপান্তর হয় না এবং উচ্চতর স্তরের শব্দার্থকে সীমাবদ্ধ করে জেনেরিকস সীমাবদ্ধ করে ), এবং পরিবর্তনশীল মানগুলির উপর নির্ভরতা যা পরীক্ষা করা যায় না (প্রমাণিত হয়) সঠিক) প্রোগ্রামিং ভাষা দ্বারা।

সুতরাং আমি এই সিদ্ধান্তে পৌঁছেছি যে কেবলমাত্র অ-টিউরিং সম্পূর্ণ ভাষাগুলি ঘোষণামূলক হতে পারে।

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

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

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


4

ডিক্লারেটিভ প্রোগ্রামিং হ'ল "ভাষাগুলিতে প্রোগ্রামিংয়ের কাজ যা মেশিনের অপারেশনাল মডেলের পরিবর্তে বিকাশকারীর মানসিক মডেলের সাথে সামঞ্জস্য করে"।

ঘোষিত এবং আবশ্যক প্রোগ্রামিংয়ের মধ্যে পার্থক্যটি কাঠামোগত ডেটা পার্সিংয়ের সমস্যা দ্বারা ভালভাবে ফুটিয়ে তোলা হয়েছে।

একটি অত্যাবশ্যক প্রোগ্রাম ইনপুট গ্রহণ এবং ডেটা উত্পন্ন করতে পারস্পরিক পুনরাবৃত্তি ফাংশন ব্যবহার করবে। একটি ঘোষণামূলক প্রোগ্রাম এমন একটি ব্যাকরণ প্রকাশ করবে যা ডেটার কাঠামোকে সংজ্ঞায়িত করে যাতে এটির পরে বিশ্লেষণ করা যায়।

এই দুটি পদ্ধতির মধ্যে পার্থক্যটি হ'ল ঘোষিত প্রোগ্রামটি একটি নতুন ভাষা তৈরি করে যা সমস্যার হোস্ট ল্যাঙ্গুয়েজের চেয়ে সমস্যার মানসিক মডেলটির সাথে আরও ঘনিষ্ঠভাবে ম্যাপ করা থাকে।


2

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


1

আমি এটিকে ডিপি হিসাবে প্রকাশ করার উপায় হিসাবে ব্যাখ্যা করব

  • একটি লক্ষ্য প্রকাশ , এর শর্তসমূহ - আমরা কী অনুসন্ধান করছি। একটি আছে, হয়তো বা অনেক?
  • কিছু জানা তথ্য
  • বিধিগুলি যা তথ্যগুলি প্রসারিত করে

... আর একটা কেটে সাধারণত একটি সঙ্গে কাজ ইঞ্জিন যেখানে একীকরণ অ্যালগরিদম গোল খুঁজে।


-1

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

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


1
এইচটিএমএলের ঘোষণামূলক প্রোগ্রামিংয়ের বিপরীতে হাস্কেলের ঘোষণামূলক প্রোগ্রামিংয়ের মধ্যে কোনও "গল্ফ" নেই, কারণ ঘোষিত প্রোগ্রামিংয়ের মূল বৈশিষ্ট্য হ'ল সঞ্চিত মূল্যবোধের অপরিবর্তনীয়তা।
শেলবি মুর III

এটি যেমন হউক না কেন, কোনও টুরিং-সম্পূর্ণ প্রোগ্রামিং সিস্টেমের বিপরীতে একটি ডোমেন-সুনির্দিষ্ট ভাষার মধ্যে ন্যূনতম পার্থক্য রয়েছে যা এর অন্তর্নিহিত গণনায়ও সীমাবদ্ধ।
মার্সিন

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

টার্নিং-সম্পূর্ণতা কেবল আনবাউন্ডেড পুনরাবৃত্তি প্রয়োজন । সঞ্চিত মানগুলির অপরিবর্তনীয়তা আনবাউন্ডেড পুনরাবৃত্তিকে আটকায় না। সুতরাং এগুলি অরথোগোনাল গুণাবলী।
শেলবি মুর III

-2

ঘোষিত প্রোগ্রামিংয়ের আরও কয়েকটি উদাহরণ:

  • ডাটাবাইন্ডিংয়ের জন্য এএসপি.নেট মার্কআপ। এটি কেবল "এই উত্সটি দিয়ে এই গ্রিডটি পূরণ করুন" বলে, উদাহরণস্বরূপ, এবং এটি কীভাবে হয় তার জন্য এটি সিস্টেমে ফেলে দেয়।
  • লিনক এক্সপ্রেশন

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

উদাহরণস্বরূপ, ধরা যাক আপনার একটি ফাংশন রয়েছে যা অ্যারে বা তালিকার প্রতিটি উপাদানকে কিছু করে। Ditionতিহ্যবাহী কোডটি দেখতে এই রকম হবে:

foreach (object item in MyList)
{
   DoSomething(item);
}

বড় কোন ব্যাপার নেই। তবে আপনি যদি আরও ঘোষণামূলক সিনট্যাক্স ব্যবহার করেন এবং পরিবর্তে ডসোমিংথিং () কে অ্যাকশন হিসাবে সংজ্ঞায়িত করেন? তারপরে আপনি এটি এভাবে বলতে পারেন:

MyList.ForEach(DoSometing);

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

  • আপনি যদি এই লিঙ্কটি অনুসরণ করেন তবে এটি আমার এক বন্ধুর দ্বারা আপনাকে একটি ব্লগ পোস্টে নিয়ে যায়। পুরো পোস্টটি কিছুটা দীর্ঘ, তবে আপনি "সমস্যা" শিরোনামের শিরোনামে স্ক্রল করতে পারেন _ এবং এটি কোনও সমস্যা নেই তা বেছে নিন।

1
আপনি ঘোষণামূলক প্রোগ্রামিং নয়, ক্রিয়ামূলক প্রোগ্রামিংয়ের বর্ণনা দিচ্ছেন । ডিক্লারেটিভ প্রোগ্রামিং এর বৈশিষ্ট্য রয়েছে যে এটি সঞ্চিত মানগুলিকে রূপান্তর করে না
শেলবি মুর III

ডিক্লারেটিভ প্রোগ্রামিং সঞ্চিত মানগুলিকে পরিবর্তন করতে পারে ... এটি ঠিক কীভাবে পরিবর্তন করতে চান তার ঠিক পরিবর্তে আপনি কী পরিবর্তন করতে চান তা নির্দিষ্ট করে (ঘোষণা করুন) । আপনার কি মনে হয় যে বর্গমূহের মধ্যে একটি বর্ধিত INSERT বা আপডেট আপডেট বিবৃতি দেয়?
জোয়েল কোহোর্ন

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

-3

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

আবার এটি সামগ্রিকভাবে কী সমস্যা তা নির্ভর করে। প্রোগ্রামের কারণে আপনাকে এটি সংক্ষিপ্ত করতে হতে পারে। আশা করি এটি যদি না সহায়তা করে এবং প্রতিক্রিয়াটি প্রয়োজন তবে তা প্রয়োজন। ধন্যবাদ.

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