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

من به طور خلاصه به شما می گویم که چگونه کار می کند. تابع بلوکی از دستورالعمل هاست که برنامه شما می تواند آن ها را فراخوانی کند. هنگام دسترسی به هدر این بلوک (نام تابع) اجرا می شود و برخی از اقدامات مشخص شده توسط برنامه نویس را انجام می دهد. پس از آن این بلوک مقدار دریافتی را برمی گرداند و به برنامه اصلی ارسال می کند. بگذارید در عمل توضیح دهم.

به طور کلی، همه چیز اینگونه به نظر می رسد. به طور خلاصه توضیح می دهم. ما یک متغیر ایجاد می کنیم و نتیجه اجرای تابع myfunc را به آن اختصاص می دهیم، که به نوبه خود مقدار مربع کردن تعدادی اعداد را محاسبه می کند. توابع بلافاصله در هنگام راه اندازی برنامه اجرا نمی شوند، بلکه فقط زمانی که فراخوانی می شوند. شاید کمی گیج کننده باشد، اما این طور است.

چگونه یک تابع را فراخوانی کنیم؟

برای فراخوانی یک تابع، باید آن را ایجاد کنید. اگرچه توابع داخلی نیز وجود دارد. به عنوان مثال، این: cos, sin, md5, count, absو غیره برای فراخوانی آنها فقط باید مقدار مورد نظر را به متغیر اختصاص دهید.

یک آرگومان تابع مقداری است که هنگام فراخوانی به آن ارسال می کنید. آرگومان های تابع در پرانتز قرار می گیرند. هنگامی که یک تابع ایجاد می کنید، نام شرطی آرگومان ها را مشخص می کنید. سپس این نام ها را می توان در بدنه تابع به عنوان متغیرهای محلی استفاده کرد. بیایید به توابعی که خود کاربر ایجاد می کند برگردیم. این کار خیلی راحت انجام می شود. ابتدا بدنه تابع ایجاد می شود:

تابع hello() ( echo "Hello, world!";)

سپس آن را صدا می زنیم. و اگر هیچ پارامتری نداشته باشد، فقط پرانتز قرار می دهیم. برای فراخوانی این تابع، فقط از خط زیر استفاده می کنیم: سلام()؛. هر تابعی همچنین می تواند با استفاده از یک مقدار برگرداند کلمه رزرو شده برگشت. این دستور اجرای تابع را خاتمه می دهد و مقدار بازگشتی را به برنامه فراخوانی ارسال می کند. تابع sum($first, $second) ($r=$first + $second; return $r;) echo sum(2,5); نتیجه اجرای برنامه برابر با 7 متغیر محلی و جهانی خواهد بود

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

$per="Dima"; function primer() // Do: خروجی متغیر محلی ( echo "My name is ".$per; ) echo primer();

در این صورت عبارت My name is روی صفحه ظاهر می شود. به این معنی که در داخل تابع primer، متغیر $per ایجاد شده و به طور پیش فرض به آن اختصاص داده شده است مقدار صفر. به منظور جلوگیری از چنین موانعی، باید از اپراتور استفاده کنید جهانی. بیایید کد بالا را بر این اساس اصلاح کنیم:

$per="Dima"; function primer() // اجرا می کند: خروجی متغیر جهانی ( global $per; echo "My is ".$per; ) echo primer();

اکنون همه چیز باید خوب باشد - مشکل حل شده است. فقط فراموش نکنید که اگر تابع مقدار یک متغیر خارجی را تغییر دهد، چنین تغییری بر کل برنامه تأثیر می گذارد، بنابراین باید با دقت از این عملگر استفاده کنید!

توابع با دو یا چند آرگومان

برخی از آرگومان‌های ارسال شده به یک تابع را می‌توان اختیاری کرد و باعث می‌شود که تابع کمتر درخواست کند. مثال زیر این را به وضوح نشان می دهد:

... فونت تابع ($text, $size=5) // Do: اندازه فونت خروجی ( echo " ".$text.""; ) font("سلام
",1)؛ font("سلام
",2)؛ font("سلام
",3)؛ font("سلام
",4)؛ font("سلام
",5)؛ font("سلام
",6)؛ font("سلام
");

به طور پیش فرض اندازه فونت 5 است. اگر پارامتر دوم تابع را حذف کنیم، برابر با این مقدار خواهد بود.

نتیجه

قبل از خداحافظی، می خواهم توجه شما را به یک توصیه جلب کنم. این شامل قرار دادن تمام توابعی است که نوشته اید در یک فایل (به عنوان مثال function.php). و سپس، در فایلی که باید تابع را فراخوانی کنید، فقط باید function.php را وارد کنید و همه چیز برای استفاده آماده خواهد بود. این کار درک منطق برنامه شما را بسیار آسان تر می کند. برای اتصال از:

include_once("function.php");

require_once("function.php");

اگر ماهیت موضوع مورد بررسی در این مقاله را درک کرده اید، مطمئن هستم که می توانید به راحتی از توابع در برنامه های خود استفاده کنید. یک بار دیگر، این کار برای این است که آنها را قابل ویرایش و استفاده مجدد تر کند.

توابع بر روی اعدادزبان VB دارای توابع ریاضی زیر است: عضلات شکم(ایکس) - محاسبه ماژول؛ مربع(ایکس) - محاسبه جذر، آtn(ایکس) - محاسبه مماس قوس؛ cos(ایکس) - محاسبه کسینوس؛ گناه(ایکس) - محاسبه سینوس؛ برنزه(ایکس) - محاسبه مماس؛ ورود به سیستم(ایکس) - محاسبه لگاریتم طبیعی، انقضا(ایکس) - محاسبه توان، که در آن ایکس- آرگومان تابع از نوع عددی. برای محاسبه مقادیر توابعی که در زبان VisualBasic وجود ندارند، لازم است از فرمول های شناخته شده از ریاضیات استفاده شود.

اصطلاح y= در VB به این صورت نوشته می شود: y=sin(x^2)+sqr(tan(x))*(x+5)^ (1/5).

آرگومان تابع باید در پرانتز نوشته شود.

توابعی برای تبدیل یک مقدار از یک نوع به نوع دیگر.زبان برنامه نویسی VB توابعی را برای تغییر نوع داده یک مقدار فراهم می کند. به عنوان مثال، یک متغیر a از نوع Double و یک متغیر s از نوع String وجود دارد.

برای نوشتن یک متغیر a به یک متغیر s، باید یک تبدیل نوع S=CStr(a) و برای نوشتن متغیر s به متغیر a–a=CDbl(s) انجام داد.

توابع VB برای تبدیل نوع مقدار:

CStr - تبدیل به رشته.

CByte - تبدیل به بایت.

CINT - تبدیل به عدد صحیح؛

CLng - تبدیل به Long.

CSng - تبدیل به Single.

CDbl - تبدیل به Double.

2.6. نمایش انواع داده ها در حافظه کامپیوتر

برای نمایش اطلاعات در حافظه کامپیوتر (اعم از عددی و غیر عددی)، از روش رمزگذاری باینری استفاده می شود.

سلول ابتدایی حافظه کامپیوتر دارای طول 8 بیت (بایت) است. هر بایت شماره مخصوص به خود را دارد (نامیده می شود نشانی). بزرگترین دنباله بیت هایی که یک کامپیوتر می تواند به طور کلی پردازش کند نامیده می شود کلمه ماشینی. طول کلمه ماشین بستگی به طول کلمه پردازنده دارد و می تواند 16، 32، 64 بیت و غیره باشد.

رمزگذاری کاراکتر یک بایت برای رمزگذاری کاراکترها کافی است. در این مورد، 256 کاراکتر را می توان نشان داد (با کدهای اعشاریاز 0 تا 255). مجموعه کاراکترهای رایانه‌های شخصی سازگار با رایانه شخصی IBM اغلب توسعه‌ای از کد ASCII (کد استاندارد آمریکایی برای تبادل اطلاعات - کد استاندارد آمریکایی برای تبادل اطلاعات) است. در حال حاضر از نمایش دو بایتی کاراکترها نیز استفاده می شود.

نمایش اعداد صحیح در مکمل دو.محدوده مقادیر به تعداد بیت های حافظه اختصاص داده شده برای ذخیره سازی آنها بستگی دارد. حافظه n-bit می تواند ذخیره کند مقادیر مختلف به عنوان مثال، مقادیر از نوع Integer در محدوده -32768 (-2 15) تا 32767 (2 15 - 1) قرار دارند و 2 بایت (16 بیت) برای ذخیره سازی آنها اختصاص داده شده است. از نوع Long - در محدوده -2 31 تا 2 31 - 1 و در 4 بایت (32 بیت) قرار دارند.

برای نمایش بدون علامت اعداد باینری اعداد صحیح از 0 تا متغیر است
، و در نمایندگی امضا شده - از
قبل از
. در رایانه های مدرن، مرسوم است که طول n شبکه بیتی اعداد صحیح را مضرب 8 (یعنی یک عدد صحیح از بایت ها) انتخاب کنید.

در مورد نمایش یک کمیت با علامت، سمت چپ ترین (بالاترین) رقم اگر حاوی صفر باشد یک عدد مثبت و اگر حاوی یک باشد منفی است.

ارقام از راست به چپ شماره گذاری می شوند و از 0 شروع می شوند. در شکل. .2.2 شماره گذاری بیت ها را در یک کلمه ماشینی دو بایتی نشان می دهد.

برنج. 2.2. اچمقیاس بندی بیت در یک کلمه ماشینی دو بایتی

کد اضافیعدد مثبت همان عدد آن است کد مستقیم. کد مستقیم یک عدد صحیح را می توان به صورت زیر بدست آورد: عدد به آن ترجمه می شود سیستم دودوییمحاسبه، و سپس نماد باینری آن در سمت چپ با تعداد صفرهای ناچیز که توسط نوع داده ای که عدد به آن تعلق دارد، تکمیل می شود.

به عنوان مثال، اگر عدد 37 (10) = 100101 (2) به عنوان یک مقدار صحیح اعلام شود (شزده بیت امضا شده)، کد مستقیم آن 0000000000100101 و اگر یک مقدار Long باشد (با علامت سی و دو بیتی) خواهد بود. ، سپس کد مستقیم آن خواهد بود. برای نماد فشرده تر، نمایش هگزادسیمال کد اغلب استفاده می شود. کدهای به دست آمده را می توان به ترتیب به صورت 0025 (16) و 00000025 (16) بازنویسی کرد.

کد اضافی یک عدد صحیح منفی را می توان با استفاده از الگوریتم زیر بدست آورد:

    کد مستقیم ماژول شماره را بنویسید.

    آن را معکوس کنید (یکها را با صفر، صفرها را با یکها جایگزین کنید).

    یکی را به کد معکوس اضافه کنید.

برای مثال، بیایید کد مکمل این دو را 37- بنویسیم و آن را به عنوان یک مقدار Long (32 بیتی امضا شده) تفسیر کنیم:

    کد مستقیم شماره 37 است.

    کد معکوس؛

    کد اضافی یا FFFFFFDB (16).

هنگام به دست آوردن یک عدد با کد اضافی آن، ابتدا باید علامت آن را تعیین کنید. اگر عدد مثبت شد، به سادگی کد آن را به یک سیستم اعداد اعشاری ترجمه کنید. در مورد عدد منفی، الگوریتم زیر باید اجرا شود:

    عدد 1 را از کد کم کنید؛

    کد معکوس;

    ترجمه به سیستم اعشاریحساب کردن عدد حاصل را با علامت منفی بنویسید.

مثال ها.بیایید اعداد مربوط به کدهای اضافی را یادداشت کنیم:

    0000000000010111. چون صفر در معنی دارترین بیت نوشته می شود، نتیجه مثبت خواهد بود. این کد شماره 23 است.

    1111111111000000. کد یک عدد منفی اینجا نوشته شده است. ما الگوریتم را اجرا می کنیم: 1) 1111111111000000 (2) - 1 (2) = 1111111110111111 (2) ; 2) 0000000001000000; 3) 1000000 (2) = 64 (10) . پاسخ: -64.

هدف، واقعگرایانه: 1) قوانین توصیف توابع را مطالعه کنید. 2) مهارت های استفاده از توابع را هنگام نوشتن برنامه ها در C++ به دست آورید.

اطلاعات نظری

واحد اصلی برنامه ها در زبان C++ یک تابع است.

عملکرد- یک قطعه منطقی کامل و به روشی خاص طراحی شده از یک برنامه که دارای نام است. توابع به شما امکان می دهند وظایف محاسباتی بزرگ را به کارهای کوچکتر تقسیم کنید.

هر برنامه ++C لزوماً دارای تابعی به نام main است که بدنه برنامه است. برای همه توابع دیگر، اگر در برنامه وجود داشته باشند، نمونه های اولیه باید اعلام شوند - نمایش های شماتیک که نام و شکل هر تابع در برنامه را به کامپایلر می گوید.

نحو برای نمونه اولیه تابع با پارامترها:

return_value_type function_name (list_of_parameters_with_indication_of_types);

توابع در C++ استاندارد (کتابخانه ای) و قابل برنامه ریزی توسط کاربر هستند.

ویژگی های استاندارد

توضیحات توابع استاندارد در فایل های موجود در برنامه با استفاده از دستور #include یافت می شود. به چنین فایل هایی header می گویند. آنها پسوند h را دارند.

ارجاع نام تابع در برنامه اصلی را فراخوانی تابع می نامند.

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

y=sin(x); //تابع محاسبه سینوسی

تعریف تابع

به طور کلی توابع به صورت زیر تعریف می شوند:

return_value_type function_name (نوع پارامتر_name،...، نوع پارامتر_name)

عملکرد_بدن

ویژگی های قابل برنامه ریزی

کارکردهایی که یک برنامه نویس خودش ایجاد می کند، فرآیند نوشتن برنامه ها را ساده می کند، زیرا آنها:

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

    سطح ماژولار بودن برنامه را افزایش دهید، بنابراین خواندن، اصلاح و اصلاح خطاها آسان تر است.

مثال9 .1. بیایید یک تابع ایجاد کنیم که 65 کاراکتر "*" را در یک ردیف چاپ کند. برای اینکه این تابع در برخی زمینه ها کار کند، در برنامه چاپ سربرگ گنجانده شده است. این برنامه از توابع اصلی () و () stars تشکیل شده است.

// سربرگ

#عبارتند از

const int Limit=65;

void stars (void); // نمونه اولیه تابع stars().

کوت<<"Moscow Institute of Electronic Engineering"<

// تعریف تابع stars().

برای (count=1; count<=Limit; count++)

ما به مثالی از یک تابع ساده نگاه کردیم که هیچ آرگومانی ندارد و هیچ مقداری را بر نمی گرداند.

پارامترهای تابع

استفاده از پارامترهای تابع را به عنوان مثال در نظر بگیرید.

مثال9. 2. بیایید تابع space() را بنویسیم، که آرگومان آن تعداد فضاهایی است که این تابع باید چاپ کند.

#define address " Zelenograd"

#تعریف نام "موسسه مهندسی الکترونیک مسکو"

#تعریف بخش "انفورماتیک و برنامه نویسی"

const int LIMIT=65;

#عبارتند از

فضای خالی (شماره int)؛

کوت<

spaces=(LIMIT - strlen(name))/2; // محاسبه کنید چقدر

// نیاز به فضا دارد

کوت<

فضا((LIMIT - strlen(بخش))/2); // آرگومان یک عبارت است

کوت<

// تعریف تابع stars().

برای (count=1; count<=LIMIT; count++)

// تعریف تابع ()space

فضای خالی (شماره int)

برای (count=1; count<=number; count++)

عدد متغیر را آرگومان رسمی می نامند. این متغیر هنگام فراخوانی تابع، مقادیر آرگومان واقعی را می گیرد. به عبارت دیگر، استدلال رسمییک متغیر در تعریف زیربرنامه نامیده شده است و استدلال واقعی- مقدار خاصی که توسط برنامه فراخوان به این متغیر اختصاص داده شده است.

اگر بیش از یک آرگومان برای برقراری ارتباط با یک تابع خاص مورد نیاز است، می‌توانید همراه با نام تابع، فهرستی از آرگومان‌های جدا شده با کاما را مشخص کنید:

void printnum (int i، int j)

(کوت<<"Координаты точек”<< i << j <

مقدار ورودی تابع به دلیل وجود قابل پردازش است بحث و جدل; مقدار خروجی با استفاده از کلمه کلیدی بازگشت بازگردانده می شود.

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

عوارض جانبی

توابع و رویه ها

در برخی از زبان های برنامه نویسی (به عنوان مثال، در پاسکال)، توابع و رویه ها (زیرروال هایی که مقادیر را برمی گردانند) به وضوح توسط نحو زبان متمایز می شوند. در برخی دیگر - به عنوان مثال، در زبان C - رویه‌ها یک مورد خاص (زیر مجموعه) از توابع هستند که مقداری از نوع (شبه‌نوع) void - یک مقدار خالی را برمی‌گردانند.

استدلال ها و گزینه ها

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

عملکرد بدون آرگومان

چنین تابعی به هیچ آرگومان نیاز ندارد.

همچنین ببینید

پیوندها

  • توابع PHP نحو و نمونه هایی از استفاده از توابع PHP

بنیاد ویکی مدیا 2010 .

ببینید «عملکرد (برنامه‌نویسی)» در فرهنگ‌های دیگر چیست:

    ویکی‌واژه دارای مقاله «عملکرد» است.

    تابع خرد در برنامه نویسی تابعی است که هیچ عمل معنی داری انجام نمی دهد، نتیجه خالی یا داده های ورودی را بدون تغییر برمی گرداند. معادل کلمه انگلیسی خرد است. مورد استفاده: برای وضوح زمانی که ... ... ویکی پدیا

    عملکرد روانی بالاتر: بهبودی- (ترمیم عملکردهای ذهنی بالاتر) بخشی از عصب روانشناسی که به مطالعه مکانیسم ها و روش هایی برای بازیابی عملکردهای عملکردهای ذهنی بالاتر، آسیب دیده به دلیل ضایعات مغز محلی مغز اختصاص دارد. بر اساس ایده هایی در مورد ... دایره المعارف بزرگ روانشناسی

    برنامه نویسی ریاضی یک رشته ریاضی است که به مطالعه تئوری و روش های حل مسائل مربوط به یافتن مادون های توابع بر روی مجموعه هایی از فضای برداری محدود بعدی که توسط قیود خطی و غیرخطی تعیین می شود ... ... ویکی پدیا

    در زمینه کامپیوتری، مفهوم وظایف شبکه برنامه نویسی یا برنامه نویسی شبکه نامیده می شود، کاملا شبیه به مفاهیم برنامه نویسی سوکت و برنامه نویسی کلاینت سرور است، ... ... ویکی پدیا

    تابع مرتبه بالاتر تابعی است که توابع دیگر را به عنوان آرگومان می گیرد یا تابع دیگری را در نتیجه برمی گرداند. ایده اصلی این است که توابع وضعیت مشابهی با سایر اشیاء داده دارند. ... ... ویکی پدیا

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

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

    تابع در برنامه نویسی نوعی زیربرنامه است. ویژگی که آن را از نوع دیگری از زیرروال‌های رویه متمایز می‌کند این است که تابع یک مقدار را برمی‌گرداند و فراخوانی آن می‌تواند در برنامه به عنوان یک عبارت استفاده شود. از دیدگاه ... ... ویکی پدیا

    برنامه نویسی، ریاضی- شاخه ای از ریاضیات کاربردی که به عنوان روشی در تحقیقات اقتصادی استفاده می شود. تئوری و روش‌هایی را برای حل مسائل اکسترمال شرطی توسعه می‌دهد، بخش اصلی دستگاه رسمی برای تجزیه و تحلیل مسائل کنترلی مختلف است. فرهنگ لغت بزرگ اقتصادی

اگر شما هم مانند من یک توسعه دهنده هستید، احتمالاً ابتدا پارادایم OOP را یاد گرفته اید. زبان اول شما جاوا یا C++ بود - یا اگر خوش شانس باشید، روبی، پایتون یا سی شارپ - بنابراین احتمالاً می دانید کلاس ها، اشیاء، نمونه ها و غیره چیست. آنچه شما قطعاً واقعاً نمی‌دانید، اصول اولیه آن الگوی عجیبی است که برنامه‌نویسی تابعی نامیده می‌شود، که نه تنها با برنامه‌نویسی OOP، بلکه با برنامه‌نویسی رویه‌ای، نمونه‌محور و سایر انواع برنامه‌نویسی تفاوت چشمگیری دارد.

برنامه نویسی کاربردی در حال محبوب شدن است - و دلیل خوبی دارد. خود این پارادایم جدید نیست: Haskell شاید کاربردی ترین زبان باشد و در دهه 90 سرچشمه گرفت. زبان هایی مانند Erlang، Scala، Clojure نیز تحت تعریف تابعی قرار می گیرند. یکی از مزایای اصلی برنامه نویسی کاربردی توانایی نوشتن برنامه هایی است که به طور همزمان کار می کنند (اگر قبلاً آنچه را فراموش کرده اید - با خواندن حافظه خود را تازه کنید) و بدون خطا - یعنی بن بست و ایمنی رشته شما را آزار نمی دهد.

برنامه نویسی تابعی مزایای زیادی دارد، اما حداکثر استفاده ممکن از منابع CPU به دلیل رفتار رقابتی مزیت اصلی آن است. در زیر به اصول اولیه برنامه نویسی تابعی می پردازیم.

مقدمه: همه این اصول اختیاری هستند (بسیاری از زبان ها به طور کامل از آنها پیروی نمی کنند). همه آنها نظری هستند و برای دقیق ترین تعریف پارادایم عملکردی مورد نیاز هستند.

1. همه توابع تمیز هستند

این قانون قطعاً اصلی ترین قانون در برنامه نویسی تابعی است. همه توابع خالص هستند اگر دو شرط را برآورده کنند:

  1. تابعی که با آرگومان های یکسان فراخوانی می شود همیشه همان مقدار را برمی گرداند.
  2. هیچ عارضه جانبی در طول اجرای عملکرد وجود ندارد.

قانون اول واضح است - اگر تابع sum(2,3) را فراخوانی کنم، انتظار دارم که نتیجه همیشه 5 باشد. خلوص تابع نقض می شود و این در برنامه نویسی تابعی مجاز نیست.

قانون دوم - بدون عوارض جانبی - ماهیت گسترده‌تری دارد. یک عارضه جانبی تغییر به چیزی غیر از عملکردی است که در حال حاضر اجرا می شود. تغییر یک متغیر در خارج از تابع، نوشتن در کنسول، پرتاب یک استثنا، خواندن داده ها از یک فایل همگی نمونه هایی از عوارض جانبی هستند که خلوص یک تابع را از بین می برند. ممکن است این یک محدودیت جدی به نظر برسد، اما دوباره فکر کنید. اگر مطمئن هستید که فراخوانی یک تابع چیزی "خارج" را تغییر نمی دهد، می توانید از این تابع در هر سناریویی استفاده کنید. این راه را برای برنامه نویسی رقابتی و برنامه های کاربردی چند رشته ای هموار می کند.

2. همه توابع درجه یک و درجه بالاتر هستند

این مفهوم یکی از ویژگی های FP نیست (در جاوا اسکریپت، PHP و زبان های دیگر استفاده می شود) - اما یک الزام است. در واقع، ویکی‌پدیا یک مقاله کامل به توابع درجه یک دارد. برای اینکه یک تابع درجه یک باشد، باید بتواند به عنوان یک متغیر تعریف شود. این اجازه می دهد تا تابع به عنوان یک نوع داده معمولی دستکاری شود و همچنان اجرا شود.

3. متغیرها تغییر ناپذیر هستند

اینجا همه چیز ساده است. در برنامه نویسی تابعی، نمی توانید یک متغیر را پس از مقداردهی اولیه تغییر دهید. شما می توانید موارد جدید ایجاد کنید، اما نمی توانید موارد موجود را تغییر دهید - و به لطف این می توانید مطمئن باشید که هیچ متغیری تغییر نخواهد کرد.

4. شفافیت نسبی کارکردها

ارائه یک تعریف درست از شفافیت نسبی دشوار است. من فکر می کنم دقیق ترین این است: اگر می توانید یک فراخوانی تابع را با مقدار بازگشتی جایگزین کنید، و وضعیت تغییر نمی کند، در این صورت تابع نسبتا شفاف است. این ممکن است واضح باشد، اما من یک مثال می زنم.

فرض کنید یک تابع جاوا داریم که 3 و 5 را اضافه می کند:

Public int addNumbers()( return 3 + 5; ) addNumbers() // 8 8 // 8

بدیهی است که هر فراخوانی به این تابع را می توان با 8 جایگزین کرد، به این معنی که تابع نسبتا شفاف است. در اینجا یک مثال از یک تابع مات است:

Public void printText() System.out.println("Hello World"); ) printText() // چیزی را برمی گرداند، اما "Hello World" را چاپ می کند.

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

5. برنامه نویسی تابعی بر اساس حساب لامبدا است

برنامه نویسی تابعی به شدت بر یک سیستم ریاضی به نام حساب لامبدا متکی است. من یک ریاضیدان نیستم، بنابراین وارد جزئیات نمی‌شوم - اما می‌خواهم به دو اصل کلیدی حساب لامبدا اشاره کنم که مفهوم برنامه‌نویسی تابعی را تشکیل می‌دهد:

  1. در محاسبات لامبدا، همه توابع می توانند ناشناس باشند، زیرا تنها بخش معنی دار سرفصل تابع، لیست آرگومان است.
  2. هنگامی که فراخوانی می شود، همه توابع از طریق فرآیند curry انجام می شوند. به صورت زیر است: اگر تابعی با چندین آرگومان فراخوانی شود، ابتدا فقط با آرگومان اول اجرا می شود و تابع جدیدی حاوی 1 آرگومان کمتر را برمی گرداند که بلافاصله فراخوانی می شود. این فرآیند بازگشتی است و تا زمانی که همه آرگومان ها اعمال شوند ادامه می یابد و نتیجه نهایی را برمی گرداند. از آنجایی که توابع خالص هستند، این کار می کند.

همانطور که گفتم، حساب لامبدا به همین جا ختم نمی شود - اما ما فقط جنبه های کلیدی مربوط به FP را پوشش داده ایم. اکنون، در یک مکالمه در مورد برنامه نویسی تابعی، می توانید کلمه "حساب لامبدا" را فلش کنید، و همه فکر می کنند که شما در حال اشتباه گرفتن هستید.

نتیجه

برنامه نویسی کاربردی یک فشار مغزی واقعی است - اما یک رویکرد بسیار قدرتمند است و من معتقدم که محبوبیت آن فقط افزایش خواهد یافت.

اگر می‌خواهید درباره برنامه‌نویسی تابعی بیشتر بدانید، به شما توصیه می‌کنیم که نمونه‌های استفاده از اصول FP در جاوا اسکریپت ( , ) و همچنین نمونه‌ای که به سی شارپ کاربردی اختصاص دارد را بررسی کنید.