آموزش #F قسمت ۲

https://virgool.io/fsharp/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-f-%D9%82%D8%B3%D9%85%D8%AA-%DB%B1-tsz8dmj6gakw

در این قسمت میخوایم تابع تعریف کنیم یا همون function

تابع چیه؟ همونطور که تو ریاضی خوندیم تابع یک یا چند ورودی میگیره یک کارایی روش انجام میده یک یا چند خروجی تحویلمون میده، توی برنامه نویسی هم همینه یک یا چند متغیر میگیره یک سری کارها (مثلا جمع، تفریق، ضرب یا هرچی دلمون بخواد) روش انجام میده یک یا چند خروجی هم بهمون میده.

تعریف تابع در اف شارپ: تابع هم مثل متغیر با کلمه کلیدی let تعریف میشه بعد از اون اسم تابع و بعد از اون آرگومونهای تابع( متغیرهایی که میخوایم توی تابع استفاده کنیم) میاد. بین هر کدوم هم یک فاصله میزاریم که از هم جدا بشن.

تکه کد زیر یک تابع هست که دوتا ورودی میگیره اونا رو با هم جمع میکنه و حاصل جمع رو به عنوان خروجی بهمون میده

‍let sum a b = a+b

میخوایم این تابع رو در عمل ببینیم

طبق آموزش قسمت ۰ یک برنامه اجرا کنید و فایل Program.fs رو به شکل زیر تغییر بدید. و بعد برنامه رو اجرا کنید.

// Learn more about F# at http://fsharp.org
open System
[<EntryPoint>]
let main argv =
    let sum a b = a+b
    printfn "%i" (sum 2 3)
    Console.ReadKey() |> ignore

اگه با ionide اجرا کرده باشید یک صفحه سیاه کنسول میاد و عدد ۵ رو چاپ می کنه و با زدن هر کلیدی شما از کنسول خارج خواهید شد.

توضیح خط به خط کد بالا:

  1. این خط کامنته یعنی برای توضیح بیشتر کد نوشته میشه ولی تاثیری تو اجرا نداره و در واقع اصلا اجرا نخواهد شد. برای کامنت گذاشتن بین کدها از // استفاده می کنیم.
  2. در اینجا ما یک فضای نام رو باز می کنیم تا راحت تر از تابع های اون فضای نام (namespace) استفاده کنیم. برای استفاده از فضای نام اول کلمه کلیدی open‌ و بعد نام اون فضای نام رو مینویسیم.
  3. این رو خیلی زوم نکنید روش. اینجا یعنی برنامه ما از این نقطه اغاز میشه.
  4. تابع اصلی برنامه است که برنامه از اینجا اجرا میشه.
  5. تعریف تابع جمع
  6. در اینجا حاصل جمع ۲ و ۳ رو چاپ می کنیم. توضیح: i% یعنی تو این رشته در این قسمت ما میخواهیم یک متغیر یا چیزی رو چاپ کنیم. بعد از رشته هم میبینید که اون تابع نوشته شده و داخل پرانتز قرار داره. اگر یک متغیر بود نیاز به پرانتز نبود ولی چون تابع هست اونم با چند ورودی باید با پرانتز فراخونی بشه. در مثالهای بعدی اینها رو بیشتر خواهید دید و بیشتر آشنا خواهید شد. در کد زیر برنامه بالا رو بازنویسی می کنم تا بعد از رشته بدون پرانتز بنویسم. حاصل جمع رو میریزم توی z‌ و اونو چاپ می کنم
open System 
[<EntryPoint>] 
let main argv =
     let sum a b = a+b
     let z = sum 2 3
     printfn "%i" z
     Console.ReadKey() |> ignore 

۷. اینجا هم میگیم که صفحه کنسول رو نبند تا من یک کلیدی رو بزنم بعد ببند.

نکته ای که مهمه فاصله گذاری هست. همونطور که می بینید بعد از تابع main تمام توابع با فاصله از سر خط شروع شدند. در واقع یک تابع را ما میتوانیم تعریف کنیم که چندین وظیفه را انجام بدهد. برای این کار باید بعد از = به سر سطر بعد برویم کلید tab‌ را بزنیم و دستورمون رو بنویسیم دوباره سطر بعد و همین کار را تکرار میکنیم(مثلا تابع main را ببینید که بقیه دستورها جزیی از اون تابع هستند. همگی سر خط و با فاصله شروع شده اند). هر چند دستور که بخواهیم میتوانیم در تابع تعریف کنیم.

https://virgool.io/fsharp/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-f-%D9%82%D8%B3%D9%85%D8%AA-%DB%B3-m1gdg0lxktoc