این کتاب چیا داره
این کتاب بیشتر شبیهِ یه واحد درسی، یا یه دورهی آموزشی میمونه تا یه کتاب. در جاهای مختلف کتاب، خیلی آزادانه تمرینهای مختلفی قرار دادیم؛ پیشنهاد میکنیم حلشون کنین، حتی اگه به نظر خیلی ساده میان. همون تمرینها تأثیرِ خیلی زیادی در درکِ یه سری مطالب دارن. هر چقدر هم ما حرف بزنیم، باز هم به خوبیِ اینکه خودتون انجام بدین نیست. اگه توی یکی از فصلهای جلوتر متوجه شدین که مطلبی خوب براتون جا نیوفتاده، میتونین به فصلهای قبلیش برگردین و انقدر تمرین حل کنین تا قشنگ متوجه بشین.
ما عقیده داریم تکرار با فاصلهی زمانی، و درکِ پلهپله، استراتژیهای خوبی برای یادگیری هستن. اول یه چیزی رو اجمالاً اشاره میکنیم، بعداً بارها و بارها بهش برمیگردیم. همین که تجربهتون با هسکل کمی عمق پیدا کنه، دیگه یه پایهای دارین که از اونجا سطحِ درکتون رو عمیقتر کنین. اگه با بارِ اول مفهوم یا مطلبی رو کامل متوجه نشدین سعی کنین خیلی نگران نشین. با انجامِ تمرینها و برگشت به مفاهیم، درکِ خوبی از برنامهنویسیِ تابعی پیدا میکنین.
تمرینهای چند فصلِ اول طوری طراحی شدن تا شما رو سریعاً با گرامر ِ هسکل و تایپ سیگنچرها آشنا کنن، ولی انتظارِ سختتر شدنِ تمرینها با هر فصلِ بعدی رو داشته باشین. هر جا که میشد، سعی کنین نمونه کدها و تمرینها رو اول توی ذهنتون استدلال کنین، بعد برای تست کردن، تایپِشون کنین (بنویسین)، حالا چه تویِ REPL*، چه توی یه فایلِ منبع. این کار قابلیتِ درک و استدلالِ برنامهها و همینطور خودِ هسکل رو خیلی بیشتر میکنه. تمرینهای آخری ممکنه یه کم سخت باشن. اگه برای مدتِ طولانی روی یه تمرین گیر کردین، رَدِش کنین و یه روز دیگه دوباره برین سراغش.
این مخففِ read-eval-print loop ِه، که به ترتیب میشه: خوندن، محاسبه، چاپ، تکرار (حلقه). یه محیط یا شِل (shell) ِمحاورهای برای برنامهنویسی که بیانیهها رو محاسبه، و نتیجهشون رو در همون محیط برمیگردونه. اسمِ REPL ی که ما استفاده میکنیم، GHCi ِه؛ i برای interactive (تعاملی).
ما ترکیبی از مسائلِ انتزاعی و عملی رو برای استفاده از هسکل در پروژههای متنوعی پوشش دادیم. تجربهی کریس در سیستمهای بکاِند ِ تولیدی، و فرانتاِند ِ برنامههایِ تحتِ وب هست. جولی یه زبانشناسه، و تحصیلاتش در رشتهی معلِمیه؛ یادگرفتنِ هسکل اولین تجربهش با برنامهنویسیِ کامپیوتر بوده. و این کتاب به کمکِ همهی این تجربهها اولویتبندی شده. هدفِ ما اینه که به شما کمک کنیم تا نه تنها کدهای تابعی با امنیتِ تایپی بنویسین، بلکه طوری خوب و عمیق یاد بگیرین که با توجه به علایق و اولویتهاتون، اگه خواستین بتونین پروژههای پیشرفتهترِ هسکل رو دنبال کنین.
هر فصل به جنبههای مختلفِ یک موضوعِ بخصوص متمرکز شده. با یه معرفی کوتاه از جبرِ لاندا* شروع میکنیم. ربطش به برنامهنویسی چیه؟ همهی زبانهای برنامهنویسیِ تابعی بر پایهی جبرِ لاندا درست شدن، و یه آشناییِ اجمالی با جبرِ لاندا، در آینده به هسکلنویسیتون کمک میکنه. برای مثال اگه جبر لاندا رو متوجه بشین، دیگه فهمیدنِ یکی از قابلیتها به اسمِ currying اصلاً کاری نداره.
م. جبرِ لاندا یا Lambda Calculus. این لاندا همون حرفِ یونانی ِه (λ). درسته که تلفظِ صحیحِش لامبدا، یا درستتر بگیم لَمبدا ِه، ولی به خاطرِ جا افتادگیش، لاندا عموماً خواناتره.
چند فصلِ بعد، بیانیهها و توابعِ پایهی هسکل، چندتا عملیاتِ ساده روی string ها (نوشتهها)، و چندتا تایپِ اساسی رو پوشش میدن. ممکنه به شدت وسوسه بشین که از گوشهکنارِ چندتا فصلِ اول بزنین یا کلاً رَدِشون کنین (مخصوصاً اگه قبلاً برنامهنویسی کرده باشین)، ولی خواهش میکنیم این کار رو نکنین. حتی اگه اون فصلهای اول مفاهیمی رو میگن که بلدین، وقت گذاشتن برای آشنایی و راحتی با گرامر ِ خلاصهی هسکل، درکِ کاملِ فرقهای بین کار توی REPL در مقابلِ استفاده از فایلهای منبع، و آشنایی با پیغامهای خطای (گاهاً مبهم) ِکامپایلر خیلی مهمه. قطعاً ایرادی نداره سریع تمومشون کنین، فقط ردِشون نکنین.
بعد از اون چندتا فصل، دیگه هم گستردهتر پیش میریم، هم عمیقتر. وقتی کتاب رو تموم کنین، نه تنها یاد میگیرین موندها چی هستن، بلکه میتونین در برنامههای خودتون خیلی خوب ازشون استفاده کنین و جبرِ زیرِش رو درک کنین. قول میدیم – واقعاً همینطور میشه. تنها خواهشی که داریم ازتون اینه که بعدش نرین روی بلاگتون یه آموزِشِ موند بنویسین و موندها رو به دُلمهی هالوپینو تشبیه کنین!
میتونین توی هر فصل انتظار این موارد رو داشته باشین:
افزایشِ تعداد تابعهای استانداردی که بلدین؛
آشنایی با الگوهای گرامری ِ پیشرفتهتری که بر پایهی الگوهای قبلی درست شدن؛
یاد گرفتنِ پایههای نظری برای درکِ طرزِ کارِ هسکل؛
مثالهای واضح و عملی از نحوهی خوندنِ کدِ هسکل؛
نمایشِ قدمبهقدم برای نوشتنِ تابعهای خودتون؛
توضیحاتی برای طرزِ خوندنِ پیغامهای خطای رایج و نحوهی اجتناب از اون خطاها؛
تمرینهایی با سختیهای متنوع؛
تعاریفِ لغاتِ مهم.
تعاریف رو در آخرِ اکثرِ فصلها آوردیم. البته هر لغت در طولِ فصل هم تعریف شده، اما یه تعریفِ مستقل هم در آخر فصلها برای دوره نوشتیم. اینطوری اگه بینِ دوتا فصل کمی فاصله بیوفته، با خوندنِ اون تعاریف، براتون یادآوری میشه که تا اونجا چه چیزهایی یاد گرفته بودین. هر موقع هم فکر میکنین یه دوره لازم دارین، راحت میتونین پیداشون کنین.
در آخرِ اکثرِ فصلها یه سری منابعِ پیشنهادی هم برای مطالعه نوشتیم. مسلماً مطالبِ واجبی نیستن، ولی برای ما خیلی مفید بودن و فکر کردیم که ممکنه به شما هم در درکِ بهترِ مطالبی که در طولِ فصل خوندین کمک کنن.