sunyboy
09-23-2008, 12:51 AM
این مقاله حاصل ترجمه ای از کتاب F# نوشته دون سیم هست که من برای ارائه دانشگاهی استفاده کردم و از اونجا که هیچ منبع فارسی زبانی در باره این زبان وجود نداره تصمیم گرفتم اون رو در اختیار همه قرار بدم
مقدمه
F# یک زبان برنامه نیسی چند مدله است ک در چهارچوب .Net فعالیت میکند و شامل برنامه نویسی تابعی و برنامه نویسی شی گرای دستوری میباشد. F# شاخه ای از ML بوده و بسیار با OCAML سازگار است.F# در ابتدا توسط دون سیم در مرکز تحقیقات مایکروسافت ابداع شد اما در حال حاضر توسط گروه تسعه دهنده ماکروسافت ادامه داده میشود و به عنوان یک زبان کاملا پشتیبانی شده در محیطهای .Net و Virtual Studio ارائه میگردد.
مقدمه مقاله
این بخش مقدماتی میتواند به بسیاری از سوالات شما درباره F# و برنامه نویسی تابعی(Functional) پاسخ دهد.
برنامه نویسی تابعی چیست ؟
برنامه نویسی تابعی از میان سه مدل برنامه نویسی عمده قدیمیترین آنهاست. اولین زبان برنامه نویسی تابعی APL بود که در سال 1955 تقریبا یک سال قبل از فورترن ابداع شد. دومین برنامه Lisp بود که در سال 58 (یعنی یک سال قبل از کوبول) ارائه شد. هر دو این زبانها (کوبول و فورترن) زبانهای دستوری هستند و موفقیت آنها در حوزه های تجارت و علوم باعث شد که مدل برنامه نویسی دستوری مدلی غالب برای مدت 30 سال باشد.با به بازار آمدن مدل شی گرا در دهه 70 و پیشرفت تدریجی زبانهای برنامه نویسی شی گرا ، پس از آن این نوع برنامه نویسی تا امروز محبوب ترین مدل میباشد. با توجه به توسعه پایدار و همیشگی زبانهای تابعی مانند OCAML , Haskel و... که برای برنامه نویسی دنیای حقیقی بیشترین کاربرد را دارند. بعد از 1950 همچنان زبان برنامه نویسی تابعی یک زبان آکادمیک و در سطح دانشگاهها محسوب میشد و موقعیت تجاری نداشت. اولین موفقیت تجاری زبانهای دستوری باعث شد تا برای چند دهه این زبانها به عنوان زبان غالب باقی بمانند ، زبانهای شی گرا تنها زمانی که نیاز برای حل مسایل و مشکلات پیشرفته تر کامپیوتری احساس شد به شهرت رسیدند.امروزه وجود برنامه نویسی تابعی برای حل مشکلاتی پیچیده تر اثبات شده و میتوان با آن برنامه های سده تر را نیز به وجود آورد. برنامه نویسی تابعی خالص تمام برنامه ها را به صورت مجموعه ای از توابع که میتوانند آرگومانهایی را دیافت و مقادیری را برگردانند نگاه میکند و بر خلاف مدلهای شی گرا و دستوری اثرات جانبی ندارد و به جای حلقه تکرار از حلقه های بازگشتی استفاده میکند.
توابع در برنامه نویسی تابعی بسیار شبیه توابع ریاضی هستند زیرا آنها وضعیت برنامه را تغییر نمیدهند. در ساده ترین صورت وقتی که یک مقدار به شناسه اختصاص داده شد این مقدار تغییر نمیکند. توابع خود باعث تغییر مقادیر مولفه ها نشده و نتایج آن تابع با مقادیر کاملا جدید برگردانده میشود.در پیاده سازی عمده این نوع برنامه ها وقتی مقداری به یک مکان در حافظه افزوده شد ، تغییر نمیکند و برای بدست آوردن نتایج توابع مقادیر راکپی کرده و آن کپی ها را تغییر میدهند میتوان از مقادیر اصلی در توابع دیگر استفاده کرد و در زمانی که به آنها نیازی نبود آنها را دور انداخت که این مسئله همان موردیست که باعث به وجود آمدن مجموعه سطل زباله گردیده.اساس ریاضی برنامه نویسی تابعی صرف جالب است بنابراین زبانهای تابعی روشهای زیبا و منحصر به فردی را برای بسیاری از مسایل کامپیوتری ایجاد میکنند.
طبیعت بی دستور بودن و استفاده از توابع بازگشتی زبانهای دیگر را برای برخی از فهالیتهای عادی مناسبتر جلوه میدهد با این حال یکی از مهمترین خصوصیات F# این است که میتواند از مدلهای دیگر برنامه نویسی نیز استفاده کند و حتی برای حل مشکلات خاص آنها را به بهترین شکل با م ترکیب کند.
چرا برنامه نویسی تابعی مهم است ؟
وقتی افرا به برنامه نویسی تابعی فکر میکنند آنها بی دستور بودن را بعنوان ضعف در نظر میگیرند و فایده های آن را در نظر نمیگیرند. فرد ممکن است بگوید که با توجه به این که زبانهای دستوری 90% زبانهای بازار را تشکیل میدهد و به دلیل اینکه برنامه نویسی تابعی به این صورت نیست و همچنین با توجه به اینکه تعاریفی در ابتدای برنامه نویسی تابعی به صورت معمول نمیاید پس این نوع از برنامه کاملا کوتاه تر میباشد. افراد با توجه به این گفته ها جذب این نوع زبان بازگشتی بدون دستور که دنیای کاملا متفاوتی دارد نمیشوند. جان هیوز در مقاله کلاسه خود به نام "چرا زبانهاب برنامه نویسی تابعی مهم هستند" میگوید :
"زبانهای برنامه نویسی تابعی شبیه کشیشان قرون وسطی میباشند
آنها لذت زندگی را از خود میگیرند تا به صورت خوب و پرهیزکار
جلوه کنند"
برای فهمیدن برتری های این نوع زبان باید بینید که اجازه استفاده از چه چیزهایی را خواهید داشت. برای مثال برنامه نویسی تابعی به شما اجازه برخورد با تبع را به صورت جداگانه داده و مقادیر توابع را به توابع دیگر ارجاع میدهد.در نگاه اول ممکن است این قابلیت مهم جلوه نکند اما روش برخورد این زبانها با این مسئله بسیار قابل توجه است و تفاوت بین داده و توابعی را که خیلی مسایل وابسته به آنها میباشند را از میان بر میدارد.
برنامه نویسی تابعی کوتاه تر و دسته بندی شده تر از سایر انواع است همچنین اندازه این برنامه ها و قابلیت خوانایی آنها حتی از زبانهای شی گرا نیز بیشتر است.
علاوه بر برخورد با تابع از طریق مقادیر آنها زبانهای تابعی ویژگیهای دیگری دارند که از ریاضیات گرفته شده و علی الخصوص در زبانهای دستوری مشاهده نمیشوند. برای مثال معمولا زبانهای برنامه نویسی تابعی توابع کولیر را ارائه میکنند که در هنگاه ارسال آرگومانها به توابع اگر تمام آرگومانها ارسال نشوند تابع برای دریافت دیگر مولف ها منتظر میماند. همچنین برای زبانهای برنامه نویسی تابعی این امکان وجود دارد که از انواع سیستمها در سطوح مختلف(قدرت یا وزن) استفاده کند یعنی سیستمهایی که در آنها قدرت نوع بر وزن آن برتری دارد که این مسئله باعث بهبود عملکرد تصحیح برنامه بدون تلاش زیاد میگردد.علاوه بر این یک تابع ممکن است چندین مقدار را برگرداند که صدازنی توابع به راحتی انجام میگیرید.
مقدمه
F# یک زبان برنامه نیسی چند مدله است ک در چهارچوب .Net فعالیت میکند و شامل برنامه نویسی تابعی و برنامه نویسی شی گرای دستوری میباشد. F# شاخه ای از ML بوده و بسیار با OCAML سازگار است.F# در ابتدا توسط دون سیم در مرکز تحقیقات مایکروسافت ابداع شد اما در حال حاضر توسط گروه تسعه دهنده ماکروسافت ادامه داده میشود و به عنوان یک زبان کاملا پشتیبانی شده در محیطهای .Net و Virtual Studio ارائه میگردد.
مقدمه مقاله
این بخش مقدماتی میتواند به بسیاری از سوالات شما درباره F# و برنامه نویسی تابعی(Functional) پاسخ دهد.
برنامه نویسی تابعی چیست ؟
برنامه نویسی تابعی از میان سه مدل برنامه نویسی عمده قدیمیترین آنهاست. اولین زبان برنامه نویسی تابعی APL بود که در سال 1955 تقریبا یک سال قبل از فورترن ابداع شد. دومین برنامه Lisp بود که در سال 58 (یعنی یک سال قبل از کوبول) ارائه شد. هر دو این زبانها (کوبول و فورترن) زبانهای دستوری هستند و موفقیت آنها در حوزه های تجارت و علوم باعث شد که مدل برنامه نویسی دستوری مدلی غالب برای مدت 30 سال باشد.با به بازار آمدن مدل شی گرا در دهه 70 و پیشرفت تدریجی زبانهای برنامه نویسی شی گرا ، پس از آن این نوع برنامه نویسی تا امروز محبوب ترین مدل میباشد. با توجه به توسعه پایدار و همیشگی زبانهای تابعی مانند OCAML , Haskel و... که برای برنامه نویسی دنیای حقیقی بیشترین کاربرد را دارند. بعد از 1950 همچنان زبان برنامه نویسی تابعی یک زبان آکادمیک و در سطح دانشگاهها محسوب میشد و موقعیت تجاری نداشت. اولین موفقیت تجاری زبانهای دستوری باعث شد تا برای چند دهه این زبانها به عنوان زبان غالب باقی بمانند ، زبانهای شی گرا تنها زمانی که نیاز برای حل مسایل و مشکلات پیشرفته تر کامپیوتری احساس شد به شهرت رسیدند.امروزه وجود برنامه نویسی تابعی برای حل مشکلاتی پیچیده تر اثبات شده و میتوان با آن برنامه های سده تر را نیز به وجود آورد. برنامه نویسی تابعی خالص تمام برنامه ها را به صورت مجموعه ای از توابع که میتوانند آرگومانهایی را دیافت و مقادیری را برگردانند نگاه میکند و بر خلاف مدلهای شی گرا و دستوری اثرات جانبی ندارد و به جای حلقه تکرار از حلقه های بازگشتی استفاده میکند.
توابع در برنامه نویسی تابعی بسیار شبیه توابع ریاضی هستند زیرا آنها وضعیت برنامه را تغییر نمیدهند. در ساده ترین صورت وقتی که یک مقدار به شناسه اختصاص داده شد این مقدار تغییر نمیکند. توابع خود باعث تغییر مقادیر مولفه ها نشده و نتایج آن تابع با مقادیر کاملا جدید برگردانده میشود.در پیاده سازی عمده این نوع برنامه ها وقتی مقداری به یک مکان در حافظه افزوده شد ، تغییر نمیکند و برای بدست آوردن نتایج توابع مقادیر راکپی کرده و آن کپی ها را تغییر میدهند میتوان از مقادیر اصلی در توابع دیگر استفاده کرد و در زمانی که به آنها نیازی نبود آنها را دور انداخت که این مسئله همان موردیست که باعث به وجود آمدن مجموعه سطل زباله گردیده.اساس ریاضی برنامه نویسی تابعی صرف جالب است بنابراین زبانهای تابعی روشهای زیبا و منحصر به فردی را برای بسیاری از مسایل کامپیوتری ایجاد میکنند.
طبیعت بی دستور بودن و استفاده از توابع بازگشتی زبانهای دیگر را برای برخی از فهالیتهای عادی مناسبتر جلوه میدهد با این حال یکی از مهمترین خصوصیات F# این است که میتواند از مدلهای دیگر برنامه نویسی نیز استفاده کند و حتی برای حل مشکلات خاص آنها را به بهترین شکل با م ترکیب کند.
چرا برنامه نویسی تابعی مهم است ؟
وقتی افرا به برنامه نویسی تابعی فکر میکنند آنها بی دستور بودن را بعنوان ضعف در نظر میگیرند و فایده های آن را در نظر نمیگیرند. فرد ممکن است بگوید که با توجه به این که زبانهای دستوری 90% زبانهای بازار را تشکیل میدهد و به دلیل اینکه برنامه نویسی تابعی به این صورت نیست و همچنین با توجه به اینکه تعاریفی در ابتدای برنامه نویسی تابعی به صورت معمول نمیاید پس این نوع از برنامه کاملا کوتاه تر میباشد. افراد با توجه به این گفته ها جذب این نوع زبان بازگشتی بدون دستور که دنیای کاملا متفاوتی دارد نمیشوند. جان هیوز در مقاله کلاسه خود به نام "چرا زبانهاب برنامه نویسی تابعی مهم هستند" میگوید :
"زبانهای برنامه نویسی تابعی شبیه کشیشان قرون وسطی میباشند
آنها لذت زندگی را از خود میگیرند تا به صورت خوب و پرهیزکار
جلوه کنند"
برای فهمیدن برتری های این نوع زبان باید بینید که اجازه استفاده از چه چیزهایی را خواهید داشت. برای مثال برنامه نویسی تابعی به شما اجازه برخورد با تبع را به صورت جداگانه داده و مقادیر توابع را به توابع دیگر ارجاع میدهد.در نگاه اول ممکن است این قابلیت مهم جلوه نکند اما روش برخورد این زبانها با این مسئله بسیار قابل توجه است و تفاوت بین داده و توابعی را که خیلی مسایل وابسته به آنها میباشند را از میان بر میدارد.
برنامه نویسی تابعی کوتاه تر و دسته بندی شده تر از سایر انواع است همچنین اندازه این برنامه ها و قابلیت خوانایی آنها حتی از زبانهای شی گرا نیز بیشتر است.
علاوه بر برخورد با تابع از طریق مقادیر آنها زبانهای تابعی ویژگیهای دیگری دارند که از ریاضیات گرفته شده و علی الخصوص در زبانهای دستوری مشاهده نمیشوند. برای مثال معمولا زبانهای برنامه نویسی تابعی توابع کولیر را ارائه میکنند که در هنگاه ارسال آرگومانها به توابع اگر تمام آرگومانها ارسال نشوند تابع برای دریافت دیگر مولف ها منتظر میماند. همچنین برای زبانهای برنامه نویسی تابعی این امکان وجود دارد که از انواع سیستمها در سطوح مختلف(قدرت یا وزن) استفاده کند یعنی سیستمهایی که در آنها قدرت نوع بر وزن آن برتری دارد که این مسئله باعث بهبود عملکرد تصحیح برنامه بدون تلاش زیاد میگردد.علاوه بر این یک تابع ممکن است چندین مقدار را برگرداند که صدازنی توابع به راحتی انجام میگیرید.