مَکبِدِغ - قسمت دوم

آیا (f(x همواره خروجی معیّنی دارد؟

نویسنده: سید علیرضا هاشمی


آن‌چه گذشت

تو متن قبل از سریِ مکبدغ، گفتیم که ما آدم‌ها با کلمات فکر می‌کنیم! و برای مثال، منِ نویسنده که تو دانشگاه کامپیوتر می‌خونم، با واژه‌ی «درخت» آشنایی دارم و اگه بهم بگن به یه شرکت با تعداد زیادی کارمند فکر کن، تصورم از اون شرکت یه درخت مثل شکل زیره:

راستی بگم منظورم از درخت، مفهومیه که تو نظریه‌ی گراف هست، نه درختی که تو خاک رشد می‌کنه و شاخه و برگ داره! حالا جلوتر به درختِ شاخ و برگ‌دار هم می‌رسیم :))

تو این سریِ مکبدغ می‌خوایم کلمه‌ی کامپیوتری دیگه‌ای رو بررسی کنیم؛ کلمه‌ای که اصلاً متعلق به ریاضیه و بعداً به دنیای کامپیوتر اومده. حالا اونقدرا هم مهم نیست، ریاضی و کامپیوتر که این حرف‌ها رو با هم ندارن :)

تابع

«تابع» همون کلمه‌ست. احتمالاً می‌دونیم که تابع یه ضابطه‌ای داره، یه ورودی می‌گیره و اون ضابطه رو روی اون ورودی اعمال می‌کنه تا حاصل تابع به دست بیاد. خیلیا تابع رو به ماشینی تشبیه می‌کنن که یه چیزایی رو ورودی می‌گیره، روشون یه کاری می‌کنه و در نهایت یه چیزی بهمون خروجی می‌ده.

مثال از تابعِ غیرریاضی‌ای و غیرکامپیوتری هم که تا دلتون بخواد تو دنیای واقعی هست؛ همین موبایل یا لپ‌تاپی که دستتونه رو در نظر بگیرید. شما بهش برق و اینترنت و چند تا کلیک ورودی می‌دین، یه سری پردازش روشون انجام می‌شه و تهش متن یا عکس یا صوت مورد نظر بهتون خروجی داده می‌شه.

همین متنی که دارید می‌خونید هم خروجیِ تابعِ مغز منه! به مغز من خون و اکسیژن و مواد غذایی و یه موضوع اولیه وارد شده، روش یه سری پردازش و فعل و انفعالات انجام شده و تهش نتیجه‌ی نهایی که همین متنه، از مغز من خارج شده.

یه مثال جالب دیگه هم درخته. مثالی که واقعاً برای خودم هم عجیبه. اول کار یه دونه دونه داریم و این یه دونه دونه تنها ورودی‌هایی که می‌گیره خاک و آب و هواست، ولی تهش از همین یه دونه دونه، یه درخت تنومد و گل و میوه درمی‌آد.

دقت کردین؟ ذهن من با داشتن مفهومی به نام تابع، داره به خیلی چیزا به چشم تابع نگاه می‌کنه؛ لپ‌تاپ، مغز، درخت. حالا اگه نگاهمون رو یه ذره وسعت بدیم، به نظرتون می‌تونیم ادعا کنیم همه‌ی مفاهیم و موجودات جهان تابعن؟! ادعایی که خیلی بزرگه...

که چی؟

خب، من الان به چشم تابع به چیزهای مختلف نگاه کردم، فایده‌ش چیه؟ اصلاً تو همون ریاضی، به نظرتون چرا تابع تعریف می‌کنیم؟ برای مثال بیاید تابع f رو اینجوری در نظر بگیریم:

f(x) = 3x^7 + 5x^4 - x^2 + 10x - 8

الان تعریف‌کردنِ f چه معنایی داره؟

نکته‌ی مثبت

به نظر من بزرگ‌ترین نکته‌ی مثبت تابع اینه که پیچیدگی‌های درونی خودش رو از شما پنهان می‌کنه! همین f رو شما می‌تونین به صورت (f(x یا به صورت 3x^7 + 5x^4 - x^2 + 10x - 8 بنویسین. کدومش راحت‌تر و خلاصه‌تره؟ تو یه مثال دیگه، وقتی شمای باغدار به بذر یک درخت به چشم تابع نگاه می‌کنید، اصلا به این فکر نمی‌کنید که چه فعل و انفعالاتی توی اون بذر انجام میشه که تبدیل به درخت شه. یا مثلا همین موبایل یا لپ‌تاپی که جلوی رومونه، هیچ‌وقت فکر کردین وقتی من فلان دکمه‌ی موبایل یا لپ‌تاپ رو می‌زنم، اون پشت داخل خود موبایل یا لپ‌تاپ چه اتفاقی می‌افته؟

همه‌ی این‌ها از اثرات تفکر تابعیه؛ تفکری که خیالمون رو راحت می‌کنه. دیگه نمی‌خواد ذهنمون درگیر جزئیات داخلی باشه. صرفا ورودی‌های مناسب تابع رو تامین می‌کنیم و بقیه‌ش رو می‌سپریم به خودِ تابع تا خروجی مورد نظر رو بهمون بده.

نکته‌ی منفی

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

شما همین الان یه سکه رو بندازین بالا! همین الان هم یه سکه رو بندازین بالا! بین این دو جمله حدودا ۲-۳ ثانیه فاصله بود. آیا جفت این سکه‌ها مثل هم اومدن یا این که فرق داشتن؟

اگه نخوایم بحث احتمالات رو بیاریم وسط، می‌تونین دو تا بذر مشابه رو تو خاک بکارین و بعد از چند ماه ببینین که دو تا درخت شبیه به هم رشد نکردن، اصلا شاید یکی از بذرها سبز هم نشده باشه. الله علم!

جمع‌بندی

بسیار خب! به نظرم تا همینجا کافیه. یکم ذهنمون بیشتر با تابع آشنا شد و تو این فضا خیس خورد. ادامه‌ی بحث بمونه برای سری بعدی که قراره در مورد اون ادعا بزرگه صحبت کنیم. در کل به نظرم نگاه تابعی‌داشتن خیلی جالبه! امتحانش کنین :) مثلاً بیاین به این فکر کنین که رستا چه‌جوری با نگاه تابعی‌داشتن می‌آد رویدادهاشو برگزار می‌کنه یا رئیس‌جمهور یه مملکت چه‌جوری با نگاه تابعی‌داشتن، کل کشور رو می‌گردونه. هم‌چنین تا سری بعدی مکبدغ به نکات منفیِ نگاه تابعی هم فکر کنید و ببینید آیا می‌تونید براشون جوابی پیدا کنید یا نه. اگه دوست داشتین یه جستجویی در مورد کلمه‌ی deadlock هم بکنید که بعد از تابع به سراغ deadlock می‌ریم!