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

نوع داده

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

یک مثال از استنباط نوع داده

کد زیر یک تابع toFullName را نشان می‌دهد که نام کامل یک شخص را به عنوان یک رشته متنی استخراج می‌کند:

toFullName person =
  person.firstName ++ " " ++ person.lastName

fullName =
  toFullName { fistName = "Hermann", lastName = "Hesse" }

مانند جاوااسکریپت یا پایتون، کد را بدون توضیح اضافی می‌نویسیم. مشکل کد در کجاست؟

در جاوااسکریپت، کد معادل "undefined Hesse" را خروجی می‌دهد. حتی یک خطا هم نیست! شاید یکی از کاربران وقتی آن را ببیند، به شما اطلاع دهد. در مقابل، کامپایلر Elm پس از ارزیابی سورس کد به شما می‌گوید:

-- TYPE MISMATCH ---------------------------------------------------------------

The argument to function `toFullName` is causing a mismatch.

6│   toFullName { fistName = "Hermann", lastName = "Hesse" }
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function `toFullName` is expecting the argument to be:

    { …, firstName : … }

But it is:

    { …, fistName : … }

Hint: I compared the record fields and found some potential typos.

    firstName <-> fistName

کامپایلر می‌بیند که تابع toFullName آرگومان نادرست نوع داده را دریافت می‌کند. همانطور که در پیام خطا اشاره شده، کسی به‌طور تصادفی fist را بجای first نوشته است.

داشتن یک دستیار برای اشتباهات ساده مانند این عالی است، اما وقتی شما صدها فایل و تعدادی همکار دارید که تغییراتی ایجاد می‌کنند، ارزش این دستیار بیشتر نمایان می‌شود. مهم نیست که پروژه چقدر بزرگ و پیچیده شود، کامپایلر Elm بررسی می‌کند که همه چیز به درستی بر اساس سورس کد مطابقت داشته باشد.

هرچه بهتر نوع داده را درک کنید، کامپایلر بیشتر شبیه یک دستیار دوستانه به نظر می‌رسد. پس بیایید شروع به یادگیری کنیم!


یادداشت مترجم

برای مشاهده نوع داده مقدار یا تابع، پس از باز کردن Elm REPL، اقدام به نوشتن آن مقدار یا تابع کرده و کلید Enter را فشار دهید. در ادامه، نوع داده مقدار یا نشانه‌گذاری نوع داده تابع به شما نمایش داده می‌شود. برای نمونه:

> 42
42 : number

> 'E'
'E' : Char

> String.reverse
<function> : String -> String