۴ - ۱۰تعاریف
۱.
چندتایی، توپِل یا tuple یک گروهِ ترتیبدار از مقادیره. در هسکل، توپل رو با یک المان نمیشه درست کرد، ولی توپل با صفر المان، به اسم واحد و با نماد ()
، تعریف شده. تایپِ المانهای توپلها ممکنه متفاوت باشن، پس برای مثال، هم (String, String)
صحیحه، و هم (Integer, String)
. معمولاً از توپلها برای نگهداریِ موقت و بدون اسمِ چند مقدار استفاده میشه.
۲.
تایپکلاس یا typeclass مجموعهای از عملیاته که بر پایهی یک تایپِ چندریختی تعریف شدن. اگه تایپی یک نمونه از یه تایپکلاس رو داشته باشه، میشه از عملیاتِ تعریف شده در اون تایپکلاس برای مقادیرِ اون تایپ استفاده کرد. در هسکل، جفتِ تایپکلاس و نمونهش یکتاست. منظور از این حرف اینه که اگه یه تایپِ a
یک نمونه از Eq
داشته باشه، فقط یک نمونهوEq
داره.
۳.
دادهساز یا data constructor ها در هسکل روشی برای ساخت مقادیری از یک تایپ هستن. دادهسازهای هسکل یه تایپ دارن، و ممکنه مقدارِ ثابتی باشن (پوچگانه) یا مثلِ توابع، یک آرگومان یا بیشتر بگیرن. در مثال زیر، Cat
یه دادهسازو ِپوچگانه برای Pet
، و Dog
ودادهسازیه که یک آرگومان میگیره:
-- ،گربه که جواب نمیده
-- اسم میخواد چی کار؟
type Name = String
data Pet = Cat | Dog Name
این دادهسازها تایپهای زیر رو دارن:
Prelude> :t Cat
Cat :: Pet
Prelude> :t Dog
Dog :: Name -> Pet
۴.
نوعساز یا type constructor ها در هسکل مقدار نیستن، و فقط در تایپ سیگنچرها کاربرد دارن. یک تعریفِ داده، همونطور که دادهسازهایی رو برای ساختِ مقادیرِ یک تایپ تعریف میکنه، نوعسازهایی هم برای اشاره به اون تایپ ایجاد میکنه. در مثالِ بالا، Pet
ونوعساز ِایجاد شده در اون تعریفه. راه ساده برای تشخیص بین دادهسازها و نوعسازها اینه که در یک تعریفِ داده،ونوعسازها همیشه سمت چپِ تساوی نوشته میشن.
۵.
تعریفِ داده یا data declaration ها، تایپهای جدید تعریف میکنن. تعاریفِ داده همیشه یک نوعسازِ جدید میسازن، ولی الزاماً دادهساز جدید ایجاد نمیکنن. تعریف داده، در واقع اسم کلِ جملهایه که با کلیدواژهی data
شروع میشه.
۶.
تایپِ مستعار یا type alias راهی برای اشاره به یک نوعساز یا تایپِ ثابت با یه اسم دیگهست. معمولاً برای خوانایی بیشترِ کد، یا خلاصهنویسی از این تایپهای مستعار استفاده میکنیم.
type Name = String
-- برای Name یک نام مستعار به اسم
-- *؛ تعریف داده *نیستString تایپ
-- فقط تعریف برای یه تایپ مستعاره
۷.
آریتی یا arity تعداد آرگومانهاییه که یه تابع قبول میکنه. البته این واژه در هسکل، کمی بیمعنیه، چرا که به خاطر currying همهی توابع تک-آریتی اند. توابعِ چند آرگومانی با چند تابعِ تودرتو معادل میشن.
۸.
چندریختی، پلیمورفیسم یا polymorphism در هسکل یعنی بتونیم بر مبنای مقادیری که ممکنه تایپشون یکی از چندتا، یا همهی تایپها باشن، کُد بنویسیم. پلیمورفیسم در هسکل یا پارامتری ِه یا محدود. تابع همانی، id
، مثالی از پلیمورفیسمِ پارامتری ِه:
id :: a -> a
id x = x
اینجا id
از هیچ اطلاعاتی مختصِ یه تایپ، یا مجموعهای از تایپها استفاده نمیکنه، و با همهی تایپها کار میکنه. ولی تابع زیر:
isEqual :: Eq a => a -> a -> Bool
isEqual x y = x == y
یه تابع پلیمورفیکِ محدود یا مقیّد به مجموعهای از تایپهاییه که حتماً یه نمونه از تایپکلاس Eq
رو داشته باشن. در یکی از فصلهای آینده، انواع پلیمورفیسم رو با جزئیات توضیح میدیم.