۳ - ۲نگاهی به تایپها
قبل از کار با نوشتهها، میخوایم اول بفهمیم این ساختارهای داده در هسکل چی هستن، و کمی با گرامر ِاونها آشنا بشیم. تا اینجا چیز زیادی از تایپها نگفتیم، ولی فصل قبل چند نمونه ازشون دیدین. از مباحثِ مهمِ هسکل، همین تایپها هستن، و دو فصلِ بعدی تماماً به این موضوع پرداختن.
به طور کلی، تایپها راهی برای دستهبندیِ مقادیر اند. برای مثال، تایپهای زیادی از اعداد وجود دارن، اینکه صحیح باشن یا کسری یا انواع دیگه. یه تایپ هم برای مقادیرِ بولییَن، True
یا False
، وجود داره. تایپهایی که ما تو این فصل باهاشون کار داریم، Char
یا "حرف"ها، و String
اند.
در GHCi میشه تایپِ مقادیر، بیانیهها و یا توابع رو با دستورِ :type
پیدا کرد.
REPL رو باز کنین و توی prompt ِش تایپ کنین: :type 'a'
. چنین پیغامی میاد:
Prelude> :type 'a'
'a' :: Char
به چندتا چیز توجه کنیم. اول اینکه حرف رو بین دو تا آپاستروف گذاشتیم، که مشخص میکنن منظور ما یه متغیر نبوده. اگه بدون آپاستروف بنویسین، :type a
، GHCi خطا میده که a
در گستره نیست. یعنی متغیرِ a
تعریف نشده، پس GHCi نمیتونه تایپش رو بگه.
دوم، همونطور که قبلاً هم گفتیم، علامتِ ::
اینطور خونده میشه: دارای تایپِ ... است. کلاً توی هسکل زیاد دیده میشه. هر وقت دو تا دونقطه دیدین، میدونین جلوش یه تایپ سیگنچر نوشته شده. تایپ سیگنچر یک خط کُده که تایپهای یک مقدار، بیانیه، یا تابع رو تعریف میکنه.
مورد آخر هم، تایپِ Char
ِه. Char
، تایپیه که شامل حروف و اعداد، کاراکترهای یونیکُد، علائم و غیرهست. پس وقتی تو GHCi مینویسیم :type 'a'
، در واقع میپرسیم تایپِ a
چیه؟ و جواب GHCi، 'a' :: Char
، یعنی a
دارای تایپِ Char
است.
حالا یه نوشته رو امتحان کنیم. این بار باید از علامتِ نقل قول استفاده کنیم، تا GHCi متوجه بشه که ما یه رشته از حروف داریم، نه یه دونه حرف:
Prelude> :type "Hello!"
"Hello!" :: [Char]
اون کروشه ها اطراف Char
، شکرِ گرامری برای لیستاند. String
، تایپِ مستعار یا تایپِ مترادف، برای لیستِ Char
هاست. تعریفِ تایپِ مستعار از اسمش پیداست: یه استعاره یا مترادف از یه تایپِ دیگهست، که معمولاً برای سادگی تعریف میشه، ولی در باطن، همون تایپِ اصلیه. String
هم یه اسم دیگه برای لیستِ Char
ِه. String
ظاهرِ کاملاً متفاوتی نسبت به لیستِ بقیهی تایپها داره، که گاهی اوقات کاربردیه. وقتی لیستها رو بیشتر توضیح بدیم، دلیلِ شکر گرامری بودنِ اون کروشه ها رو هم میفهمیم؛ ولی تا اینجا کافیه بدونیم که "Hello!"
دارای تایپ لیستِ Char
است.