توابع تو در تو (Nested Functions)
«تابع تو در تو (Nested Function)» یعنی یک تابع داخل تابع دیگر باشد، یا خروجی یک تابع را ورودی تابع دیگر کنیم. این کار کد را منظم می کند و تکرار را کم می کند. «پارامتر (Parameter)» نام ورودی است و «آرگومان (Argument)» مقدار ورودی هنگام فراخوانی است.
دو روش ساخت توابع تو در تو
یا یک تابع را داخل تابع دیگر صدا بزن، یا یک تابع را داخل بدنه تابع دیگر تعریف کن.
1) فراخوانی تابع داخل تابع دیگر
در این روش، خروجی تابع اول می شود ورودی تابع دوم. مثل جمع نمره ها در دو مرحله.
Nested_function <- function(x, y) {
a <- x + y
return(a)
}
Nested_function(Nested_function(2, 2), Nested_function(3, 3))
اینجا ابتدا 2+2 و 3+3 حساب می شود. سپس دو نتیجه باهم جمع می شوند. خروجی 10 است.
2) تعریف تابع داخل تابع دیگر
در این روش، تابع داخلی فقط داخل تابع بیرونی در دسترس است. مثل کمک تابع خصوصی.
Outer_func <- function(x) {
Inner_func <- function(y) {
a <- x + y
return(a)
}
return(Inner_func)
}
output <- Outer_func(3)
output(5)
اول تابع بیرونی را صدا بزن تا Inner_func را بگیری. سپس با مقدار y آن را اجرا کن. خروجی 8 است.
تمرین گام به گام
- یک تابع ساده جمع بساز.
- همان تابع را دوبار تو در تو فراخوانی کن.
- یک نسخه با تابع داخلی پیاده سازی کن.
- هر دو را با ورودی های مختلف تست کن.
- زمان مناسب هر روش را یادداشت کن.
نکته: اگر می خواهی فقط همان فایل از تابع داخلی استفاده کند، روش دوم بهتر است. برای ترکیب نتایج سریع، روش اول ساده تر است.
برای یادگیری پایه ها، صفحه تابع ها در R را ببین. همچنین فصل بازگشت (Recursion) بعد از توابع تو در تو مفید است.
جمع بندی سریع
- دو روش داریم: فراخوانی تو در تو یا تعریف تو در تو.
- روش اول برای ترکیب نتایج سریع است.
- روش دوم محدوده تابع داخلی را محدود می کند.
- نام ورودی پارامتر است؛ مقدارش آرگومان.