Skip to main content

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

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

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

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

سه ساختار if و else

ساختار if

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

if a == 3
   alert a + " is equal to 3"

و معادل این کد در جاوا اسکریپت :

a = 3;
 
if (a === 3) {
  alert(a + " is equal to 3");
}

در این ساختار، شما نمیتوانید تعریف کنید که اگر مقدار a برابر ۵ گردد، چه اتفاقی بیفتد.

ساختار if … else

در این ساختار، اگر شرط مقابل if ، به هر دلیلی (ورودی کاربر، تغییر در متغیر توسط برنامه نویس و …) false شود، عملیات دیگری انجام میدهد. ساختار کلی در کافی‌اسکریپت به این شکل است :

a = 5
if a == 3
   alert a + " is equal to 3"
else 
   alert a + " is not equal to 3"

و معادل کد فوق در جاوااسکریپت :

a = 5;
 
if (a === 3) {
  alert(a + " is equal to 3");
} else {
  alert(a + " is not equal to 3");
}

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

ساختار if … else if … else

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

a = 1
 
if a == 2
  alert a + " is 2"
else if a >= 2
   alert a+" is greater than 2"
else
   alert a + " is lesser than 2"

معادل این کد در جاوااسکریپت :

a = 1;
 
if (a === 2) {
  alert(a + " is 2");
} else if (a >= 2) {
  alert(a + " is greater than 2");
} else {
  alert(a + " is lesser than 2");
}

این ساختار نیز یکی از ساختار های پر کاربرد است.

ساختار switch

اگر با زبان های C و ++C و … کار کرده باشید نیز با این ساختار آشنایید. این ساختار هم برای مواقعی کاربرد دارد که بیش از یک شرط داریم، و به نوعی جایگزینی برای else if به شمار میرود.

ساختار کلی این دستور در کافی اسکریپت بدین شکل است :

a = 2
 
switch a 
   when 1 then alert a + " is lesser than 2"
   when 2 then alert a + " is 2"
   when 3 then alert a + " is greater than 2"
   else
     alert "None of them"

معادل کد در جاوااسکریپت :

a = 2;
 
switch (a) {
  case 1:
    alert(a + " is lesser than 2");
    break;
  case 2:
    alert(a + " is 2");
    break;
  case 3:
    alert(a + " is greater than 2");
    break;
  default:
    alert("None of them");
}

 

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

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

array = [1, 2, 3, 4, 5]

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

var array;
 
array = [1, 2, 3, 4, 5];

اعضای آرایه، هر کدام یک نمایه ( = Index) مخصوص به خود دارند، شما با استفاده از این نمایه، میتوانید به سادگی عضو مورد نظر خود در آرایه را فراخوانی کنید. نمایه ها از صفر شروع شده، و تا یکی کمتر از طول آرایه، ادامه دارند. در واقع طول آرایه را میتوان با استفاده از متد length به دست آورد :

alert array.length

خروجی دستور بالا، عدد ۵ است، و نمایه آخرین عضو آرایه array ، ۴ می باشد. فی الواقع با فراخوانی یکی یکی این نمایه ها میتوان به این اصل دست پیدا کرد :

array = [1, 2, 3, 4, 5]
 
alert array[0]
alert array[1]
alert array[2]
alert array[3]
alert array[4]

این کد در جاوااسکریپت به شکل زیر در می آید :

var array;
 
array = [1, 2, 3, 4, 5];
 
alert(array[0]);
 
alert(array[1]);
 
alert(array[2]);
 
alert(array[3]);
 
alert(array[4]);

اکنون، میخواهیم عضوی که در آرایه نیست، را به آن اضافه کنیم. برای مثال، عضوی با نمایه ۵ درون آرایه، موجود نیست. پس میتوانیم عضو مورد نظر را به آرایه اضافه کنیم :

array[5] = 6

تمام موضوعات مربوط به آرایه، در خطوط بالا گنجانده شده اند.

با استفاده از این متد ها، در آموزشهای بعدی، یعنی حلقه های تکرار، میتوانیم برنامه های بسیار جالبی بنویسیم. نکته حائز اهمیت این است که این رفتارها (نمایه ها و …) و متد ها، بین آرایه ها و متغیرهای نوع string مشترک هستند. در واقع میتوان نتیجه گرفت که string یک آرایه از کاراکترهاست.

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

برای تعریف یک هش ساده (برای مثال دیکشنری دو کلمه ای انگلیسی به اسپانیایی) به شکل زیر عمل میکنیم :

en2es = {
      "Hello" : "Hola"
      "How are you?" : "Como esta?"
}

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

var en2es;
 
en2es = {
  "Hello": "Hola",
  "How are you?": "Como esta?"
};

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

مثلا در کد زیر، عبارت انگلیسی از کاربر دریافت شده، معادل اسپانیایی تحویل داده می شود :

en2es = {
      "Hello" : "Hola"
      "How are you?" : "Como esta?"
}
 
word = prompt "Enter English word: "
 
alert en2es[word]

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

var en2es, word;
 
en2es = {
  "Hello": "Hola",
  "How are you?": "Como esta?"
};
 
word = prompt("Enter English word: ");
 
alert(en2es[word]);

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

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

student = {
        name : "Muhammadreza Haghiri"
        number : 1
}

در واقع این نوع تعریف، تعریف متغیرهای جهانی (Global) در جاوااسکریپت است. قطعه کد فوق در جاوااسکریپت نیز چنین است :

var student;
 
student = {
  name: "Muhammadreza Haghiri",
  number: 1
};

برای فراخوانی متغیر name هم کافیست اینگونه عمل کنیم :

alert student.name

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

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

در مقاله قبلی، در مورد نصب و راه اندازی کافی اسکریپت بحث کردیم. در این مطلب، قصد داریم تا در مورد متغیر ها صحبت کنیم. متغیر ها و عملگرها، در همه زبان های برنامه نویسی ساخت یافته، از اهمیت ویژه ای برخوردارند. اکنون، انواع متغیر و سپس علمگرهای ریاضی  و منطقی را بررسی میکنیم.

انواع متغیر ها

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

روش تعریف متغیر ها در کافی اسکریپت :

برای آن که ببینیم متغیر ها در کافی اسکریپت چگونه تعریف می شوند، یک فایل با نام variables.coffee ایجاد میکنیم. سپس درون فایل خود این چنین مینویسیم :

a = 2
b = 2.0
c = "Hello"
d = true

متغیر a که ممیز ندارد، از نوع عدد صحیح ( = Integer) و متغیر b که دارای ممیز است، از نوع ممیز شناور ( = Floating Point) و متغیر c که محتوایش درون کوتیشن مارک قرار گرفته، از نوع رشته ( = String) و متغیر d که مقدار true اختیار کرده است، از نوع بولین ( = Boolean) است. پس همانطور که دیدید، میتوانیم این گونه برای هر کدام از متغیر ها تعریف بیاوریم :

  • عدد صحیح : اعدادی که جزء اعشاری ندارند، و از منفی بی نهایت تا مثبت بی نهایت ادامه می یابند.
  • ممیز شناور : اعدادی که جزء اعشاری دارند ، و از منفی بی نهایت تا مثبت بی نهایت ادامه می یابند.
  • کاراکتر/رشته : مقادیر متنی که درون کوتیشن مارک (” “) قرار می گیرند.
  • بولین : متغیرهای منطقی هستند که تنها دو مقدار true ( = درست) و false ( = غلط) را اختیار میکنند.

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

var a, b, c, d;
 
a = 2;
 
b = 2.0;
 
c = "Hello";
 
d = true;

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

a = prompt "Value 1: "
b = prompt "Value 2: "
 
alert a + b

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

var a, b;
 
a = prompt("Value 1: ");
 
b = prompt("Value 2: ");
 
alert(a + b);

اما مشکل اینجاست که a و b از ورودی به صورت string دریافت می شوند. حالا بحث تبدیل نوع پیش می آید. کافیست تا کد خود را به این شکل تغییر دهیم :

a = prompt "Value 1: "
b = prompt "Value 2: "
c = parseInt(a, 10)
d = parseInt(b, 10)
alert c + d

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

var a, b, c, d;
 
a = prompt("Value 1: ");
 
b = prompt("Value 2: ");
 
c = parseInt(a, 10);
 
d = parseInt(b, 10);
 
alert(c + d);

پس از متغیرها، بهتر است کمی در مورد علمگرها بدانیم.

عملگرهای ریاضی

برای استفاده از عملگرهای ریاضی، کافیست از نمادهای آنها استفاده کنیم. چهار نماد + ، – ، * و / که به ترتیب نمایانگر چهار عمل اصلی، یعنی جمع و تفریق و ضرب و تقسیم هستند. عملگر % نیز نماد «باقی‌مانده» است. در واقع این پنج عملگر، بین همه زبانهای برنامه نویسی مشترکند. همچنین = عملگر انتساب بوده، و مقداری را به متغیری نسبت میدهد، و با «تساوی» برابر نیست. برای این که ببینیم عملگر ها چگونه هستند، یک برنامه ساده نوشته و اجرا میکنیم :

a = 2
b = 3
 
alert a + b
alert b - a
alert a * b
alert a / b
alert a % b

و کد فوق در جاوااسکریپت به شکل زیر در می آید :

var a, b;
 
a = 2;
 
b = 3;
 
alert(a + b);
 
alert(b - a);
 
alert(a * b);
 
alert(a / b);
 
alert(a % b);

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

a = 2
b = 3
 
alert a ** b

متغیر a به توان متغیر b میرسد. در حالی که این کد در جاوااسکریپت به شکل :

var a, b;
 
a = 2;
 
b = 3;
 
alert(Math.pow(a, b));

نوشته می شود.

عملگرهای منطقی

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

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

پیش نیازها

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

نصب

جهت نصب کافی اسکریپت، کافی است تا دستور زیر را در CMD (ویندوز) یا Terminal (لینوکس، مکینتاش، خانواده BSD ) وارد کنید :

 gem install coffee

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

نخستین برنامه شما در کافی‌اسکریپت

برای نوشتن نخستین برنامه خود، ابتدا یک فایل خالی به نام hello.coffee ایجاد کرده، سپس درون آن می نویسیم :

console.log "Hello, World!"

 

و سپس این دستور را اجرا میکنیم :

 coffee --compile hello.coffee

اکنون فایل hello.js در همان محل ایجاد شده، و محتوای این چنینی دارد :

console.log("Hello, World!");

 

این زبان، سینتکس ساده ای داشته و حتی اگر نمیخواهید از آن در پروژه های ریلز و سیناترا و … خود استفاده کنید، به شما توصیه میکنم تا از این زبان برای تسریع در انجام پروژه های جاوااسکریپت خود، استفاده کنید. در پست های بعدی، در مورد سایر مواردی که در این زبان به آن نیاز داریم بحث خواهیم کرد.