+1 امتیاز
قبل در برنامه نویسی توسط (426 امتیاز)
ویرایش شده قبل توسط
اینکه یک متغییر مقدارش عوض بشه و یا اینکه از حلقه for به سبک قدیمی استفاده کنیم که یک شمارنده داره که تویه هر iteration داره تغییر میکنه و یا استفاده از print و.....

اینا چه مشکلی دارن که باید ازشون دوری کرد؟

1 پاسخ

+1 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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

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

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

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

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

سوالات مشابه

0 امتیاز
1 پاسخ 1.2هزار بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط javad75 (42 امتیاز)
0 امتیاز
0 پاسخ 250 بازدید
0 امتیاز
1 پاسخ 519 بازدید
0 امتیاز
0 پاسخ 354 بازدید
0 امتیاز
1 پاسخ 331 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 448 بازدید
+1 امتیاز
1 پاسخ 508 بازدید
0 امتیاز
1 پاسخ 559 بازدید
...