একটি "পার্শ্ব প্রতিক্রিয়া" কি?


87

আমি স্পষ্টভাবে পার্শ্ব প্রতিক্রিয়া ধারণা বুঝতে পারি না।

  • প্রোগ্রামিং এর পার্শ্ব প্রতিক্রিয়া কি?
  • এটি কি প্রোগ্রামিং ভাষার উপর নির্ভরশীল?
  • বাহ্যিক এবং অভ্যন্তরীণ পার্শ্ব প্রতিক্রিয়া বলে কি এমন কিছু আছে?

পার্শ্ব প্রতিক্রিয়া তৈরি কারণগুলির কিছু উদাহরণ দিন।


7
শোনাচ্ছে অনেকটা হোম ওয়ার্কের মতো।
gnasher729

3
@ gnasher729 যিনি এটি যত্নশীল নিখুঁতভাবে দরকারী :)
চার্লি পার্কার

উত্তর:


108

একটি পার্শ্ব প্রতিক্রিয়া কেবলমাত্র এক ধরণের রাষ্ট্রের সংশোধনকে বোঝায় - উদাহরণস্বরূপ:

  • একটি ভেরিয়েবলের মান পরিবর্তন করা;
  • ডিস্কে কিছু ডেটা লেখা;
  • ব্যবহারকারী ইন্টারফেসে একটি বোতাম সক্ষম বা অক্ষম করা।

কিছু লোক যা বলে মনে হচ্ছে তার বিপরীতে :

  • একটি পার্শ্ব প্রতিক্রিয়া নেই না গোপন করা বা অপ্রত্যাশিত আছে (এটা হতে পারে, কিন্তু যে সংজ্ঞা যেমন কম্পিউটার বিজ্ঞান ক্ষেত্রে প্রযোজ্য সঙ্গে কিছুই করার আছে);

  • একটি পার্শ্ব প্রতিক্রিয়া আদর্শশক্তির সাথে কোন সম্পর্ক নেই । আইডেম্পোটেন্ট ফাংশনটির পার্শ্ব প্রতিক্রিয়া থাকতে পারে এবং অ-আদর্শহীন ফাংশনের কোনও পার্শ্ব প্রতিক্রিয়া থাকতে পারে না (যেমন বর্তমান সিস্টেমের তারিখ এবং সময় পাওয়া)।

এটা সত্যিই খুব সহজ। পার্শ্ব প্রতিক্রিয়া = কোথাও কিছু পরিবর্তন।

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


38
"পার্শ্ব প্রতিক্রিয়া" শব্দগুচ্ছটি এটিকে শোনায় যে উদ্দেশ্য হিসাবে অন্য কিছু পরিবর্তন করা হচ্ছে। Medicineষধে, কোনও ওষুধের ব্যথা হ্রাস করার একটি প্রধান প্রভাব থাকে এবং কখনও কখনও নাক-রক্তপাত, মাথা ঘোরা ইত্যাদির একটি পার্শ্ব-প্রতিক্রিয়া থাকে ... ড্রাগের উদ্দেশ্য নাকের রক্তপাত হয় না তবে কখনও কখনও এটি হিসাবে ঘটে থাকে অনিচ্ছাকৃত অতিরিক্ত ফলাফল।
হতাশ

15
@ ফ্রাস্ট্রেটেড: +1। আমি যখন এই শব্দটি দেখি তখনও আমি সাহায্য করতে পারি না তবে অবাক হয়ে যাই যে এফপি অ্যাডভোকেটরা এই সূক্ষ্মভাবে ভঙ্গুর অর্থটি তৈরি করার জন্য বেছে নেন নি।
ম্যাসন হুইলারের

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

7
@ ম্যাসন হুইলার: সি ++a। অ্যাসাইনমেন্টের মতো দেখাচ্ছে না। b = ++a;এর দুটি পার্শ্ব প্রতিক্রিয়া রয়েছে। এর স্পষ্টত এক এবং ক্রিপ্টো-অ্যাসাইনমেন্ট a। এটি এমন এক ধরণের পার্শ্ব-প্রতিক্রিয়া যা (কারও কাছে) কাম্য। আমার পুরো ক্যারিয়ারটিকে এটি সূক্ষ্ম না করার জন্য পার্শ্ব-প্রতিক্রিয়া বলা হয়েছে called
এস .লট

5
@ জাচারি, দয়া করে আমার উত্তরের বুলেট পয়েন্টটি দেখুন। আপনি যা উল্লেখ করছেন তা হ'ল আদর্শবান আচরণ (বা এর অভাব)। এটি আপনাকে পার্শ্ব প্রতিক্রিয়া সম্পর্কে কিছু বলতে দেয় না। সিস্টেম ঘড়ি চেক করা হয় না একটি পার্শ্ব প্রতিক্রিয়া; আসলে, "get" শব্দের সাথে উপসর্গযুক্ত কোনও ফাংশন বা পদ্ধতি এমন একটি যা আপনার যুক্তিযুক্তভাবে কোনও পার্শ্ব প্রতিক্রিয়া না হওয়ার আশা করা উচিত।
অ্যারোনআউট

36

কম্পিউটারের অবস্থা পরিবর্তন করে বা বাইরের বিশ্বের সাথে যোগাযোগ করে এমন কোনও ক্রিয়াকলাপের একটি পার্শ্ব প্রতিক্রিয়া বলে। সাইড এফেক্টে উইকিপিডিয়া দেখুন ।

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

int square(int x) { return x * x; }

বিপরীতে, এই ক্রিয়াকলাপগুলিতে কল করা আপনাকে যে আদেশে কল করে তার উপর নির্ভর করে বিভিন্ন ফলাফল দেয় কারণ তারা কম্পিউটারের অবস্থা সম্পর্কে কিছু পরিবর্তন করে:

int n = 0;
int next_n() { return n++; }
void set_n(int newN) { n = newN; }      

এই ফাংশনে আউটপুট থেকে ডেটা লেখার পার্শ্ব প্রতিক্রিয়া রয়েছে। আপনি ফাংশনটি কল করবেন না কারণ আপনি তার রিটার্নের মান চান; আপনি এটি কল করেছেন কারণ আপনি এটি "বাইরের বিশ্বের" উপর যে প্রভাব ফেলতে চান তা চান:

int Write(const char* s) { return printf("Output: %s\n", s); }

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

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

কিছু সিস্টেমে, অনুরোধ করা square(x)মডিউলটির কারণ হতে পারে যেখানে ফাংশনটি ডিস্ক থেকে লোড করার সংজ্ঞা দেওয়া হয়। এটিকে কি পার্শ্ব-প্রতিক্রিয়া হিসাবে বিবেচনা করা উচিত? সর্বোপরি, এই মেনস করে যে (প্রথম) কলটি অপ্রত্যাশিতভাবে দীর্ঘ সময় নেয়, যে র‌্যামের ব্যবহার আরও বেশি হয় etc. ইত্যাদি
হ্যাগেন ফন ইটজেন

1
@ হ্যাগেনভোনইটজেন প্রতিটি অপারেশন আসলে কম্পিউটারের রাজ্যে (সিপিইউ রেজিস্টার, মেমরি, বিদ্যুত ব্যবহার, তাপ ইত্যাদি) পরিবর্তন করে। "পার্শ্ব প্রতিক্রিয়া" সাধারণত একটি কাল্পনিক আদর্শিক সম্পাদন পরিবেশকে বোঝায় যেখানে প্রোগ্রামটি পরিষ্কারভাবে পরিবর্তন না করে that পরিবেশের কিছুই পরিবর্তন হয় না। তবে যদি আপনি কল করে থাকেন square(x) যে আপনি বাহ্যিক কম্পিউটারের স্থিতি পরিবর্তন করতে চান তবে আপনি এটিকে একটি পার্শ্ব প্রতিক্রিয়া হিসাবে বিবেচনা করতে পারেন।
ক্রিস্টোফার জনসন

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

20

আমি মনে করি যে বিদ্যমান উত্তরগুলি বেশ ভাল। আমি এমন কিছু দিক সম্পর্কে বিস্তারিত বলতে চাই যে আইএমও যথেষ্ট পরিমাণে চাপ দেয় নি।

গণিতে কোনও ফাংশন হ'ল মানকে একটি মান থেকে একটি মানচিত্র। সুতরাং, একটি ফাংশন fএবং একটি মান দেওয়া x, f(x)সর্বদা একই ফলাফল হবে y। তুমি ভালো প্রতিস্থাপন করতে পারি f(x)সঙ্গে yএকটি অভিব্যক্তি সর্বত্র এবং কিছুই পরিবর্তন করতে হবে।

অনেক প্রোগ্রামিং ভাষায় যাকে ফাংশন (বা পদ্ধতি) বলা হয় তা হ'ল একটি কনস্ট্রাক্ট (কোডের টুকরো) যা সম্পাদন করা যায় কারণ:

  1. এটি গাণিতিক অর্থে একটি ফাংশন গণনা করে, যেমন প্রদত্ত ইনপুট মানগুলি, এটি একটি ফলাফল দেয়, বা
  2. এটি কিছু প্রভাব তৈরি করে, উদাহরণস্বরূপ স্ক্রিনে কিছু মুদ্রণ করে, একটি ডাটাবেসে মান পরিবর্তন করে, ক্ষেপণাস্ত্রগুলি প্রবর্তন করে, 10 সেকেন্ডের জন্য ঘুমায়, একটি এসএমএস প্রেরণ করে।

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

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

মনে রাখবেন যে

  1. কিছু পদ্ধতি তাদের রিটার্ন মান এবং পার্শ্ব-প্রতিক্রিয়া উভয়ের জন্য কার্যকর are
  2. কিছু পদ্ধতি কেবল একটি ফলাফলের মান গণনা করে এবং এর কোনও অন্যান্য প্রভাব নেই। এগুলিকে প্রায়শই বিশুদ্ধ ফাংশন বলা হয় কারণ তারা যা কিছু করে তা গাণিতিক অর্থে একটি ফাংশন গণনা করা।
  3. কিছু পদ্ধতি যেমন sleep()পাইথনে, কেবলমাত্র তাদের (পার্শ্ব প্রতিক্রিয়া) এর জন্য কার্যকর। এগুলি প্রায়শই এমন ক্রিয়াকলাপ হিসাবে মডেল করা হয় যা কোনও বিশেষ মান None, unitবা ()বা ... ফিরিয়ে দেয়, যা কেবল ইঙ্গিত দেয় যে গণনাটি সঠিকভাবে শেষ হয়েছে।

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

4

পার্শ্ব-প্রতিক্রিয়া হ'ল যখন কোনও ক্রিয়াকলাপ / অবজেক্টের উদ্দেশ্যে অভিযানের প্রভাব থাকে যা ব্যবহারের বাইরে থাকে।

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

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

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


ঠিক আছে, সুতরাং যেহেতু এখন সবাই উদাহরণ দিচ্ছেন, আমি মনে করি আমিও এটি করব;)

/*code is PL/SQL-styled pseudo-code because that's what's on my mind right now*/

g_some_global int := 0; --define a globally accessible variable somewhere.

function do_task_x(in_a in number) is
begin
    b := calculate_magic(in_a);
    if b mod 2 == 0 then
        g_some_global := g_some_global + b;
    end if;
    return (b * 2.3);
end;

ফাংশন do_task_xএকটি আছে প্রাথমিক কিছু গণনার ফলাফলের ফিরে প্রভাব, এবং একটি পার্শ্ব সম্ভবত একটি বিশ্বব্যাপী পরিবর্তনশীল পরিবর্তন প্রভাব।

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


2
আমি মনে করি না যে এটি একটি ভাল সার্বজনীন সংজ্ঞা। অনেক প্রোগ্রামার ইচ্ছাকৃতভাবে তাদের পার্শ্ব প্রতিক্রিয়ার জন্য কনস্ট্রাক্টগুলি ব্যবহার করে।
সিবি বেইলি

@ চার্লস: যথেষ্ট ফর্সা। সেক্ষেত্রে আপনি কীভাবে এটি সংজ্ঞায়িত করবেন?
হতাশ

2
আমি মনে করি @ ক্রিস্টোফার জনসনের স্পষ্ট সংজ্ঞা রয়েছে। প্রোগ্রাম বা এর পরিবেশের সেই অবস্থাকে পরিবর্তিত করে বা আউটপুট উত্পন্ন করার মতো একটি বাস্তব বিশ্ব প্রভাব তৈরি করে এমন কিছু।
সিবি বেইলি

@ চার্লস বেইলি: এটি সংজ্ঞা পরিবর্তন করে না। পার্শ্ব প্রতিক্রিয়া জন্য জিনিস ব্যবহার করা ভাল। যতক্ষণ আপনি বুঝতে পারছেন একটি পার্শ্ব-প্রতিক্রিয়া আছে। এটি এই সংজ্ঞা সম্পর্কে কোনও পরিবর্তন করে না।
এস .লট

1
@ এসলট: এই উত্তরের সংজ্ঞা (যেমন প্রথম অনুচ্ছেদ) এর মধ্যে এই ধারাটি অন্তর্ভুক্ত রয়েছে: "উদ্দেশ্যে ব্যবহারের বাইরে"। আমার মন্তব্যটি ন্যায্য ছিল বলে আমি মনে করি।
সিবি বেইলি

3

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

উইকিপিডিয়া থেকে - সাইড এফেক্ট

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

আরও সাধারণ শব্দে, একটি পার্শ্ব প্রতিক্রিয়া এমন কোনও প্রভাব যা কনস্ট্রাক্টের ডিজাইনারের ইচ্ছাকৃত প্রভাব নয়।

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

   public void SendBreakupTextMessage() {
        Messaging.send("I'm breaking up with you!")
   }

যদি এটি কোনও ক্রিয়াকলাপের উদ্দেশ্যে করা হয়, তবে কেবলমাত্র এটি করা উচিত শূন্যস্থান ফিরে আসা। যদি এটি পার্শ্ব-প্রতিক্রিয়া মুক্ত ছিল, এটি আসলে পাঠ্য বার্তাটি প্রেরণ করা উচিত নয়।

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

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

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

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

তাহলে, কেন এটি গুরুত্বপূর্ণ?

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

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

যেহেতু একটি প্রোগ্রামের আচরণ বোঝার, যুক্তি এবং নিয়ন্ত্রণ নিয়ন্ত্রণে সবচেয়ে সহায়ক হ'ল সমস্ত ইনপুটকে একসাথে এবং স্পষ্টভাবে গোষ্ঠীবদ্ধ করা এবং পাশাপাশি সমস্ত পার্শ্ব-প্রতিক্রিয়াকে একত্রিত করা এবং সুস্পষ্ট করা, সাধারণত লোকেরা যখন বলে তখন এটি সম্পর্কে পার্শ্ব-প্রভাব, খাঁটি, ইত্যাদি

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

পরিশেষে, আইডেম্পোটেন্ট মানে এই ফাংশনটিকে একই ইনপুটগুলির সাথে বহুবার কল করা (তারা যেখান থেকে আসে তা বিবেচনা করে না) সর্বদা একই প্রভাবের (পার্শ্ব প্রতিক্রিয়া বা না) ফলাফল করে।


আমি মনে করি পার্শ্ব প্রতিক্রিয়া ব্যাখ্যা করার সাথে একটি বড় সমস্যা হ'ল যতক্ষণ না আপনি ওকামল বা হাস্কেলের মতো কোনও ভাষা ব্যবহার না করেন ততক্ষণ পার্শ্ব-প্রতিক্রিয়া মুক্ত (প্রায়!) প্রোগ্রামিং সম্পর্কে যুক্তি দেওয়া খুব কঠিন হতে পারে।
জেমি স্ট্রাস 16

2

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

আমি যতদূর জানি, কোনও অভ্যন্তরীণ এবং বাহ্যিক পার্শ্ব প্রতিক্রিয়া নেই।


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

আমি মনে করি যে এমএস-বেসিক এবং কিউবাসিকের মতো প্রাক-গুঁই প্রোগ্রামিং ভাষার কিছু 'আপনি কেবলমাত্র' পার্শ্ব প্রতিক্রিয়া 'ভাষার কাছাকাছি থাকতে পারেন। এবং হ্যাঁ আপনার অভ্যন্তরীণ এবং বাহ্যিক উভয় পার্শ্ব প্রতিক্রিয়া থাকতে পারে।
জেমস কে

0

এখানে একটি সহজ উদাহরণ:

int _totalWrites;
void Write(string message)
{
    // Invoking this function has the side effect of 
    // incrementing the value of _totalWrites.
    _totalWrites++;
    Debug.Write(message);
}

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


তবে যদি বার্তাটি রেফারেন্স হিসাবে আসে এবং আপনি আপনার পদ্ধতিতে বার্তা পরিবর্তন করেন যা পার্শ্ব প্রতিক্রিয়া হতে পারে। আমি কি সঠিক?
আমির রেজায়ে

অভিব্যক্তিটি x++পরিবর্তনশীলকে পরিবর্তিত করে xএমন বিষয়টি সাধারণত একটি পার্শ্ব প্রতিক্রিয়া হিসাবে বিবেচিত হয়। অভিব্যক্তির সেই মানটি প্রাক-বর্ধিত মান x; এটি হ'ল অভিব্যক্তির পার্শ্ব প্রতিক্রিয়ার অংশ।
সিবি বেইলি

@ চার্লস - আমি সম্মত হই, যদিও মূল উদাহরণটি বর্তমানের মতো পরিষ্কার ছিল না।
কেওসপ্যান্ডিয়ন

@ আমির - ঠিক আছে, এটি ভাষার উপর নির্ভর করে। যদি এটি সি # হয় তবে এটি কোনও পার্শ্ব প্রতিক্রিয়া হিসাবে বিবেচিত হবে না।
কেওসপ্যান্ডিয়ন

@ চাওসপ্যান্ডিয়ন: ব্যক্তিগতভাবে, আমি একমত নই। আসল উদাহরণটি অনেক সহজ এবং পরিষ্কার ছিল।
সিবি বেইলি

-2

পার্শ্ব প্রতিক্রিয়া হ'ল কোডগুলিতে এমন কিছু ঘটে যা স্পষ্টতই আপাত হয় না।

উদাহরণস্বরূপ বলুন যে আপনি এই বর্গ আছে

public class ContrivedRandomGenerator {
   public int Seed { get; set; }

   public int GetRandomValue()
   {
      Random(Seed);
      Seed++;
   }
}

আপনি যখন প্রথম দিকে ক্লাস তৈরি করেন আপনি এটিকে একটি বীজ দিন।

var randomGenerator = new ContrivedRandomGenerator();
randomGenerator.Seed = 15;
randomGenerator.GetRandomValue();

আপনি ইন্টার্নালগুলি জানেন না, আপনি কেবল একটি এলোমেলো মান পাবেন এবং আপনি এলোমেলো জেনারেটরটি আশা করবেন। তবে এখনও 15 হবে বলে মনে করেন ... তবে তা তা নয়।

ফাংশন কলটিতে বীজের মান পরিবর্তন করার পার্শ্ব প্রতিক্রিয়া ছিল।


10
পার্শ্ব প্রতিক্রিয়াগুলি গোপন করতে হবে না। আপনি কথাবার্তা বা চিকিত্সা ব্যবহারের কথা ভাবছেন; প্রোগ্রামিংয়ে, একটি পার্শ্ব প্রতিক্রিয়া কেবল কিছু রাষ্ট্রকে সংশোধন করে।
অ্যারোনআউট

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

পার্শ্ব প্রতিক্রিয়া হ'ল নন ফাংশন (অর্থাত্ পদ্ধতিগুলি) কোনও কাজ কীভাবে সম্পন্ন করে। এক্স = 1; এক্স = ওয়াই (10) দুটি খাঁটি ফাংশন। আপনি যখন "x = যাই হোক না কেন" ক্ষেত্রের বাইরে চলে যান, পর্দায় আউটপুট লিখতে হবে কিনা | ড্রাইভ | প্রিন্টার | নেতৃত্বদান করুন বা ইনপুট "x = y" ফর্ম্যাটটিকে বাইরে রেখে বা কেবল একটি জিনিস থেকে অন্যটির পরিবর্তনের মান পরিবর্তন করতে পারেন , এটি একটি পার্শ্ব প্রতিক্রিয়া।
জেমস কে

আমি মনে করি যে 'লুকানো' দ্বারা তার অর্থ অনর্থক। X = f (y, z) এর মতো x কে y এবং z এর উপর ভিত্তি করে ধরে নেওয়া যেতে পারে। যদিও প্রো (এক্স, ওয়াই, জেড) আপনাকে যা চলছে সে সম্পর্কে আপনাকে কিছুই বলে না। প্রতিটি পরিবর্তনযোগ্য, বা কিছুই পরিবর্তন করা যেতে পারে। প্রোক এফের সাথে এনালগ হতে পারে, বা সম্পূর্ণ সম্পর্কিত নয়। খাঁটি ফাংশনটির একক উত্তর থাকে: 'x'। এর বাইরে যান, এটি একটি পার্শ্ব প্রতিক্রিয়া। সম্পূর্ণ উদ্দেশ্য, কিন্তু পার্শ্ব প্রতিক্রিয়া।
জেমস কে

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