فانکشن های ریاضی در مقایسه با فانکشن های برنامه نویسی

فانکشن های(توابع) ریاضی برای ریاضی دانان بسیار ساده است. این فانکشن ها کاملا منطقی هستند. شیوه ی عملکرد همه ی آنها همواره یکسان بوده و هیچ استثنایی وجود ندارد. مجموعه ای از داده های ورودی به مجموعه ای از داده های خروجی منتهی میشود. بعنوان مثال مربع عدد پنج همواره بیست و پنج میشود، هر عددی جز بیست و پنج اشتباه است.

فانکشن های یک برنامه نویس

زندگی یک برنامه ریز زندگی ساده ای نیست. ما برنامه نویسان فانکشنن هایی خلق میکنیم که از لحاظ علم ریاضی فانکشن های واقعی محسوب نمیشوند.
ما می توانیم فانکشنی خلق کنیم که با داده ی ورودی 5 ،نتیجه بیست و شش شود درحالیکه انتظار داریم حاصل آن عدد بیست و پنج باشد. چرا که در علم ریاضی مربع عدد پنج همواره بیست و پنج است نه هیچ عدد دیگری.برخی فانکشن ها موجب میشوند برنامه هیچ نتیجه ای نداشته باشد، مشکل وحشتناکی که دربرخی کانتکست ها رخ میدهد. با ترکیب این فاکنشن ها تعاملات بین هر تکه در سیستم پیچیده تر میشود. ممکن است امروز یک برنامه در یک سیستم اجرایی بی عیب و نقص کار کند اما روز بعد توسط کامپوننتی و بدون هیچ هشداری کاملا متوقف شود. این حالت اغلب
Out of Memory killer نامیده میشود. اما علت رخداد این حالت چیست؟ به احتمال زیاد برنامه ی دیگری در سیستم ،با برخی از فانکشن های غیر ریاضی متعلق به خودش ،دچار مشکل شده و درنتیجه از کل حافظه ی در دسترس استفاده کرده است.

فانکشن های خالص(
Pure)

تصور اینکه گاهی اوقات برنامه های ساخته شده ی متشکل از فانکشن ها ، دچار نقص شده یا بدرستی کار نمیکنند طاقت فرساست. راه حل این مشکل در "برنامه ریزی فانکشنال" است که فانکشن های خالص نامیده می شوند. طبق معمول برای نامگذاری باید به "فانکشن" اسم دیگری اضافه شود تا دوباره شکوه سابقش یعنی همان قابلیت پیش بینی را بدست آورد.
فانکشن های خالص فانکشن هایی هستند که در تعریف آنها هیچ عوارض جانبی وجود ندارد. درواقع بطور شگفت آوری علم ریاضی به برنامه ریزی بازگشته است.

خالص بودن کافی نیست

اما چطور می توانیم از خالص بودن این فانکشن ها مطمئن باشیم؟ دراینجا باید دشواری را به سطح جدیدی ارتقا داده و درعین حال بپذیریم چیزی وجود دارد که احتمالا غیرممکن است.

فانکشن های جامع((Total

فانکشن جامع درواقع همان فانکشن خالص است، بعلاوه ی یک مشخصه ی دیگر که نشان میدهد برای همه ی داده های ورودی ممکن ،نتیجه ای وجود دارد. یک فانکشن جزیی ((partial می تواند مواقعی "خالص" باشد اما نه همیشه، این فانکشن های باید خارج از ظرفیت خود همواره یک ورودی دریافت کنند.

فانکشن های Halting

مردی با لباس آزمایشگاه دستگاهی را روی میز استیل زیر نور گالری قرار داد. او برای وصل سیم برق دستگاه که درست روبروی حضار قرار داشت به جمعیت پشت کرد. میان جمعیت همهمه ای بپا شد و لحظه ای بعد سکوت در میان آنها حکمفرما شد زیرا فرد نامبرده رو به جمعیت کرده و اعلام کرد "خانم ها، آقایان ما در اینجا جمع شدیم تا قابلیت استفاده ی این دستگاه را ارزیابی کرده و به پاسخ سوالی که قطعا برای همه ی ما مهم است دست یابیم....."
قسمت ساده و آسان مشکل
halting این است که میدانیم این مشکل وجود دارد و درعین حال ثابت شده است که این مشکل غیرقابل حل است. شخصی بنام Alan Turing اثبات کرده است برای آنالیز یک برنامه برای تعیین اینکه آیا متوقف میشود یا نه ،هیچ الگوریتمی با هدف کلی وجود ندارد. اما این مساله برای یک برنامه ریز چه معنایی دارد؟ آنها باید کار خود را ساده کنند بطوریکه بتوانند از الگوریتم های هدفمند و شناخته شده برای بهبود و تایید کار خود استفاده کنند.

فانکشن های آزمایشی

بغیر از فانکشن هایی که شما برای تکمیل کارهای مهم خلق میکنید یکی از بینظیرترین کارهایی که کامپیوترها می توانند انجام دهند فانکشن هایی هستند که بر رفتارهای فانکشن های دیگر نظارت کرده و از آنها پشتیبانی میکنند تا همانگونه کار کنند که شما انتظار دارید. با اجرای این تست ها اطمینان می یابید که هیچ مشکلی رخ نخواهد داد.

بهترین کاری که هر برنامه ریز می تواند انجام دهد این است که فانکشن ها را کوچک، خالص و جامع کند. و از سایرفانکشن ها برای خودکار کردن و ارزیابی این فانکشن ها استفاده کرده تا اطمینان یابد آنها همانطور که انتظار دارد کار میکنند. و درصورتیکه فانکشنی را نمیفهمد باید آنرا به تکه های کوچکتر تقسیم کرده تا کاملا مطمئن شود هیچ اشتباهی رخ نخواهد داد.
 

فانکشن های ریاضی در مقایسه با فانکشن های برنامه نویسی
شنبه 11 شهریور 1396 - 12:13:19 250 آخرین بازدید : پنجشنبه 2 آذر 1396 - 10:59:41 0
*
*