در قسمت قبلی، تا حلقه های تکرار پیش رفتیم، در این پست، قصد داریم تا توابع در زبان کافی اسکریپت را یاد بگیریم. همانطور که ابتدای آموزش گفته شد، کافی اسکریپت سینتکس کاملا مشابه روبی دارد، اما روبی نیست. مصداق کامل این تفاوت، در نوع پیاده سازی توابع این زبان مشخص میگردد. تعریف تابع، نیازی به بازگویی ندارد، چرا که اگر کمی با ریاضیات آشنا باشید تعریف و مفهوم تابع را میدانید. تابع ها در برنامه نویسی چند نوعند، توابع خالی (void) ، تابع با آرگومان و تابع بازگشتی (recursive).
در ابتدا، با یک مثال از تابع void ، با ساختار کلی تابع در کافی اسکریپت آشنا می شویم. تابع زیر صرفا دستور alert را فراخوانده و یک پیام را نشان میدهد :
func = () -> alert "Hello, World!"
func()
معادل این کد در جاوااسکریپت این چنین است :
var func;
func = function() {
return alert("Hello, World!");
};
func();
کاربرد توابع void را در آموزش مربوط به کلاسها و شیء گرایی خواهیم دید.
توابع آرگومان دار، یک یا دو آرگومان به عنوان ورودی دریافت کرده و سپس روی آنها عملیات خاصی انجام میدهند. مثلا تابع زیر، عدد ورودی را به توان دو می رساند :
square = (x) -> x ** 2
و معادل همین کد در جاوااسکریپت چنین است :
var square;
square = function(x) {
return Math.pow(x, 2);
};
اما گاهی اوضاع این چنین نیست و مجبور خواهیم بود که از چندین عملیات در تابع استفاده کنیم. نمونه بارز این نوع توابع نیز تابعی است که ب.م.م دو عدد را حساب میکند. این تابع در کافی اسکریپت به شکل زیر پیاده سازی می شود.
gcd = (x, y) ->
while y != 0
remainder = x % y
x = y
y = remainder
return x
معادل این تابع در جاوااسکریپت :
var gcd;
gcd = function(x, y) {
var remainder;
while (y !== 0) {
remainder = x % y;
x = y;
y = remainder;
}
return x;
};
اینجا مجبور شدیم تا کلمه کلیدی return را مستقیما به کار ببریم. پیاده سازی توابع در کافیاسکریپت، بسیار ساده است. اکنون به مهم ترین بخش قضیه، یعنی توابع بازگشتی میرسیم. تابع بازگشتی، تابعی است که نتیجه جمله n ام آن به جمله n-1 ام وابسته باشد. نمونه خوب و کاربردی تابع بازگشتی هم تابع فاکتوریل است.
factorial = (x) ->
if x == 0
return 1
else
return x * factorial(x-1)
همانگونه که دیدید، در این تابع، ابتدا چک می شود که ورودی صفر است یا نه. اگر بود، مقدار ۱ بر میگرداند، اگر نبود آنقدر از مقدار عدد کم میکند تا به صفر برسد و سپس نتیجه را در فاکتوریل صفر، یعنی ۱ ضرب کند و نتیجه را نمایش دهد.
معادل این کد در جاوااسکریپت :
var factorial;
factorial = function(x) {
if (x === 0) {
return 1;
} else {
return x * factorial(x - 1);
}
};
بحث توابع، بحث جدی و بسیار مهمی در هر زبان برنامه نویسی است. در اینجا سعی شد تا به بهترین شکل، توابع بیان شوند. این بحث، آخرین بحث از سری مقالات «شروع به کار با کافی اسکریپت» بود و انشاء الله در آینده ای نزدیک، مباحث شی گرایی را آغاز خواهیم کرد.
موفق باشید.