شروع کار با کافی اسکریپت – توابع

در قسمت قبلی، تا حلقه های تکرار پیش رفتیم، در این پست، قصد داریم تا توابع در زبان کافی اسکریپت را یاد بگیریم. همانطور که ابتدای آموزش گفته شد، کافی اسکریپت سینتکس کاملا مشابه روبی دارد، اما روبی نیست. مصداق کامل این تفاوت، در نوع پیاده سازی توابع این زبان مشخص میگردد. تعریف تابع، نیازی به بازگویی ندارد، چرا که اگر کمی با ریاضیات آشنا باشید تعریف و مفهوم تابع را میدانید. تابع ها در برنامه نویسی چند نوعند، توابع خالی (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);
  }
};

بحث توابع، بحث جدی و بسیار مهمی در هر زبان برنامه نویسی است. در اینجا سعی شد تا به بهترین شکل، توابع بیان شوند. این بحث، آخرین بحث از سری مقالات «شروع به کار با کافی اسکریپت» بود و انشاء الله در آینده ای نزدیک، مباحث شی گرایی را آغاز خواهیم کرد.

موفق باشید.

شروع کار با کافی اسکریپت – حلقه های تکرار

در آموزش های پیش، پیشرفت خوبی در یادگیری این زبان برنامه نویسی، داشته ایم. اکنون میخواهیم یکی از مهم ترین بحث ها (و در اکثر مواقع کار راه انداز ترین) یعنی حلقه های تکرار را بررسی کنیم. همچون سایر بخش های این زبان، این بخش هم کاملا از روبی گرفته شده است. در کافی اسکریپت، دو حلقه while و for داریم، که دقیقا عملکرد مشابه همین حلقه ها در روبی را دارند.

حلقه while

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

n = 0
sum = 0
while n <= 10
  sum += n
  n += 1
  alert sum

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

var n, sum;
 
n = 0;
 
sum = 0;
 
while (n <= 10) {
  sum += n;
  n += 1;
  alert(sum);
}

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

a = [1, 2, 3, 4, 5]
n = 0 
 
while n < a.length
    alert a[n]
    n += 1

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

var a, n;
 
a = [1, 2, 3, 4, 5];
 
n = 0;
 
while (n < a.length) {
  alert(a[n]);
  n += 1;
}

اکنون، با حلقه while آشنا شده اید. یادتان باشد دستورات منطقی مانند true و false هم میتوانند شرایط حلقه while باشند، که در صورت true بودن (یا همیشه راستگو بودن)، حلقه بی نهایت است و چنانچه false (یا همیشه دروغگو) باشد، حلقه اصلا اجرا نمی گردد.

پس از این که با حلقه while آشنا شدیم، نوبت میرسد به حلقه for.

حلقه for

ساختار for در کافی اسکریپت از روبی اقتباس شده است، اما حقیقتا کافی اسکریپت، این ساختار را بهتر پیاده سازی کرده است. بعنوان مثال، این قطعه کد را در نظر بگیرید :

a = [1, 2, 3, 4, 5]
 
alert b for b in a

عملکرد این قطعه کد به این شکل است که :

۱. اول تابعی که فراخوانی شده، متغیر را بعنوان آرگومان دریافت میکند.

۲. آن را به یکایک اعضای آرایه مقابلش نسبت میدهد.

۳. تابع را اجرا میکند.

در واقع عملکرد بسیار ساده ای دارد، که در جاوااسکریپت کد به این شکل نوشته می شود :

var a, b, i, len;
 
a = [1, 2, 3, 4, 5];
 
for (i = 0, len = a.length; i < len; i++) {
  b = a[i];
  alert(b);
}

در واقع ساختار حلقه for در زبان های روبی و کافی اسکریپت، همان foreach است.

تا اینجا، با بنیان و اساس برنامه نویسی در کافی اسکریپت آشنا شدیم. در آموزش های بعدی، سراغ مفاهیم پیشرفته تر این زبان خواهیم رفت .