مقدمات زبان F#  انواع دادها (قسمت سوم)

انواع داده اولیه در F# انواع داده صحیحانواع داده اعشارینوع داده بولینوع داده کاراکترینوع داده رشته ایانواع و مقدار هایشان را می توانید از اینجا ببینیدنوع هایی که به رنگ بنفش هست من قبلا روی آنها کلیک کردم !اگر به انواع در تصویر بالا دقت کرده باشید ،نوع های که با u شروع شدند( که به معنای unsignedValue یا مقدار بدون علامت) از 0 به اعداد مثبت شروع میشوند.بزرگی اعداد اعشاری از کوچک به بزرگ به ترتیب float32 یا single بعد float یا double و بزرگتر از همه decimal میباشدبزرگی اعداد صحیح از کوچک به بزرگ به ترتیب در جدول آمده (تا سر char)اگر اعداد صحیح در جدول جوابگوی کار شما نبود باید از یک نوع دیگر به نام bigint استفاده کنید. این نوع هیچ محدودیتی در کار با اعداد صحیح ندارد اما اگر هنگام کار با این نوع حافظه کم بیاوریئ خطای OutOfMemoryException رخ می دهد:OutOfMemoryException انواع float و float32 یا همان double و single (نام های دیگرشان هستند) در بسیاری در موارد نمایش دقیقی از اعداد اعشاری ارائه نداده ئ نمایش را به صورت تقریبی و با نزدیکترین عدد ممکن انجام می دهند. برای نمایش دقیق از decimal استفاده کنید اما این نکته را فراموش نکنید که این نوع حافظه RAM زیادی اشغال می کند و در سرعت اجرای برنامه تاثیرگذار است. پس در مواقع ضروری باید از decimal استفاده شود.انواع به همراه پسوند و پیشوند نیز می توانید از این قسمت مشاهده کنیدمقادیر مختلف اعداد اعشاریبرای حالت های مختلف اعداد اعشاری مقادیر مختلفی وجود دارد:نتیجه حاصل از انجام محاسبات اعشاری نامشخص مثل تقسیم عدد صفر بر صفر: nan (که به معنی not a number) برای single یا float و nanf برای double یا float32حاصل تقسیم یک عدد مثبت یا منفی بر صفر: مثبت بی نهایت (infinity برای single یا float و infinityf برای double یا float32) و منفی بی نهایت (infinity- برای single یا float و infinityf- برای double یا float32)نوع داده کاراکترینکته ای که وجود دارد باید در یک جفت ' قرار بگیرند:let arman : char = 'a'همچنین می توان از کد ASCII آن کاراکتر نیز استفاده کرد.نکته: رشته ها در یک جفت " قرار میگیرند.کاراکتر های کنترلیاین نوع کاراکتر ها در نوع string یا رشته ها کاربر دارد که فکر کنم در هر زبان برنامه نویسی وجود داردرشته هارشته ها در یک جفت " قرار می گیرند. برای ذخیره مجموعه ای متوالی از کاراکتر ها استفاده میشوند. دارای یکسری متد خاص خود است برای نمونه برای ایجاد یک رشته تهی با استفاده از متد:let emptyString : string = String.Emptyبدست آوردن طول رشته با متد :String.length str : string -> intنحوه خواندن، متد یا فانکشن String.length داریم که مقدار ورودی با نام str از نوع رشته می گیرد و یک عدد صحیح (که طول رشته باشید) بر می گرداندروش دوم بدست آوردن طول رشته:sting-name.Lenght :intرشته ها خاصیت multiline دارند فضا های خالی در یک رشته تمام جزئی از آن رشته است.آوردن علامت @ قبل از یک رشته، نوع رشته را به Verbatim تبدیل می کند به این معنا که هر کارکتر کنترلی نادیده گرفته می شود ، به استثنای علامت " . در صورتی که بخواهیم در رشتی ای از نوع Verbatim از علامت " استفاده کنیم باید از یک جفت کوتیشن به صورتی پشت سرهم استفاده کنیم:let str = @&quot a string with &quot&quotqoutes&quot&quot in middlea string with "qoutes" in middle تبدیل رشته به کد ASCIIبه علامت B (که نشانه Byte است) در انتهای رشته توجه کنیددسترسی به کاراکترهای رشتهروش اول:string-name.[index] : charروش دوم:string-name.Chars(index: int) : charاندیس index ها از 0 شروع میشوندزیر رشته ها یا substringاین کار توسط Slices صورت می گیریدstring-name.[start .. finish] : stringاگر بخش finish مشخص نشود این بخش بطور خودکار با طول رشته - 1 ( مشخص می شود. مثال:let str :string = &quotArman&quot str.[0 .. 2] str.[*] str.[1..] str.[..3]"Arm""Arman""rman""Arma" مقایسه رشته هابه کمک تابع compare ماژول Operators می توان رشته ها را با همدیگر مقایسه کرد.compare valA valB : `T -> `T -> intنحوه خواندن تابع بالا : تابع با نام compare دو پارامتر ورودی با نام های valA valB میگیرد امضای این تابع (مواردی که بعد از :) دو پارامتر از نوع جنریک هستند (بعدا در مورد این نوع صحبت میکنیم) و نوع int بر میگرداند (همیشه آخرین پارامتر در امضا تابع مقدار برگشتی آن می باشد). عملکرد این تابع بر اساس کد ASCII رشته می باشد و روش مقایسه به این صورت است که : کد اسکی اولین کاراکتر رشته اول (valA) با کد اسکی از کاراکتر متناظر آن در رشته دوم (valB) با هم مقایسه می کند; اگر کد اسکی کاراکتر مورد بررسی در رشته اول valA بزرگ تر از کاراکتر متناظر باشد عدد 32 بر می گرداند و اگر برعکس باشد کاراکتر مورد بررسی در valA کوچکتر از کاراکتر متناظر در valB باشد عدد -32 بر میگرداند و کار مقایسه پایان می یابد. اما اگر کد اسکی هر دو کاراکتر برابر باشند عدد 0 را بر میگرداند در این صورت این کار برای کاراکتر های بعدی هر دو رشته ادامه می یابد تا زمانی که رشته پایان یابد.compare &quotArman&quot &quotarman&quot compare &quotarman&quot &quotaRman&quot compare &quotArman&quot &quotArman&quotint = -32int = 32int = 0کد اسکی A کوچکتر از a است همچنین کس اسکی r بزرگ تر از کد اسکی R.در آخر هم که کد های اسکی هر دو رشته ورودی یکسان هستند