# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > F#‎‎ > مقاله: آموزش زبان برنامه نویسی #F

## Todco.ir

در این تاپیک در خدمت دوستان عزیز هستیم با آموزش زبان برنامه نویسی F#‎‎‎
سعی کردم فهرست مطالب را طوری بچینم که هم مفید برای دوستان علاقه مند به یادگیری این زبان برنامه نویسی قدرتمند باشد و هم قابل استفاده برای کنفرانس درون دانشگاه ها باشد.
فهرست مطالب:
پیدایش زبان برنامه نویسی F#‎‎‎
آشنایی با زبان برنامه نویسی F#‎‎‎
خصوصیات زبان برنامه نویسی  F#‎‎‎
علت نیاز به این زبان برنامه نویسی
بحث ها و سمینارهای برگزار شده تا به امروز درباره این زبان
معرفی ابزار
نحوه کاربرد و نحوه کد نویسی
مقایسه کاربردی با زبان های برنامه نویسی قدرتمند
نمونه برنامه های ساده
نتیجه گیری
در حین آموزش چون بیشتر منابع انگلیسی هستند امکان زیاد شدن مطالب وجود دارد.
خب حالا اگه دوستان علاقه مند به یادگیری این اموزش هستند که شروع کنیم.

----------


## Todco.ir

مقدمه: 
F#‎‎‎‎   نوعی زبان برنامه نویسی تابعی برای دات نت است که اجازه می دهد تا شما را به نوشتن کد ساده برای حل مشکلات و برنامه های پیچیده بهترین راه حل را بیابید.
برنامه نویسی تابعی مدت زیادی است که مورد استفاده محققان، دانشجویان و برنامه نویسان برای سادگی و قدرت بیان آن قرار گرفته است.
کاربرد برنامه نویسی تابعی پررونق است: برخی از ساختارهای زبان تابعی که با زبانهایی مانند C#‎‎‎‎، پایتون، و ویژوال بیسیک یکپارچه و تلفیق شده اند و اکنون استخر قابل توجهی از تجربه و تخصص در نرم افزار عملگرایانه از تکنیک های برنامه نویسی تابعی را ایجاد کرده اند، همچنین شواهد قوی وجود دارد که برنامه نویسی تابعی بهره وری قابل توجهی در زمینه های کاربرد مهم از جمله دسترسی به داده ها، مدل سازی مالی، تجزیه و تحلیل آماری، یادگیری ماشین، تایید نرم افزار، و بیو انفورماتیک را ارائه می دهد. 
اخیرا، برنامه نویسی تابعی، بخشی از افزایش از مدل های برنامه نویسی اعلانی، به ویژه در پرس و جو تطبیق داده، همزمان، راکتیو، و حوزه های برنامه نویسی موازی است.
 F#‎‎‎‎ از بسیاری از زبان های تابعی که در آن پذیرای ضروری و شی گرا (OOP) برنامه نویسی متفاوت است.
این سرویس همچنین یک لینک از دست رفته بین زبانهای کامپایل شده و پویا، ترکیب اصطلاحات و سبک های برنامه نویسی نمونه از زبان های پویا با عملکرد و استحکام از یک زبان کامپایل شده است.
زبان برنامه نویسی  F#‎‎‎‎ این اجازه را به شما می دهد تا بهترین و سازنده ترین جنبه های از این پارادایم ها و ترکیب آنها را در حالی که هنوز قرار دادن تاکید اصلی بر روی تکنیک های برنامه نویسی تابعی است تبدیل شوید.
F#‎‎‎‎ در حال حاضر یکی از زبانهای برنامه نویسی از مایکروسافت است که از طریق ابزار مانند ویژوال استودیو پیشتیبانی می شود.
برنامه نویسی تابعی در حال حاضر یک انتخاب مناسب برای جریان اصلی و بسیاری از فعالیت های برنامه نویسی حرفه ای است.

*پیدایش زبان F#‎‎*
F#‎‎ در سال 2002 آغاز شد، زمانی که Don Syme و دیگران در تحقیقات مایکروسافت تصمیم گرفتند تا اطمینان حاصل شود که از روش ML (Meta Language) میتوانند زبانی عملی با کیفیت بالا ایجاد کنند.
 : ML‏ یک زبان برنامه‌نویسی تابعی همه منظوره است که توسط رابین میلنر و همکاران در اواخر دهه ۱۹۷۰ در دانشگاه ادینبورگ توسعه یافت. نحو این زبان از زبان برنامه‌نویسی آی‌سوییم الهام گرفته است.
کلمه ML از فوق زبان (Meta Language) گرفته شده است. ام‌ال برای بهبود بخشیدن به رویه اثبات در قضیه LFC طراحی شده است.
F#‎‎‎ محصول تیم تحقیقاتی کمبریج مایکروسافت به سرپرستی Don Syme ، پورتی از زبان OCaml برای.NET framework است.
 این زبان شی گرا ، تابعی و استاتیک است. خود OCaml از Caml و ان هم از ML مشتق شده اند. خانواده ی ML شامل دو زیر شاخه ی SML و Caml است که موفق ترینشان تا به امروز OCaml بوده.
 زبان های خانواده ی ML و همچنین زبان Haskell به دلیل استفاده از Type inference ، کد کوتاه تری در مقایسه با دیگر زبان های استاتیک دارند. (گرچه می شود برای خوانایی بیشتر یا کمک به ابزار مستندسازی) یا ... ، نوع داده ها را هم در کد آورد. ) در نسخه ی 3 زبان سی شارپ هم ویژگی استنباط نوع از طریق کلمه ی کلیدی var اضافه شد (

----------


## Todco.ir

*چکیده ای از زبان های برگرفته:**‎*
از روزی که جان مک کارتی در سال 1958 زبان LISP را ایجاد کرد ، تا همین چند سال پیش شاهد پیشرفت های خیلی بزرگ و بنیادی در زبان های برنامه نویسی نبودیم.
 یعنی امروزه هم ما برای برنامه نویسی کد را در فایلی می نویسیم و تحویل کامپایلر می دهیم و هنوز از مفاهیمی که زبان LISP و زبان های دهه ی 60 میلادی معرفی کردند استفاده می کنیم (ارایه ، اشاره گر ، متغیر ، حلقه و ...) و بیشترین تغییرات را در ابزار (IDE ، دیباگر ، پروفایلر و ... شاهد بودیم. (حتی مفاهیمی مثل GC هم از نسخه های اولیه ی لیسپ موجود بودند) شیوه ی برنامه نویسی ای که غالب برنامه نویسان به ان عادت کرده و با آن کد می نویسند (و بیشتر برنامه نویسان قادر به تصور برنامه نویسی به شکلی دیگر نیستند) ، روش دستوری (imperative) است (و نیز شی گرا)
زبان های برنامه نویسی ای که می شناسیم (سی ، پاسکال ، جاوا ، ...) بر مبنای مدل تورینگ هستند. 
منتها مدل دیگری هم برای زبان های برنامه نویسی وجود دارد که شاید کمتر به گوشمان خورده باشد: حساب لامبدا. آقای Alonzo Church (پدر لامبدا!) و Allen Turing همزمان به این دو مدل دست یافتند و بعدا هم ثابت کردند که این دو زبان از نظر قدرت محاسباتی با هم برابرند. زبان های مبتنی بر مدل تورینگ ، معمولا دستوری هستند.
 نقطه ی مقابل زبان های دستوری ، زبان های بیانی (declarative) است که در ان ها به جای تاکید بر چگونگی انجام یک عمل (how) روی این که چه کاری را می خواهیم انجام دهیم (what) تاکید می کنیم.
(مثل SQL که فقط با query ها می گوییم که چه می خواهیم ، ولی چگونگی انجامش را واگذار می کنیم به کامپایلر/مفسر).
زبان های تابعی هم نوعی declarative محسوب می شوند (اکثر اوقات ما روی بخش what تاکید داریم تا how در ادامه مثال خواهم آورد).
زبان های محبوب و رایج امروزی (سی پلاس پلاس ، جاوا ، دلفی ، سی شارپ ، روبی و ...) زبان های شی گرا هستند (مثال آخر بر خلاف بقیه یک زبان داینامیک است) 
البته درست است که در سال های اخیر ویژگی های دیگری هم به این زبان ها اضافه شده که برنامه نویسی برای مدل های دیگر همچون تابعی را پشتیبانی می کند ، ولی باز هم هسته ی این زبان ها ، دستوری و شی گراست(.
زبان های تابعی به اندازه ی زبان های دستوری قدمت دارند (از LISP در سال 1958و Scheme در دهه ی 70 و Haskell و ML در دهه ی 80) منتها از عللی که باعث شده این زبان ها بیشتر در دنیای آکادمیک کاربرد و محبوبیت نداشته باشن ، می شود موارد زیر را برشمرد:
نداشتن کتابخانه های قدرتمند و وسیع
نداشتن حمایت مالی شرکت های نرم افزاری
عدم توانایی برقراری ارتباط با زبان های مهمی مثل سی برای ارتباط با سیستم عامل میزبان
سرعت اجرای پایین
شیب زیاد منحنی یادگیری

*ارث بردن زبان برنامه نویسی* *F#‎‎** از نوع های برنامه نویسی و زبانهای برنامه نویسی*

F#‎‎‎ در اصل یک زبان استاتیک است ، منتها با استفاده از محیط تعاملی این زبان (F#‎‎‎ Interactive) می شود مثل زبان های پایتون و روبی ، به شکل داینامیک کد نوشت. در ضمن این زبان بر اساس سینتکس و مفاهیم زبان OCaml پیاده سازی شده و کتابخانه های OCaml را جز تعداد اندکی ساپورت نمی کند) ، منتها مدل شی (object model) اش همانند سی شارپ است ) به خاطر این که زبانی تحت دات نت است و همچنین ویژگی indentation یا تورفتگی کدش ، یاداور پایتون است.
 در ضمن از Haskell و Erlang هم ویژگی هایی به ارث برده.
F#‎‎‎ مزایای زیادی دارد که ان را از دیگر زبان های تابعی متمایز می کند. هم تابعیست هم شی گرا. زبانی استاتیک است ، منتها اجازه می دهد که مثل زبان های داینامیک با آن کار کنیم. سینتکسی دارد که نزدیک به 30 سال است وجود دارد و نخواسته انقلابی ارائه کند. 
1- سایت های استاتیک قابل ادیت توسط مدیر سایت را ندارند در صورتی که سایت های داینامیک با یک آموزش دو ساعته مدیر سایت کل سات را ادیت می کند
2- سایت های استاتیک سریعتر لود می شود
3- سایت های داینامیک سریعتر از سایت های استاتیک آپدیت می شوند.
4- شرکت هایی که سایت استاتیک دارند حتما یک نفر مستقیم و متخصص برای آپدیت باید استخدام کنند در صورتی که در طراحی سایت داینامیک حتی منشی نیز کفایت می کند.
همانطور که خالق این زبان در مصاحبه هاش گفته ، قرار نیست این زبان جایگزین وی بی یا سی شارپ بشود. در واقع هنوز هم برای برنامه های تجاری GUI و برنامه های تحت وب و ...
زبان های فعلی مناسب ترند )نه این که F#‎‎‎ قادر به انجام این کارها نباشد(

نکته:   *E**volution*بودن زبان *F#‎‎* نه *Revolution* بودن آن.

----------

