Programming Freaks  | دورات ومقالات برمجيه

Please login or register.

Login with username, password and session length
Advanced search  

News:

Programming-Fr34ks.net
Up and running

Author Topic: الدوال  (Read 1100 times)

Striky

  • Helping Freak
  • Administrator
  • Posting Freak
  • *****
  • Posts: 283
    • View Profile
    • Weblog
    • Email
الدوال
« on: October 26, 2008, 06:25:16 AM »


الفصل الرابع :الدوال  Functions
ماهى الدالة Function ؟ ومالفرق بينها وبين الطريقة Method ؟
الدالة هي مجموعة من التعبيرات ويمكن إستخدامها اكثر من مرة ..
الفرق بينها وبين الطريقة هو مجرد تسمية فقط لأن الطريقة هى هى ال الدالة لكن يطلق عليها ذلك لأنها تكون جزء من كائن :)

مثال .. نحن لسبب ما نريد أن نكتب:
Code: ($2) [Select]
This program  is written by: ahmed youssef

فى بداية البرنامج مثلا وإذا فى إختيار لل help نضمنها فيه وهكذا .. يعنى سنستخدمها أكثر من مرة جميل ؟
فأفضل حل هو إننا نعمل دالة بتمثل السطر هذا ونقدر أن نستخدمها أكثر من مرة ، وسيبقى علينا التعديل سهل، فبدل أن نعدل فى كل جزء فى البرنامج .. نعدل فى الدالة فقط !
Code: ($2) [Select]
#The start
puts "This program is written by: ahmed youssef"
 
#The help block
puts "This program is written by: ahmed youssef"

#Another block
puts "This program is written by: ahmed youssef"

#The end

puts "This program is written by: ahmed youssef"


تخيل هذا، إنه ليس منطقي نهائيا بأن تكرر بهذا الشكل... و زد على ذلك إذا رغبت بأن تعدل جزئية معينة ستضطر بأن تعدل في أكثر من مكان ... أليس كذلك؟

فالحل المثالى هو أن تعمل دالة تعبر عن مجموعة من الأوامر التي تريد أن تنفذها، مثلا:
Code: ($2) [Select]
def about()
  puts "This program is written by: ahmed youssef"
end

فتخيل الكود سيتحول للصورة التالية .. فإذا احتجت أن تعدل فى مجموعة الأوامر ، فإن ستعدل على مجموعة الأوامر الموجود فى الدالة:
Code: ($2) [Select]
#The start
about()
 
#The help block
about()

#Another block
about()

#The end

about()


نحن اتفقنا إن الدالة نجعلها تنفذ مجموعة من الأوامر في كل مرة نستدعيها ..

مثلا نريد أن نعمل دالة تطبع لنا كلمة Hi  3 مرات
Code: ($2) [Select]
def sayHi3Times()
     3.times do
       puts "Hi"
     end
end



لاحظ 3.times سنتعرض لها لما نشرح ال times ، ولكن إفهمها مجموعة الأوامر التي تأتي بعدها نريدها أن تنفذ 3 مرات .. إذا استصعبتها، حاليا حول الكود للتالي:
Code: ($2) [Select]
def sayHi3Times()
       puts "Hi"
       puts "Hi"
       puts "Hi"
end


إستدعينا الدالة   ل 3 مرات مثلا
Code: ($2) [Select]
sayHi3Times

sayHi3Times

sayHi3Times


سينفذ الأوامر التي تحويها الدالة  3 مرات:
Code: ($2) [Select]
Output:

Hi
Hi
Hi
Hi
Hi
Hi
Hi
Hi
Hi

جميل .. لحد الآن كل الذي تعرفه عن الدوال خطأ 100% :D

الذي تعاملت معه يسمى إجراء Procedure  – مبرمجين Pascal بكل تأكيد يفهمونني-
الإجراء هو مجموعة من الأوامر تنفذ ولكن ليس لها عائد return !
ولكن ماذا تعني  return أو العائد :S ؟
Code: ($2) [Select]
def areaOfSquare
  side=4
  area=side*side
  return area #The value returned from the function.
end

theArea=areaOfSquare  #area
puts theArea



لاحظ إن مجموعة الأوامر الخاصة بالدالة areaOfSquare  يرجع قيمة ، وهى قيمة ال area
لاحظ إننا استطعنا أن نسند الدالة لـ theArea .. لكن الذي حصل هو أننا أسندنا القيمة العائدة من الدالة - ال returned value – إلى theArea

على كل، لما تكلم الناس كلمهم بكلمة الدالة، ولا تقحم كلمة إجراء إلا إذا احتاجها فعلا :)
فى بعض اللغات التي لا تفرق بين الإجراء والدالة مثل ال C/Ruby ..  إلخ  فيعتبروا أن الإجراء  ماهو إلا دالة ولكن ليس لها عائد.

لاحظ مشكلة بالكود أو قل شيء ليس جيد، وهو أننا فارضين أن طول side فى المربع ب 4، فنحن نريد أن نحدد قيمة ال Side  لأنه ليس من المعقول أن نكتب مليون دالة فيها قيمة side مختلفة.أليس كذلك ؟
Code: ($2) [Select]
def areaOfSquare(side)
  area=side*side
  return area #The value returned from the function.
end

theArea=areaOfSquare(5)  #area
puts theArea


اى حاجة تريد أن تتحكم في قيمتها وهى بتسند للدالة  اجعلها Parameter وهنا ال parameter هو ال side

لاحظ في:
Code: ($2) [Select]
theArea=areaOfSquare(5) 

ال 5 هى قيمة ال side ولكن هنا إسمها argument !

ماذا Parameter و Argument ؟
بكل بساطة ال Parameter هى القيمة التي تحدد أنت وترسل إلى الدالة،  لكن ال Argument هى القيمة اللى أرسلت إلى الدالة ، بمعنى أن ال parameter هو side
وال Argument هى 5
الدوال المبنية
وهى دوال تقدمها لك اللغة نفسها ، وفي حالتنا الآ هى Ruby
وهى عبارة عن أكواد جاهزة ، وتستطيع أن تستخدمها مباشرة:
Code: ($2) [Select]
print("Enter your name: ") #Builtin-Function to display an object (to_s)
name=gets     #Builtin-function to read a string from the standard input.
puts "Hello, "+ name


print هى دالة مثل put تستخدم فى طباعة سلسلة نصية على الشاشة ولكن لا تضيف إليها سطر جديد ..
تلميح : جرب الكود السابق مع puts وستفهم قصدى ;)

gets هى دالة ايضا تستخدم فى قراءة string من الstdin
Code: ($2) [Select]
“Hello, “+name 


تعطينا Hello مدمجة مع ال name  .. سنتعرض لل Concatenation بالتفصيل إن شاء الله لاحقا



Logged

Life is just a chance to grow a soul. - A. Powell
Weblog: http://ahmedyoussef.wordpress.com/