منظور از side effect چیه و چرا در functional programming ازش دوری میکنن؟

+1 رأی
میانگین بازدید روزانه 3.162 بازدید
اینکه یک متغییر مقدارش عوض بشه و یا اینکه از حلقه for به سبک قدیمی استفاده کنیم که یک شمارنده داره که تویه هر iteration داره تغییر میکنه و یا استفاده از print و.....

اینا چه مشکلی دارن که باید ازشون دوری کرد؟
سوال 2 هفته قبل در تالار برنامه نویسی توسط یوری (314 امتیاز)
ویرایش 2 هفته قبل توسط Saeed Zarinfam

1 جواب

+1 رأی
 
بهترین جواب

در برنامه نویسی فانکشنال همه چی حول تابع ها میچرخه و تابع یا همون function اصلی ترین ترین چیز در این سبک برنامه نویسیه. توابع در برنامه نویسی فانکشنال باید خصوصیات زیادی داشته باشن که یکیش نداشتن side effect که این یعنی تابع فقط باید درون context خودش اثر بزاره و هیچ تاثیری بر دنیای بیرون خودش نداشته باشه. حالا context یا دنیای درون خودش یعنی کجا: خیلی سادس یعنی از اول شروع تابع تا خط آخرش. خب دنیای خارج هم مشخص یعنی بیرون تابع. 

مثلا وقتی یک متد در یک کلاس جاوا مقدار یک فیلد در سطح کلاس رو تغییر میده side effect هستش یا اینکه وقتی یک متد exception پرت میکنه اینم side effect حساب میشه.

حالا اینه اگه متدها در برنامه نویسی فانکشنال side effect نداشته چه سودی داره بحثش مفصله ولی بصورت خلاصه برنامه maintainable تر میشه و خطای برنامه نویسی کمتری تولید میشه. تست برنامه راحتتر میشه یا اینکه برنامه تست پذیرتر میشه و ...

اگر به برنامه نویسی فانکشنال علاقه دارید شدیدا توصیه میکنم این مقاله رو بخونید.

جواب 2 هفته قبل توسط Saeed Zarinfam (1,435 امتیاز)
انتخاب شده در 2 هفته قبل توسط یوری
سلام مرسی
جواب خوب و قابل درکی دادین ولی یک سوال : چرا به یه چیزی مثل for گیر داده میشه که چون در هر iteration ش یک مقدار تغییر میکنه پس side effect داره در حالی که با توضیحی که دادین این مقدار فقط تویه code block همون for داره تغییر میکنه پس تغییری تویه context بیرونی نمیزاره؟
ممنونم از وقتی که میزارین
نه حلقه for خودش ساید افکت نیست ولی چون برای روش برنامه نویسی imperative درست شده در برنامه نویسی فانکشنال توصیه نمیشه چون حواست نباشه راحت باهاش ساید افکت تولید می کنی و مورد دیگه اینکه از استایل برنامه نویسی فانکشنال توصیه میکنه بجای for از توابع بازگشتی یا higher order function  ها استفاده کنید.

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.33573 بازدید
سوال 4 سال قبل در تالار برنامه نویسی توسط javad75 (42 امتیاز)
0 رأی
0 جواب میانگین بازدید روزانه 0.1645 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.14176 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.12169 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.23118 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.2163 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 1.3836 بازدید
سوال 3 هفته قبل در تالار برنامه نویسی توسط Saeed Zarinfam (1,435 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.14116 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.0879 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0896 بازدید
کانال تلگرام جواب یاب
...