کار در خط فرمان

نکاتی برای کار با Unison به‌صورت محلی از طریق Exercism CLI


نوشتن و ارزیابی کد Unison

شما کد Unison را در فایل‌هایی می‌نویسید که پسوند .u دارند. ما به آن‌ها فایل‌های «scratch» می‌گوییم، چون از آن‌ها برای نوشتن کد Unison استفاده می‌کنید، اما در نهایت این Unison Codebase Manager (UCM) است که محتوای این فایل‌ها را نگهداری و ذخیره می‌کند. هنوز هم این فایل‌ها را از طریق Exercism CLI ارسال می‌کنید، اما می‌توان UCM را «منبع حقیقت» کد Unison دانست.

هرچند Unison یک REPL (حلقه‌ی خواندن، ارزیابی و چاپ) ندارد، می‌توانید عبارات Unison را به‌سرعت در «عبارت‌های watch» ارزیابی کنید. در فایلی با پسوند .u، خطی را با > شروع کنید و عبارتی را در سمت راست آن بنویسید.

> myFunction 42 "hi"

UCM هنگام ذخیره‌ی فایل، نتیجه‌ی ارزیابی عبارت را نشان می‌دهد. می‌توانید هنگام عیب‌یابی پیاده‌سازی تمرین‌هایتان از آن استفاده کنید.

برای آشنایی عمیق‌تر با گردش کار Exercism، این ویدئوی گام‌به‌گام پیاده‌سازی و آزمون یک مسئله‌ی Exercism را نشان می‌دهد.

Caution

ویدئوی گام‌به‌گام گردش کار نسخه‌ی قدیمی‌تر Unison را نشان می‌دهد. گردش کار جدید را همراه با روند کاری جدید پروژه اینجا ببینید.

سازمان‌دهی کدبیس

کدبیس Unison بر اساس «فضاهای نام» سازمان‌دهی می‌شود. فضاهای نام تا حدی مثل پوشه‌ها در یک سیستم فایل کار می‌کنند، با این تفاوت که به‌جای نگهداری فایل، انواع و توابع Unison شما را در خود دارند. مسیرهای فضای نام با نقطه، .، از هم جدا می‌شوند. برای مثال، می‌توانیم به فضای نام Text در فضای نام base با base.Text اشاره کنیم.

توصیه می‌کنیم برای هر تمرینی که انجام می‌دهید، فضای نامی بسازید یا با cd به آن وارد شوید.

ایمپورت کردن

نحوه‌ی نگارش Unison برای مدیریت و تعیین ایمپورت‌ها، use است. برای مثال، use base.data.List همه‌ی توابع زیر فضای نام base.data.List را به محدوده‌ی دید می‌آورد. این می‌تواند در موقعیت‌هایی مفید باشد که از تابعی مثل map روی یک List استفاده می‌کنید و لازم است آن را از توابع map دیگر مثل Optional.map متمایز کنید. همچنین می‌توانید توابع مشخصی را ایمپورت کنید، به این شکل که بعد از فضای نام فهرستی از توابع را با فاصله جدا کنید تا به محدوده‌ی دید بیایند، مثل: use base.data.List tails head flatMap.

می‌توانید از use هم در سطح بالای فایل و هم داخل توابع برای تعیین ایمپورت‌ها استفاده کنید. بندهای use قواعد محدوده‌ی واژگانی را رعایت می‌کنند، بنابراین ایمپورت‌های تودرتوتر بر ایمپورت‌های با تودرتویی کمتر اولویت دارند.

کتابخانه‌ی استاندارد

کتابخانه‌ی استاندارد Unison base نام دارد. به‌طور پیش‌فرض در کدبیس‌های جدید Unison دانلود می‌شود. می‌توانید توابع در دسترس پیاده‌سازی‌هایتان را از طریق مخزن آنلاین کد Unison، Unison share، یا از طریق رابط کاربری کدبیس محلی، یا با جست‌وجو در Unison Codebase Manager (UCM) مرور کنید. در ادامه به آن می‌پردازیم.

پیمایش در Unison Codebase Manager (UCM)

فهرست کامل دستورهای UCM با وارد کردن help در UCM در دسترس است، اما در اینجا چند نکته و قرارداد را می‌بینید.

می‌توانید در UCM با دستور find بر اساس اسم یا پیشوند فضای نام جست‌وجو کنید، اما find از جست‌وجوی مبتنی بر نوع در کدبیس هم پشتیبانی می‌کند. برای جست‌وجوی یک تابع بر اساس امضای نوع، find را وارد کنید و بعد از آن یک فاصله و دو نقطه بگذارید، مثل find : [a] -> [[a]].

می‌توانید محتوای یک فضای نام را با دستور ls فهرست کنید، مثلاً ls base.data.List یا ls .exercism.helloWorld. بسیاری از دستورهای UCM هم آرگومان‌های مسیر نسبی فضای نام را می‌پذیرند و هم مسیر کامل فضای نام را. مسیرهای کامل با یک . شروع می‌شوند که «ریشه» کدبیس شما را نشان می‌دهد.

برای جابه‌جایی در UCM، از دستور cd در CLI استفاده کنید. اگر فضای نامی وجود نداشته باشد، cd هنگام رفتن به آن، آن را می‌سازد. برای رفتن به فضای نام سطح بالاتر می‌توانید از cd .. استفاده کنید.

عیب‌یابی

وقتی آزمون‌ها را بارگذاری می‌کنم، UCM پیاده‌سازی تمرین من را پیدا نمی‌کند.

مطمئن شوید که فایل stub خود را در ویرایشگر متن ذخیره کرده‌اید و پیش از بارگذاری آزمون‌ها، ترم‌های کدبیس را update کرده‌اید.

به تعارض‌های نام‌گذاری برمی‌خورم. نمی‌توانم دو ترم با اسم tests داشته باشم.

می‌توانید دو ترم با اسم یکسان در فضاهای نام مختلف داشته باشید. اگر تمرین‌های Exercism را انجام می‌دهید، توصیه می‌شود برای هر تمرین فضای نام جداگانه‌ای بسازید تا آزمون‌ها و stubها از بقیه جدا باشند.

آزمون‌های من به‌صورت محلی قبول می‌شوند اما در test runner قبول نمی‌شوند.

متأسفیم! اول بررسی کنید که ایمپورت‌هایتان به چیزی جز کتابخانه‌ی استاندارد، base، و توابع تعریف‌شده در فایل scratch تحت آزمون ارجاع ندهند. اگر این‌طور بود، لطفاً در اسلک Exercism در کانال #track-unison به ما اطلاع دهید یا یک ایشو در مخزن track Unison ثبت کنید.

اگر مشکلی داشتید، حتماً به ما بگویید! 🙂