برنامه نویسی فانکشنال : واژگان

برای درک بهتر نوشته‌های این بخش، باید ابتدا بخش‌های زیر را مطالعه کرده باشید:

در توضیحاتی که در ادامه خواهیم داد از واژه‌ها و عبارتی استفاده کرده‌ایم که بهتر است قبل از روبر شدن با آن‌ها، ابتدا معنا و مفهوم آن‌ها را درک کنید:

انتزاع (Abstract)

اکثر متون فارسی این واژه را «انتزاع» معنی کرده‌اند. احتمال اینکه حتی بعد از معنی کردن این واژه باز هم مفهموم آن برای شما آشکار نشود بسیار زیاد است! دیکشنری آکسفورد، معنی متناظر این کلمه را این گونه ارائه می کند (به انگلیسی):

«ایده‌ای که در فکر وجود دارد، اما دارای موجودیت یا سازه‌ی فیزیکی نیست»

برای مثال عشق، نفرت، راست‌گویی، … مفاهیمی انتزاعی هستند. در علوم کامپیوتری هم مفاهیم انتزاعی بسیاری وجود دارد. مفاهیمی که ما می‌توانیم آن‌ها را به طور ذهنی ترسیم کنیم و از نظر منطقی راجع به آن‌ها بحث کنیم، اما دارای ماهیت فیزیکی نمی‌باشند. یا اینکه ماهیت فیزیکی‌ آن‌ها با ماهیت انتزاعی آن‌ها بسیار متفاوت است. فرضا آرایه، یک ساختار داده‌ایست که هر برنامه‌نویسی با آن آشناست؛ اما واقعا نمی‌توان هیچ موجودیت فیزیکی برای آرایه قائل شد. نمی توانیم چیزی را دنیای واقعی بسازیم و بگوییم که منظور ما از آرایه این جسم ایست می‌بینید! اما از لحاظ منطقی، آرایه برای ما ساختاری کاملا شناخته شده است. امیدواریم که بعد از خواندن این توضیحات توانسته باشیم مفهوم انتزاع را منتقل کنیم، چون در متون کامپیوتری بسیار با آن برخورد خواهید کرد.

فرآیند پردازشی (Computational process)

فرآیند پردازشی، فرآیندی است انتزاعی که فلسفه‌ی وجودی کامپیوترهاست: پردازش!

فرآیند پردازشی چه چیزی را پردازش می کند؟
یک موجودیت انتزاعی دیگر که آن را «داده» یا دیتا خطاب می‌کنیم. داده، مجموعه اطلاعاتی است که نیاز به پردازش آن‌ها داریم.

فرآیند پردازشی چگونه داده ها را پردازش می کند؟
بر مبنای الگویی از دستورالعمل‌ها که آن‌ها را «برنامه» خطاب می‌کنیم. و «کد»، متنی است که این الگو را برای کامپیوتر تشریح می‌نماید.

بنابراین اگر درست به قضیه دقت کنیم، تمام کاری که یک کامپیوتر انجام می‌دهد پردازش داده هاست:
«داده‌ پردازش می‌شود تا داده‌ی جدیدی تولید شود‌. این کار با تغییر شکل داده‌ی ورودی به داده‌ی خروجی انجام می‌پذیرد.»

می توانید تمام وظایف کامپیوتر را به طریقی با این تعریف منطبق کنید:

  • فرضا هنگام عمل جمع، اعداد ۳ و ۴ به عنوان داده‌ی ورودی پردازش می‌شوند و داده‌ی جدیدی با مقدار ۷ تولید می‌گردد.
  • یک فایل تصویری jpg به عنوان داده‌ی ورودی پردازش می‌شود و پس از تبدیل، داده‌ی جدیدی تحت یک فایل png تولید می‌گردد.
  • یک متن به عنوان ورودی پذیرفته می‌شود، و پس ارسال آن روی سوکت، آن متن به عنوان یک داده‌ی جدید در کامپیوتر دیگری ظاهر می‌شود.

درک این مطلب بسیار مهم است که:

«هدف اصلی برنامه نویسی، تغییر شکل داده‌ی ورودی به داده‌ی خروجی است.»

اثر جانبی (Side Effect)

نکته‌ی قابل ذکر این است که در متون برنامه نویسی وقتی حرف از «کامپیوتر» به میان می‌آید، اکثر اوقات منظورمان واحد پردازنده و حافظه‌ی اصلی است، نه آن چیزی که شما در قالب کیس و لپ‌تاپ و موبایل می‌بینید. با ذکر این نکته، نظر شما را به سومین گزینه از مثال بالا جلب می‌کنم. در این مثال، کامپیوتر در حین مراحلی که باید طی کند تا داده‌ی جدیدی را به عنوان خروجی تولید نماید، دست به دامن یک سری عناصر جانبی مانند سیستم شبکه شده است. از آن جایی که برآورده کردن تمام خواسته‌های ما در محدوده‌ی کاری پردازنده و حافظه‌ی اصلی نیست، بسیار پیش می‌آید که کامپیوتر از این گونه عناصر جانبی برای رسیدن به هدفش کمک می‌گیرد.

متاسفانه این عناصر جانبی، قالبا رفتارهایی غیر قابل پیش‌بینی دارند و همین دلایل باعث می‌شود تا در کار کامپیوتر تاثیرات متفاوتی داشته باشند. فرضا اگر در میانه‌ی فرستادن متن مورد نظر، برای شبکه مشکلی پیش بیاید اوضاع چگونه خواهد شد؟ هر چیزی که از محدوده‌ی کنترل واحد پردازشگر و حافظه‌ی اصلی خارج باشد، به عنوان یک عامل جانبی به حساب می‌آید و به تناسب آن، می‌تواند تاثیراتی جانبی در روند کاری پردازش ایجاد کند. برای مثال، تمام اعمال ورودی و خروجی (I/O)، عواملی جانبی هستند و تاثیراتی جانبی در بر خواهند داشت.

مقدار (Value)

مقدار، یک کمیت قابل اندازه گیری است. کمیتی که بتوان آن را از نظر «برابری» با دیگر کمیت‌ها مقایسه کرد.

موجودیت، هویت (Identity)

موجودیت، مفهومی است که ما برای مجموعه‌ای از مقادیر که در طول زمان به طریقی با یکدیگر ارتباط دارند به کار می‌بریم.

نام (Name)

نام، در واقع مانند یک برچسب است. از آن برای ارجاع راحت‌تر به موجودیت‌ها استفاده می‌کنیم.

زمان (Time)

زمان، یک حد نسبی است و دارای اندازه‌ی مشخصی نمی‌باشد. فقط این امکان را به ما می‌دهد تا مشخص کنیم که آیا رخدادی قبل از یک رخداد دیگر به وقوع پیوسته یا بعد از آن! (دقت کنید مقیاس‌هایی مانند ثانیه یا دقیقه تنها مفاهیمی انتزاعی هستند که ما برای درک راحت‌تر زمان آن‌ها را ابدا کرده ایم)

وضعیت (State)

وضعیت، مقدار یک موجودیت در مقطع مشخصی از زمان است. با این تعریف، وضعیت تغییر ناپذیر است؛ تغییر در وضعیت فعلی، باعث رخ دادن یا ایجاد یک وضعیت جدید می‌شود (چون زمان همیشه رو به جلو حرکت می کند!)

حالا که با این مفاهیم پیش نیاز آشنا شدیم، بحث خود را در بخش بعدی ادامه می دهیم: کنترل وضعیت!