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

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

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

1 جواب

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

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

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

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

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

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

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

0 رأی
1 جواب میانگین بازدید روزانه 0.33594 بازدید
سوال 4 سال قبل در تالار برنامه نویسی توسط javad75 (42 امتیاز)
0 رأی
0 جواب میانگین بازدید روزانه 0.1554 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.14186 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.13188 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.22129 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.1870 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.4349 بازدید
سوال 3 ماه قبل در تالار برنامه نویسی توسط Saeed Zarinfam (239 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.14124 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.0885 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.08106 بازدید
کانال تلگرام جواب یاب
...