۱ - ۳تابع چیه؟

اگه لغت لاندا رو کنار بذاریم، احتمالاً می‌دونین تابع چیه. تابع رابطه‌ای بین یک set یا مجموعه از ورودی‌های ممکن و یک مجموعه از خروجی‌های ممکنه. تابع این رابطه رو تعریف می‌کنه و نمایش میده. وقتی یه تابع، مثل تابع جمعِ دو ورودی رو اعمال می‌کنین، تابع اون دو ورودی رو به یه خروجی (مجموعِ دو ورودی) نگاشت میده.

برای مثال، یه تابعِ ‏‎f‎‏ رو فرض کنیم که رابطه‌های زیر رو تعریف می‌کنه. مقدار اول ورودی، و مقدار دوم خروجیه:

f(۱) = Af(۲) = Bf(۳) = C

مجموعه‌ی ورودی {۳ ,۲ ,۱} و مجموعه‌ی خروجی {A, B, C} هست*. نکته‌ی مهم در تعریف این رابطه‌ها اینه: این تابعِ فرضیِ ما، به ازای ورودی ۱ همیشه مقدار A رو برمی‌گردونه – بدون استثنا!

*

اگه بخوایم از لغات دقیقتری استفاده کنیم، مجموعه‌ی ورودی دامنه، و مجموعه‌ی خروجی‌های ممکن، همدامنه نام دارن. هم دامنه‌ها و هم همدامنه‌ها مجموعه‌ای از مقادیر یکتا هستن. زیرمجموعه‌ی همدامنه که فقط شامل خروجی‌های ممکنِ تابع به ازای ورودی‌های مختلف‌ه، تصویر نام داره (م. فرق تصویر با همدامنه وقتی تایپ‌ها رو توضیح بدیم واضح‌تر میشه). نگاشت بین دامنه و تصویر الزاماً یک‌به‌یک نیست؛ گاهی پیش میاد چند ورودی به یه خروجی نگاشت میشن، مثل تابعی که یا ‏‎True‎‏ برمی‌گردونه یا ‏False‎‏. چنین تابعی خیلی از ورودی‌های مختلف رو به یکی از اون دو تا نگاشت میده. فقط دقت کنید که برعکس‌ش درست نیست، یعنی یه تابع به ازای یک ورودی نباید چندتا خروجی بده.

در مقابل، این یک تابعِ معتبر نیست:

f(۱) = Xf(۱) = Yf(۲) = Z

برمی‌گردیم به شفافیتِ مرجعی که اشاره کردیم: با یک ورودیِ مشخص، خروجی باید قابل پیش‌بینی باشه.

تابع زیر به نظرتون معتبره؟

f(۱) = Af(۲) = Af(۳) = A

هست، داشتنِ یک خروجی برای بیشتر از یک ورودی اعتبار تابع رو نقض نمی‌کنه. فرض کنین برای مثال، تابعی که کوچکتر بودن از ۱۰ رو بررسی می‌کنه برای ورودی‌های کوچکتر از ۱۰ باید ‏‎True‎‏ برگردونه و برای بقیه‌ی حالتها، ‏‎False‎‏. در این مورد، تعدادی ورودیِ مختلف خروجیِ ‏‎True‎‏ میدن؛ ولی ورودی‌های خیلی بیشتری خروجیِ ‏‎False‎‏. ورودی‌های متفاوت ممکنه خروجی‌های یکسان بدن.

نکته‌ی مهم اینه که رابطه‌ی بین ورودی‌ها و خروجی‌ها توسط تابع تعریف شده، و اینکه وقتی ورودی و تعریفِ تابع رو می‌دونین، میشه خروجی رو پیش‌بینی کرد.

در مثال بالا ما رابطه‌ای بین ورودی‌ها و خروجی‌ها نشون ندادیم. تو مثال بعدی تابعِ ‏‎f‎‏ این رابطه رو تعریف می‌کنه:

f(x) = x + ۱

این تابع یه آرگومان، که اسمشو گذاشتیم ‏‎x‎‏، می‌گیره. رابطه‌ی بین ورودی، ‏‎x‎‏، و خروجی در بدنه‌ی تابع تعریف شده. یکی به هر مقداری که ‏‎x‎‏ داره اضافه می‌کنه و اون جواب رو برمی‌گردونه. هر وقت این تابع رو به یه مقدار اعمال کنیم، مثلاً ۱، به جای اون ‏‎x‎‏، مقدار رو میذاریم:

f(۱) = ۱ + ۱

‏‎f‎‏ که به ۱ اعمال بشه، مساوی با ‏‎۱ + ۱‎‏ میشه. این به ما میگه که چطوری ورودی رو به یه خروجی نگاشت کنیم: ۱ که به ۱ اضافه بشه، میشه ۲:

f(۱) = ۲

چنین درکی از توابع – به عنوانِ نگاشتِ مجموعه‌ای از ورودی‌ها به مجموعه‌ای از خروجی‌ها – برای فهمیدنِ برنامه‌نویسیِ تابعی حیاتیه.