রিটার্ন ক্ষতিকারক হিসাবে বিবেচিত? কোড ছাড়া কি এটি কার্যকরী হতে পারে?


45

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

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

একটি খাঁটি ফাংশন দুটি গুণ আছে:

  1. একই ইনপুটগুলির সাথে বার বার কল করা একই ফলাফল দেয়। এ থেকে বোঝা যায় যে এটি অপরিবর্তনীয়। এর রাজ্যটি একবারেই সেট করা আছে।

  2. এটি কোনও পার্শ্ব প্রতিক্রিয়া তৈরি করে। এটিকে কল করার ফলে ঘটে যাওয়া একমাত্র পরিবর্তনই ফলাফল তৈরি করছে।

সুতরাং, যদি আপনি নিজের returnযোগাযোগের ফলাফলের উপায় হিসাবে ব্যবহার করে শপথ করে থাকেন তবে কীভাবে সম্পূর্ণরূপে কার্যকরী হবে ?

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

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

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

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

আমি যখন প্রথম পার্শ্ব প্রতিক্রিয়া সম্পর্কে জানলাম তখন আমি এটিকে আউটপুট প্যারামিটারের মতো ভেবেছিলাম। আমাদের বলা হয়েছিল যে কিছু কাজ আশ্চর্যজনকভাবে ঘটে, অর্থাৎ return resultসম্মেলনটি না মেনে মানুষকে অবাক করে দেবে না । এখন নিশ্চিত, আমি জানি যে সমান্তরাল অ্যাসিনক্রোনাস থ্রেডিং ইস্যুগুলির একটি স্তূপ রয়েছে যা পার্শ্ব প্রতিক্রিয়াগুলি সম্পর্কে ভুগতে পারে তবে প্রত্যাবর্তনটি হ'ল একটি সম্মেলন যা আপনাকে ফলাফলটি স্ট্যাকের দিকে ঠেলে ফেলেছে তাই যাই হোক না কেন আপনি এটি পরে পপ করতে পারেন। আসলেই এটি।

আমি যা সত্যিই জিজ্ঞাসা করার চেষ্টা করছি:

কি returnএকমাত্র উপায় যে সব পার্শ্ব প্রতিক্রিয়া দুর্বিপাক এড়াতে এবং কেশ ছাড়া থ্রেড নিরাপত্তা পেতে, ইত্যাদি নাকি অনুসরণ করতে পারেন বলছি, জিজ্ঞাসা করবেন না একটি বিশুদ্ধরূপে কার্মিক ভাবে?


3
আপনি যদি কমান্ড ক্যোয়ারী বিচ্ছেদকে উপেক্ষা না করা বেছে নেন, আপনি কি আপনার সমস্যার সমাধান বিবেচনা করবেন?
রওয়ং

30
বিবেচনা করুন যে কিকের উপরে নিজেকে সন্ধান করা এটি একটি ইঙ্গিত হতে পারে যে আপনি প্রতিটি নির্দিষ্ট পরিস্থিতির পক্ষে ও বিতর্ককে যুক্তি না দিয়ে কৌতুক-চালিত নকশায় যুক্ত হচ্ছেন।
blrfl

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

16
@ জামেস্লারেজ: ভুয়া দ্বৈতত্ত্ব গোপনীয় চিন্তাভাবনা দ্বারা নিজেকে ডিজাইনের দিকে চালিত না করা ওয়াইল্ড ওয়েস্টের মতো জিনিস নয় / আপনি যে বিষয়ে কথা বলছেন তার কাছে সমস্ত কিছু কাছে যায়। মুল বক্তব্যটি হ'ল ডগমাকে ভাল, সরল, সুস্পষ্ট কোডের পথে না যেতে। সর্বজনীন আইন অভাবের জন্য; প্রসঙ্গটি রাজাদের জন্য।
নিকল বোলাস

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

উত্তর:


96

যদি কোনও ফাংশনের কোনও পার্শ্ব প্রতিক্রিয়া না থাকে এবং এটি কোনও কিছুই না ফেরায়, তবে ফাংশনটি অকেজো। এটা যে হিসাবে হিসাবে সহজ।

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

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

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

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

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


20
@ ক্যান্ডিওড অরেঞ্জ: কলগুলির অনেক স্তরগুলি ধারণামূলকভাবে কোনও পরিবর্তন করে না তবে কোনও পদ্ধতির প্রত্যক্ষ বা অপ্রত্যক্ষভাবে কোনও পার্শ্ব প্রতিক্রিয়া রয়েছে কিনা। এটি এখনও একটি পার্শ্ব প্রতিক্রিয়া। তবে যদি বক্তব্যটি হ'ল পার্শ্ব-প্রতিক্রিয়াগুলি কেবল ইনজেকশনযুক্ত বস্তুর মাধ্যমে ঘটে তাই আপনি কী ধরণের পার্শ্ব প্রতিক্রিয়াগুলি সম্ভব তা নিয়ন্ত্রণ করতে পারেন, তবে এটি একটি ভাল ডিজাইনের মতো শোনাচ্ছে। এটি কেবল পার্শ্ব-প্রতিক্রিয়া মুক্ত নয়। এটি ওও ভাল তবে এটি নিখুঁতভাবে কার্যকর নয়।
জ্যাকবিবি

12
@ লাইটনেসেসেসিনআরবিট: গ্রেপ সাইলেন্ট মোডে একটি প্রসেস রিটার্ন কোড রয়েছে যা ব্যবহৃত হবে। যদি এটি না থাকে, তবে এটি সত্যই
অব্যর্থ

10
@ প্রোগো: একটি রিটার্ন কোড কোনও পার্শ্ব প্রতিক্রিয়া নয়; এটা প্রভাব। যাকে আমরা পার্শ্ব প্রতিক্রিয়া বলি তাকে সাইড এফেক্ট বলা হয় কারণ এটি রিটার্ন কোড নয়;)
মনিকার সাথে লাইটনেস রেস

8
@ কিউবিক এটাই কথা। পার্শ্ব প্রতিক্রিয়াবিহীন একটি প্রোগ্রাম অকেজো।
জেনস স্কাউডার

5
@ ম্যাথ্রেডলার এটি একটি পার্শ্ব প্রতিক্রিয়া :)
অ্যান্ড্রেস এফ।

32

বলুন, জিজ্ঞাসা করবেন না কিছু মৌলিক অনুমান সঙ্গে:

  1. আপনি অবজেক্ট ব্যবহার করছেন।
  2. আপনার বস্তুর স্থিতি রয়েছে।
  3. আপনার বস্তুর অবস্থা তাদের আচরণকে প্রভাবিত করে।

এই জিনিসগুলির কোনওটিই খাঁটি ফাংশনে প্রযোজ্য নয়।

সুতরাং আসুন আমরা কেন "বলুন, জিজ্ঞাসা করবেন না" বিধিটি পর্যালোচনা করি। এই নিয়মটি একটি সতর্কতা এবং একটি অনুস্মারক। এটি এর সংক্ষেপে সংক্ষেপে বলা যেতে পারে:

আপনার শ্রেণিকে তার নিজস্ব রাষ্ট্র পরিচালনা করার অনুমতি দিন। এটিকে তার রাজ্যের জন্য জিজ্ঞাসা করবেন না এবং তারপরে সেই রাজ্যের উপর ভিত্তি করে পদক্ষেপ নিন। আপনি কী চান তা শ্রেণিকে বলুন এবং তার নিজের রাষ্ট্রের ভিত্তিতে কী করবেন তা সিদ্ধান্ত নিতে দিন।

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

ফাউলারের কাছ থেকে :

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

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

টিডিএ লঙ্ঘন

var color = trafficLight.Color;
var elapsed = trafficLight.Elapsed;
If (color == Color.Red && elapsed > 2.Minutes)
    trafficLight.ChangeColor(green);

টিডিএ লঙ্ঘন নয়

var result = trafficLight.ChangeColor(Color.Green);

অথবা

var result = await trafficLight.ChangeColorWhenReady(Color.Green);     

পরের দুটি উদাহরণেই ট্র্যাফিক লাইট তার রাজ্য এবং এর ক্রিয়াকলাপগুলিকে নিয়ন্ত্রণ করে।


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

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

1
@ জারেডস্মিথ এবং আপনি যখন বস্তুগুলির বিষয়ে কথা বলছেন তখন কি একই রকম হয় না? এটি কি কেবল অপরিবর্তনীয় সমস্যা নয়?
candied_orange

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

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

30

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

আপনি শুধুমাত্র তার জিজ্ঞাসা করি না অভ্যন্তরীণ স্থিতি , আপনি জিজ্ঞাসা করবেন না যদি এটা সব সময়ে একটি অভ্যন্তরীণ রাষ্ট্র হয়েছে পারেন।

আরও বলুন, জিজ্ঞাসা করবেন না! নেই না একটি ফিরতি মূল্য (ক দ্বারা উপলব্ধ আকারে ফলে পাচ্ছেন না পরোক্ষভাবে returnপদ্ধতি ভিতরে বিবৃতি)। এটি কেবল বোঝায় যে আপনি কীভাবে এটি করেন তার কোনও যত্ন নেই, তবে সেই প্রক্রিয়াজাতকরণ করুন! । এবং কখনও কখনও আপনি তত্ক্ষণাত প্রসেসিং ফলাফল চান ...


1
সিকিউএস যদিও বোঝায় যে রাষ্ট্র পরিবর্তন করে ফলাফল পাওয়া পৃথক করা উচিত
জে কে।

7
@jk। যথারীতি: সাধারণভাবে আপনার রাষ্ট্র পরিবর্তন এবং ফলাফল ফেরত দেওয়া উচিত তবে খুব কম ক্ষেত্রেই এটি একত্রিত করার বৈধ কারণ রয়েছে। উদাহরণস্বরূপ: একটি পুনরুক্তি next()পদ্ধতিতে কেবল বর্তমান বস্তুটি ফেরত দেওয়া উচিত নয় তবে
পুনরাবৃত্তির অভ্যন্তরীণ অবস্থারও

4
যথাযথভাবে। আমি মনে করি ওপির সমস্যাটি কেবল "ভুল বলুন, জিজ্ঞাসা করবেন না" ভুল ধারণা / অপব্যবহারের কারণে। এবং এই ভুল বোঝাবুঝির সমাধান করা সমস্যাটি দূরে সরিয়ে দেয়।
কনরাড রুডলফ

@ কনরাড রুডল্ফ প্লাস, আমি মনে করি না এখানে এটাই একমাত্র ভুল বোঝাবুঝি। একটি "খাঁটি ফাংশন" তাদের বর্ণনায় "এর রাজ্যটি কেবল একবার সেট করা হয়।" অন্য একটি মন্তব্য ইঙ্গিত দেয় এটির অর্থ একটি ক্লোজারের প্রসঙ্গ হতে পারে তবে শব্দবন্ধগুলি আমার কাছে অদ্ভুত শোনায়।
ইজকাটা

17

যদি আপনি return"ক্ষতিকারক" হিসাবে বিবেচনা করেন (আপনার ছবিতে থাকতে), তবে কোনও ফাংশন তৈরির পরিবর্তে

ResultType f(InputType inputValue)
{
     // ...
     return result;
}

এটি একটি বার্তা প্রেরণ পদ্ধতিতে তৈরি করুন:

void f(InputType inputValue, Action<ResultType> g)
{
     // ...
     g(result);
}

যতক্ষণ fএবং gপার্শ্ব-প্রতিক্রিয়া মুক্ত থাকে, তাদের এক সাথে শৃঙ্খলাবদ্ধ করা পাশাপাশি পার্শ্ব-প্রতিক্রিয়া মুক্তও থাকবে। আমি মনে করি এই শৈলীটি কন্টিনিয়েশন-পাসিং শৈলীর সাথে সমান ।

এটি যদি "উন্নত" প্রোগ্রামগুলির দিকে পরিচালিত করে তবে এটি বিতর্কযোগ্য, যেহেতু এটি কিছু সম্মেলন ভঙ্গ করে। জার্মান সফ্টওয়্যার ইঞ্জিনিয়ার রাল্ফ ওয়েস্টফাল এটিকে ঘিরে একটি পুরো প্রোগ্রামিং মডেল তৈরি করেছিলেন, তিনি একে "ইভেন্ট ভিত্তিক উপাদানগুলি" বলেছিলেন এমন একটি মডেলিং কৌশল যা তিনি "ফ্লো ডিজাইন" বলে থাকেন।

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


24
If this really leads to "better" programs is debatableআমাদের কেবলমাত্র এই শতাব্দীর প্রথম দশকে জাভাস্ক্রিপ্টে লিখিত কোডটি দেখতে হবে। জ্যাকোয়ারি এবং এর প্লাগইনগুলি সর্বত্র এই দৃষ্টান্ত কলব্যাকগুলি ... কলব্যাকের প্রবণ ছিল । একটি নির্দিষ্ট সময়ে, অনেকগুলি নেস্টেড কলব্যাকগুলি , ডিবাগটি করা একটি দুঃস্বপ্ন। সফ্টওয়্যার ইঞ্জিনিয়ারিং এবং এর "নীতিগুলি" নির্বিশেষে লোকেরা কোডটি এখনও পড়তে হবে
লাইভ

1
তারপরেও কোনও পর্যায়ে আপনাকে এমন ক্রিয়া সরবরাহ করতে হবে যা একটি পার্শ্ব প্রতিক্রিয়া সম্পাদন করে বা আপনার সিপিএস অংশটি থেকে ফিরে আসতে পারে
জে কে।

12
@ লাইভ সিপিএসকে সংকলকগুলির জন্য একটি অপ্টিমাইজেশন প্রযুক্তি হিসাবে আবিষ্কার করা হয়েছিল, আসলে কেউ প্রোগ্রামাররা হাত দিয়ে কোডটি লেখার প্রত্যাশা করেনি।
জোকার_ভিডি

3
@ ক্যান্ডিওড অরেঞ্জ স্লোগান আকারে, "প্রত্যাবর্তনটি কি করণীয় তা ধারাবাহিকভাবে জানিয়ে দিচ্ছে"। হ্যাভিটের অভিনেতা মডেলটি বোঝার চেষ্টা করে স্কিমের সৃষ্টি অনুপ্রাণিত হয়েছিল এবং সিদ্ধান্তে পৌঁছেছিল যে অভিনেতা এবং সমাপন একই জিনিস ছিল।
ডেরেক এলকিন্স

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

7

বার্তা প্রেরণ সহজাতভাবে কার্যকর। আপনি যদি বলতে একটি বস্তু না কিছু, আপনি এটি কোনো কিছুর উপর প্রভাব আছে আশা। যদি বার্তাটির হ্যান্ডলারটি খাঁটি হত তবে আপনাকে এটি বার্তা প্রেরণের দরকার হবে না।

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

"প্রেরককে" পাস করা যাতে ফলাফলটি স্পষ্টভাবে বিতরণ করা উচিত মডেলগুলির ধারাবাহিকতা পাস করার শৈলী বা ভয়ঙ্কর পরামিতিগুলি - এটি বাদ দিয়ে সরাসরি তাদের পরিবর্তনের পরিবর্তে তাদের কাছে বার্তা দেয়।


5

এই পুরো প্রশ্নটি আমাকে 'স্তরের লঙ্ঘন' হিসাবে আঘাত করে।

একটি বড় প্রকল্পে আপনার নিম্নোক্ত স্তর রয়েছে (কমপক্ষে):

  • সিস্টেম স্তর যেমন ই-বাণিজ্য প্ল্যাটফর্ম
  • সাব-সিস্টেম স্তর যেমন ব্যবহারকারীর বৈধতা: সার্ভার, AD, সম্মুখ-প্রান্ত
  • পৃথক প্রোগ্রাম স্তর যেমন উপরের উপাদানগুলির মধ্যে একটি
  • অভিনেতা / মডিউল স্তর [এটি ভাষার উপর নির্ভর করে জটিল আকার ধারণ করে]
  • পদ্ধতি / ফাংশন স্তর।

এবং তাই ব্যক্তিগত টোকেন নিচে।

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


2

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

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

এই পদ্ধতির একটি উদাহরণ পাইথন বিল্টিন tupleএবং frozensetডেটা ধরণের। এখানে হিমায়িতের একটি সাধারণ ব্যবহার:

small_digits = frozenset([0, 1, 2, 3, 4])
big_digits = frozenset([5, 6, 7, 8, 9])
all_digits = small_digits.union(big_digits)

print("small:", small_digits)
print("big:", big_digits)
print("all:", all_digits)

যা নিম্নলিখিতটি মুদ্রণ করবে, তা দেখিয়ে দেবে যে ইউনিয়ন পদ্ধতি পুরাতন বস্তুগুলিকে প্রভাবিত না করেই তার নিজস্ব রাজ্য দিয়ে একটি নতুন হিমায়িত তৈরি করে:

ছোট: হিমশীতল ({0, 1, 2, 3, 4})

বড়: হিমশীতল ({5, 6, 7, 8, 9})

সমস্ত: হিমশীতল ({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})

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


1

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

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

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

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

নোডাল পাইপলাইন

এখানে চিত্র বর্ণনা লিখুন

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

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

কিভাবে এটা কাজ করে

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

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

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

ব্যবহারিক ব্যবহারের ক্ষেত্রে?

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

সংকেত এবং স্লট

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


0

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

সুতরাং, আমি নিজেকে পুনরায় প্রেরণ থেকে শুরু করার পরামর্শ দিচ্ছি: "আমরা কীভাবে পার্শ্ব-প্রতিক্রিয়াটি সংজ্ঞায়িত করব এবং প্রদত্ত সংজ্ঞা (গুলি)" রিটার্ন "বিবৃতিতে এর আন্তঃসম্পর্ক সম্পর্কিত কী বলে?"


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