پارامترها و آرگومان ها

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

def methodName(param1, param2, ... paramN)
   code to execute
end

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

 1: def calculateSum(number1, number2)
 2:   return number1 + number2
 3: end
 4: 
 5: print "Enter the first number: "
 6: num1 = gets.to_i
 7: 
 8: print "Enter the second number: "
 9: num2 = gets.to_i
10: 
11: puts "Sum = #{calculateSum(num1, num2)}"
Enter the first number: 10
Enter the second number: 5
Sum = 15

در برنامه بالا یک متد به نام calculateSum() (خطوط 3-1) تعریف شده است و می خواهیم مقدار دو عدد را با این متد حمع کنیم. در بدنه متد دستور return نتیجه جمع دو عدد را بر می‌گرداند. در خطوط 9-5 برنامه از کاربر دو مقدار را درخواست می‌کند و آنها را داخل متغیرها قرار می‌دهد. حال متد را که آرگومانهای آن را آماده کرده‌ایم فراخوانی می‌کنیم. مقدار num1 به پارامتر اول و مقدار num2 به پارامتر دوم ارسال می‌شود. حال اگر مکان دو مقدار را هنگام ارسال به متد تغییر دهیم (یعنی مقدار num2 به پارامتر اول و مقدار num1 به پارامتر دوم ارسال شود) هیچ تغییری در نتیجه متد ندارد چون جمع خاصیت جابه جایی دارد.

فقط به یاد داشته باشید که باید تعداد آرگومانها هنگام فراخوانی متد دقیقاً با تعداد پارامترها تعریف شده در متد مطابقت داشته باشد. بعد از ارسال مقادیر 10 و 5 به پارامترها، پارامترها آنها را دریافت می‌کنند. به این نکته نیز توجه کنید که نام پارامترها طبق قرارداد به شیوه کوهان شتری یا camelCasing (حرف اول دومین کلمه بزرگ نوشته می‌شود) نوشته می‌شود. در داخل بدنه متد (خط 2) دو مقدار با هم جمع می‌شوند و نتیجه به متد فراخوان (متدی که متدcalculateSum() را فراخوانی می‌کند) ارسال می‌شود. در درس آینده از یک متغیر برای ذخیره نتیجه محاسبات استفاده می‌کنیم ولی در اینجا مشاهده می‌کنید که می‌توان به سادگی نتیجه جمع را نشان داد (خط 11).

در خط 11 متد calculateSum() را فراخوانی می‌کنیم و دو مقدار صحیح به آن ارسال می‌کنیم. دو عدد صحیح در داخل متد با هم جمع شده و نتیجه آنها برگردانده می‌شود. مقدار برگشت داده شده از متد به وسیله متد ()puts نمایش داده می‌شود. و نکته آخر اینکه یک متد را می توان به عنوان آرگومان به متد دیگر ارسال کرد. به کد زیر توجه کنید:

  1: def methodA(mymethod)        
  2:   return mymethod
  3: end
  4: 
  5: def methodB()
  6:     return "Hello World!"
  7: end
  8: 
  9: puts "#{methodA(methodB)}"
Hello World!

در کد بالا ما دو متد تعریف کرده ایم. که متد اول یعنی methodA که یک آرگومان دریافت کند. در خطوط 7-5 یک متد تعریف کرده ایم که مقدار Hello World را بر می گرداند. در نتیجه هنگامی که در خط 7 ما methodB را به عنوان آرگومان به متد methodA می دهیم، مانند این است که ما جمله Hello World را به آن پاس داده ایم.