پرش به محتویات

نام مستعار

اگر رکوردهایی با فیلدهای زیاد داشته باشید، نشانه‌گذاری نوع داده می‌تواند طولانی شود که این کار مدیریت آن را دشوار می‌کند! هدف اصلی استفاده از نام مستعار مقابله با این مشکل است. یک نام مستعار نامی کوتاه‌تر برای آن نوع داده به حساب می‌آید. برای نمونه، می‌توانید یک نام مستعار User به این صورت ایجاد کنید:

type alias User =
  { name : String
  , age : Int
  }

بجای نوشتن تمام رکورد در هر بار فراخوانی، می‌توانیم فقط از User استفاده کنیم. این کار به ما کمک می‌کند تا نشانه‌گذاری نوع داده را به شیوه‌ای خواناتر تعریف کنیم:

-- WITH ALIAS

isOldEnoughToVote : User -> Bool
isOldEnoughToVote user =
  user.age >= 18


-- WITHOUT ALIAS

isOldEnoughToVote : { name : String, age : Int } -> Bool
isOldEnoughToVote user =
  user.age >= 18

این دو تعریف، معادل هستند، اما تعریفی که با نام مستعار بیان شده، کوتاه‌تر و خواناتر است. بنابراین، تمام کاری که انجام می‌دهیم ایجاد یک نام مستعار برای یک نوع داده طولانی است.

مدل‌سازی

استفاده از نام مستعار برای نوع داده هنگام مدل‌سازی بسیار رایج است. وقتی درباره معماری Elm یاد می‌گرفتیم، مدلی مانند این را دیدیم:

type alias Model =
  { name : String
  , password : String
  , passwordAgain : String
  }

مزیت اصلی استفاده از نام مستعار، هنگام نشانه‌گذاری نوع داده در توابع update و view است. نوشتن Msg -> Model -> Model بسیار بهتر از نسخه گسترش‌یافته آن است! با این کار می‌توانیم فیلدهایی به مدل خود اضافه کنیم بدون اینکه نیازی به تغییر نشانه‌گذاری نوع داده داشته باشیم.

تابع سازنده رکورد

وقتی یک نام مستعار برای نوع داده رکورد ایجاد می‌کنید، یک تابع سازنده رکورد تولید می‌شود. بنابراین اگر یک نام مستعار User تعریف کنیم، می‌توانیم شروع به ساخت رکوردهایی به این صورت کنیم:

> type alias User = { name: String, age: Int }

> User
<function> : String -> Int -> User

> User "Sue" 58
{ name: "Sue", age: 58 } : User

> User "Tom" 31
{ name: "Tom", age: 31 } : User

سعی کنید یک کاربر دیگر یا یک نام مستعار برای نوع داده خودتان ایجاد کنید. توجه داشته باشید که ترتیب آرگومان‌ها در تابع سازنده رکورد با ترتیب فیلدها در نام مستعار مطابقت دارند!

دوباره تاکید می‌کنم، این قابلیت فقط برای رکوردها است. ایجاد نام مستعار برای انواع دیگری از داده منجر به ایجاد یک تابع سازنده نخواهد شد.