Clean یک زبان برنامهنویسی چند منظوره و فانکشنال میباشد است که برای تولید برنامههای کاربردی طراحی شده است.
قبل از این که به جزئیات و ویژگیهای این زبان برنامهنویسی بپردازیم، چند ویژگی زبانهای برنامهنویسی را که به این بحث مربوط است با هم بررسی خواهیم کرد.
آشنایی با مفاهیم Strongly Typed و Weakly Typed
در زبانهای به اصطلاح Strongly Typed، نوع مقادیری که هنگام فراخوانی یک فانکشن به آن پاس داده میشود حتماً باید با نوع همان پارامترها در امضای آن فانکشن (Signature) یکی باشد؛ مثلاً چنانچه برای یک فانکشنی ورودی از نوع استرینگ تعریف کرده باشیم، در این صورت در هر کجای برنامه که آن را صدا زدیم، باید پارامتر آن از نوع استرینگ (رشته) باشد. اما در زبانهای به اصطلاح Weakly Typed این سختگیری وجود ندارد.
زبانهای برنامهنویسی Pure Functional
این زبانها تماماً Functional میباشند (مانند زبان برنامهنویسی Haskell). به عبارت دیگر، پایه و اساس این زبانها را فانکشنهای مختلفی تشکیل میدهند که یک ورودی میگیرند و یک خروجی هم اصطلاحاً return میکنند. در نقطهٔ مقابل، زبانهای دستوری هستند که ساختار برنامه در آنها دستور به دستور تعریف میشود (مانند زبان برنامهنویسی Python)
زبانهای برنامهنویسی Strict وLazy
برای روشن شدن تفاوت این دو نوع زبان، کد زیر را در نظر بگیرید:
print length([2+1, 3*2, 1/0, 5-4])
در زبانهای به اصطلاح Strict، این کد منجر به بروز خطا میشود زیرا در این نوع، ابتدا پارامترهای یک تابع بررسی میشوند؛ بنابراین وقتی 1/0 پردازش میشود، خطای «تقسیم بر صفر» روی خواهد داد. اما در زبانهای به اصطلاح Lazy Functional، نتیجهٔ یک فانکشن، فارغ از پارامترها تعیین میشود. به عبارت دیگر، کد بالا عدد 4 را چاپ خواهد کرد زیرا طول آرایهای که به تابع length پاس داده شده است، برابر با 4 است.
آشنایی با برخی از مهمترین ویژگیهای زبان Clean
حال که با این جزئیات آشنا شدیم، به مهمترین ویژگیهای زبان برنامهنویسی Clean میپردازیم. با اینکه زبان Clean به طور پیشفرض به سبک Lazy طراحی شده است، اما به راحتی میتوان با تبدیل آن به یک زبان Strict، قابلیتهای مدیریت زمان و حافظهٔ آن را بهبود بخشید.
همچنین زبان Clean یک زبان به اصطلاح Strongly Typed است که بر مبنای الگوی Milner/Hindley/Mycroft پیادهسازی شده است. این زبان شامل انواع دادههای سطح بالا و همچنین انواع دادههای به اصطلاح Polymorphic ،Abstract Algebraic ،Synonyms و Existentially Quantified است.
وجود همین دیتاتایپها در زبان برنامهنویسی Clean، توسعهٔ برنامههای کاربردی را ممکن میسازد؛ مخصوصاً این که با کنترل کامل روی آبجکتهایی که به صورت اصطلاحاً Single-thread استفاده میشوند، میتوان در سرعت و فضای مورد نیاز برنامه کنترل کامل داشت. این قابلیت که در یک پلتفرم Pure Functional عرضه شده است، برای مدیریت آبجکتها استفاده میشود.
دیتاتایپهای داینامیک (پویا) نیز در این زبان وجود دارند. با این نوع دادهها میتوان انواع دادههای مطلق را در یک پکیج نگهداری کرد و در زمان اجرا به آنها دسترسی داشت. با کمک دیتاتایپهای داینامیک میتوان کد و دیتا را بین برنامههایی که با این زبان نوشته شدهاند، با انعطاف لازم و مطمئن رد و بدل کرد. از جملهٔ دیگر قابلیتهای این زبان میتوان به موارد زیر اشاره کرد:
- Clean یک زبان سطح بالا است.
- در Clean از رکوردها، آرایهها، لیست و فایلها پشتیبانی میشود.
- در این زبان، از Pattern Matching نیز پشتیبانی میشود.
- یک مکانیزم به اصطلاح Built-in برای توابع جِنریک در این زبان وجود دارد.
- یک IDE مناسب برای زبان Clean عرضه شده است.
- لایبرریهای متعددی به همراه توابع مکمل ارائه شده است.
- Clean از کلاسها و همچنین کانستراکتور پشتیبانی میکند (با این قابلیت، میتوان برای توابع و عملگرها Overload تعریف کرد).