5.1. انواع داده
هر مقدار در زبان Nix دارای یکی از انواع زیر است:
مقادیر اولیه (Primitives)
عدد صحیح
یک عدد صحیح (Integer) در زبان Nix یک عدد صحیح علامتدار ۶۴ بیتی است.
اعداد صحیح نامنفی را میتوان به عنوان مقالید عدد صحیح بیان کرد.
اعداد صحیح منفی با استفاده از عملگر منفیسازی حسابی ایجاد میشوند.
تابع builtins.isInt را میتوان برای تشخیص اینکه آیا یک مقدار عدد صحیح است یا خیر، استفاده کرد.
اعشاری
یک عدد اعشاری (Float) در زبان Nix یک عدد اعشاری ۶۴ بیتی بر اساس استاندارد IEEE 754 است.
بیشتر اعداد اعشاری نامنفی را میتوان به عنوان مقالید اعشاری بیان کرد.
اعداد اعشاری منفی با استفاده از عملگر منفیسازی حسابی ایجاد میشوند.
تابع builtins.isFloat را میتوان برای تشخیص اینکه آیا یک مقدار اعشاری است یا خیر، استفاده کرد.
بولین
یک مقدار بولین (Boolean) در زبان Nix یکی از مقادیر true (درست) یا false (نادرست) است.
این مقادیر به عنوان صفاتی از builtins به صورت builtins.true و builtins.false در دسترس هستند.
تابع builtins.isBool را میتوان برای تشخیص اینکه آیا یک مقدار بولین است یا خیر، استفاده کرد.
رشته
یک رشته (String) در زبان Nix دنبالهای تغییرناپذیر و با طول محدود از بایتها به همراه یک زمینه رشته است. Nix فرض یا پشتیبانی ذاتی برای کار با انکودینگهای کاراکتری ندارد.
مقادیر رشتهای بدون زمینه رشته را میتوان به عنوان مقالید رشتهای بیان کرد.
تابع builtins.isString را میتوان برای تشخیص اینکه آیا یک مقدار رشته است یا خیر، استفاده کرد.
مسیر
یک مسیر (Path) در زبان Nix دنبالهای تغییرناپذیر و با طول محدود از بایتها است که با / شروع میشود و نشاندهنده یک مسیر سیستمفایل متعارف به سبک POSIX است.
مقادیر مسیر با مقادیر رشتهای متفاوت هستند، حتی اگر حاوی دنباله بایتهای یکسانی باشند.
عملیاتی که مسیرها را تولید میکنند، نتیجه را درست مانند تابع استاندارد C یعنی realpath سادهسازی میکنند، با این تفاوت که هیچگونه تفکیک پیوند نمادینی (symbolic link resolution) انجام نمیشود.
مسیرها برای ارجاع به فایلهای محلی مناسب هستند و اغلب بر رشتهها ترجیح داده میشوند.
- مقادیر مسیر شامل اسلشهای پایانی یا تکراری،
.یا..نیستند. - مقادیر مسیر نسبی به طور خودکار نسبت به [پوشه پایه] خود حل میشوند.
- ابزارها میتوانند مقادیر مسیر را تشخیص داده و قابلیتهای اضافی مانند تکمیل خودکار (autocompletion)، خودکارسازی بازسازی کد (refactoring automation) و پرش به فایل (jump-to-file) را فراهم کنند.
برای معتبر بودن یک مقدار مسیر، نیازی نیست که فایلی در آن مسیرِ مشخص وجود داشته باشد، اما مسیری که با استفاده از درونگذاری رشته یا الحاق رشته و مسیر به یک رشته تبدیل میشود، باید به یک فایل یا پوشه قابلخواندن اشاره کند که در انبار نیکس کپی خواهد شد.
برای نمونه، ارزیابی "${'{'}./foo.txt{'}'}" باعث میشود که فایل foo.txt از همان پوشه در انبار نیکس کپی شود و نتیجهی آن رشتهی "/nix/store/<hash>-foo.txt" باشد.
عملیاتهایی مانند import نیز میتوانند انتظار داشته باشند که یک مسیر به یک فایل یا پوشه قابلخواندن ارجاع دهد.
نکته
زبان Nix فرض میکند که تمام فایلهای ورودی هنگام ارزیابی یک عبارت نیکس بدون تغییر باقی میمانند. برای نمونه، فرض کنید در طول یک نشست
nix replاز یک مسیر فایل در یک رشتهی درونگذاریشده استفاده کردهاید. بعداً در همان نشست، پس از تغییر محتوای فایل، ارزیابی مجدد رشتهی درونگذاریشده با همان مسیر فایل ممکن است یک مسیر انبار جدید برنگرداند، زیرا ممکن است Nix محتوای فایل را مجدداً نخواند. در صورت نیاز، از:rبرای بازنشانی repl استفاده کنید.
مقادیر مسیر را میتوان به صورت لیترالهای مسیر بیان کرد.
تابع builtins.isPath را میتوان برای تشخیص اینکه آیا یک مقدار از نوع مسیر است یا خیر، به کار برد.
تهی (Null)
تنها یک مقدار از نوع تهی در زبان Nix وجود دارد.
این مقدار به عنوان یک صفت در مجموعه ویژگی builtins با نام builtins.null در دسترس است.
مقادیر مرکب
مجموعه ویژگی
یک مجموعه ویژگی را میتوان با یک لیترال مجموعه ویژگی ساخت.
تابع builtins.isAttrs را میتوان برای تشخیص اینکه آیا یک مقدار مجموعه ویژگی است یا خیر، به کار برد.
فهرست
یک فهرست را میتوان با یک لیترال فهرست ساخت.
تابع builtins.isList را میتوان برای تشخیص اینکه آیا یک مقدار فهرست است یا خیر، به کار برد.
تابع
یک تابع را میتوان با یک عبارت تابع ساخت.
تابع builtins.isFunction را میتوان برای تشخیص اینکه آیا یک مقدار تابع است یا خیر، به کار برد.
خارجی
یک مقدار خارجی، مقداری کدر (opaque) است که توسط یک افزونهی Nix ایجاد شده است. چنین مقداری را میتوان در عبارتهای نیکس جایگزین کرد، اما ایجاد و استفاده از آن صرفاً توسط کد افزونه انجام میشود.