کتاب آموزشی برنامهنویسی تابعی با هسکل
از بهترین گزینهها برای شروع به برنامهنویسی تابعی
تویِ برنامهنویسی تابعی فقط با تابعها سروکار دارین! تعریفِ تابع یادتون هست؟ چیزی بود که به ازای هر ورودی، فقط یک خروجی میداد. اینجا هم همینطوره، یعنی توابع شفافیت مرجع دارن.
مطالعهی رایگان
چرا هسکل؟
هَسکِل یکی از زبانهای تابعیِ خالصه که بیشتر از ۲۵ ساله داره توسعه داده میشه، و مثل همهی زبانهای برنامهنویسیِ تابعی دیگه، بر مبنای جبر لاندا پایهگذاری شده. منظور از خلوص اینه که همهی امکانات یه زبان برنامهنویسی رو میشه با جبر لاندا بیان کرد و شفافیت مرجع تضمین شدهست.
یکی از سناریوهای رایج برای اکثر برنامهنویسها اینطوره که یه برنامه رو شروع کنن، به نقطهای برسن که کاراییِ کلی و مدّنظرشون رو داره، و از اون به بعد با دلهره به توسعهدادنِ برنامهشون ادامه بِدَن. دلیلِ اینکه ممکنه دلهره داشته باشن، اینه که باید دائماً کلِ برنامه رو داخلِ ذهنشون نگه دارن و وقتی میخوان تغییری در برنامه بِدن، امیدوار باشن که باعث باگ در جای دیگهای از برنامه نشن – باگهایی که فقط در وسط اجرای برنامه خودشون رو نشون میدن (خطاهای زمان اجرا). چنین چیزی در زبانهایی مثل C و پایتون کاملاً طبیعیه و از چالشهای برنامهنویسی به حساب میاد.
اما تصور کنین با زبانی برنامه بنویسین که اکثر خطاها قبل از اجرا پیشگیری بشن. به کلامی دیگه، کامپایلِرِ* زبان در ریفاکتور و توسعهی برنامه به شما کمک کنه. اینطوری اگه تغییری در برنامه ایجاد کنین، کامپایلر به هرجایی که نیاز به تغییر داشته باشه اشاره میکنه، و خیالتون راحته که هروقت کد با موفقیت کامپایل بشه، معنیش اینه که به احتمالِ خیلی زیاد باگِ جدیدی به برنامه ندادین.
compiler وظیفهی خوندنِ کد و تبدیلِ اون به چیزی که برای کامپیوتر قابلِ فهم باشه رو داره.
هَسکِل چنین زبانی به حساب میاد. زبانی که برنامهنویس رو مجبور به تعیینِ واضح و مشخصِ ساختارِ برنامهش میکنه تا برنامهای با پایهی محکم بنویسه. همین سختگیری باعث میشه برنامهنویس زمانِ بیشتری رو برای فکرکردن راجع به منطق برنامهش صرف کنه، و به نتایجی برسه که بدون کمک کامپایلر خیلی زمان میبرد تا بهشون پی ببره.
هسکل به عنوان یه زبان برنامهنویسیِ تابعیِ خالص شناخته شده، و میشه گفت این شیوه یا پارادایمِ برنامهنویسی در مقابل برنامهنویسیِ دستوری قرار داره. یکی از دلایل این دستهبندی اینه که تقریباً همهچیز در هسکل تابع به حساب میاد: یه جور چیزی که به ازای یک ورودی یک خروجی میده. وقتی از لغت خالص استفاده میکنیم، در واقع به همین رابطهی یک طرفه تأکید داریم: یه تابع به ازای یک ورودیِ مشخص، همیشه یک خروجیِ مشخص داره و این وسط چیزی تغییر نمیکنه. بدونِ این تضمین، کامپایلر هم نمیتونست انقدر کمککننده عمل کنه.
از نتایج مثبتی که یاد گرفتنِ هسکل داره، یه جور تغییر کلی در طرز فکر برنامهنویسه. به عنوان مثال به جای حل یک مسئله با loop یا حلقهی for
(که در هسکل وجود نداره!)، استفاده از توابع بازگشتی (توابعی که خودشون رو صدا میزنن) درک از مسئله رو ممکنه کاملاً متفاوت کنه. متعاقباً، ایدههایی که آدم در هسکل یاد میگیره رو میتونه به خیلی از زبانهای دیگه هم انتقال بده.
آیا هسکل مناسب من هست؟
بعضیها یادگیری برنامهنویسیِ تابعی رو مستلزمِ فراموش کردن خیلی از قواعدی که در زبانهای دیگه یادگرفتن میدونن. پس اگه هیچ تجربهای با برنامهنویسی ندارین، شاید بشه گفت که فرصت خوبی برای یادگیری یه زبان فانکشِنال دارین! از هسکلنویسها که بپرسین، عموماً هسکل رو گزینهی بهتری برای شروع به برنامهنویسی میدونن.
اگر هم تجربهی برنامهنویسی با زبانهای دیگه رو دارین، باز هم میتونین از هسکل بهره ببرین. چراکه قواعدی که هسکل به شما یاد میده رو میشه به زبانهای دیگه منتقل کرد. از طرف دیگه، خیلی از زبانهای رایج (مثل Java و Swift) شروع به اضافهکردنِ قابلیتهای فانکشنال به زبانشون کردن. تعداد کتابهایی هم که به پیادهسازیِ سبکِ فانکشِنال در زبانهای رایج (مثل پایتون و JavaScript) پرداختن، بیشتر شدن. همهی اینها نشون از گسترشِ این شیوهی برنامهنویسی دارن.
کتاب آموزشی
برنامهنویسی با هسکل
از مبانی اولیه
این کتاب، نوشتهی کریستوفر اَلِن و جولی مورونوکی، که از سال ۲۰۱۵ به شکلِ بتا و اولین نسخهی نهاییش در سال ۲۰۱۷ منتشر شد، یکی از معدود کتابهایی به حساب میاد که تونسته خیلی رَوون و با زبان ساده، اکثر مفاهیمی که درکشون ساده نیست رو بیان کنه (مفاهیمی مثل مونَد و IO
).
دربارهی این ترجمه
این کتاب از مبانی اولیه شروع میکنه، به همین خاطر گزینهی خوبی برای ورود به دنیای برنامهنویسی به حساب میاد. در ترجمهی این کتاب هم سعی شده برای انتقال بهینهتر مطالب از نگارش ساده و عامیانه استفاده بشه.
با این حال، تلفیق لغات انگیسی در چنین کتابی اجتنابناپذیره، و برای اینکه یه برنامهنویس خوب بشین، بلد بودنِ انگلیسی خیلی کمکتون میکنه. این کتاب هم بعضی جاها برای یادگیری لغات فنی حتی تلفظ اونها رو دقیق توضیح داده. چندتا از لغات هم دائماً در کنار معادل انگلیسیشون تکرار شدن تا به یادگیری کمک کنن.