(۰۷ آذر ۱۳۹۳ ۰۱:۰۸ ق.ظ)ldns0098 نوشته شده توسط: (06 آذر ۱۳۹۳ ۱۱:۰۲ ب.ظ)blackhalo1989 نوشته شده توسط: یه زمانی یه مطالعاتی راجع به زبان های مختلف داشتم. اینها چیزایی هست که یادم مونده. الزاما ممکنه درست نباشه البته.
ساید افکت یعنی هر زمانی یه سری ورودی خاص به یه تابع بدید یه سری خروجی خاص رو تحویل بگیرید. در یه زبان غیر تابعی، خروجی یک تابع تابعی از ورودی ها + وضعیت هست. مثلا ممکنه یه تابع داشته باشید که خروجیش به مقدار یه متغیر global وابسته باشه. در این صورت ممکنه یه ورودی خاص در زمان های مختلف خروجی های متفاوتی داشته باشه. اگر نفهدمیدید مفهوم ساید افکت رو بگید تا مثال واقعی بزنم.
وقتی ساید افکت حذف شد میتونید خیلی راحت برنامه رو concurrent کنید چون دیگه احتیاجی به رعایت انحصار متقابل نیست.
یعنی شما میگین ساید افکت تو زبانهای تابعی رخ نمیده؟!
والا اصل سوال اصن این بود که میپرسید اگه زبان روالی باشه، چه وِیژگی ای داره؟ و پاسخ این بود که هرگز ساید افکت رخ نمیده، من هم حساس شدم که چرایی این موضوعو پاسخ بدم. البته میشه حفظش کرد! ولی ترجیح میدم بفهمم چرا
زبان هایی که تابعی خالص باشن (pure functional) ساید افکت ندارن.
زبان های روالی ساید افکت دارن.
چیزی که تو ذهنمه ولی مطمئن نیستم اینه که یه زبان تابعی خالص اصلا متغیر نداره. بنابراین اصلا نمیتونه حالت رو نگه داره پس نمیتونه ساید افکت هم داشته باشه.
حفظ کردن این مفاهیم مثل رویکرد حرفه و فن دوره راهنماییه که الان من چیزی ازش یادم نمونده. این مسایل رو باید واقعا تو عمل دید نه اینکه حفظ کرد. مثلا باید یه مدت با یه زبان تابعی خالص مثل هسکل کار کرد تا بفهمید منظور از ساید افکت و حالت چیه و چطور میشه برنامه رو همزمان کرد.