المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس مفصل السادس من دورة Y4$$3R N3T - الدوال functions



admin
11-01-2013, بتوقيت غرينيتش 02:43 PM
http://www.dzbatna.com/images/icons/smile.gif ط§ظ„ط¯ط±ط³ ط§ظ„ط³ط§ط¯ط³ ظ…ظ† ط¯ظˆط±ط© Y4$$3R N3T - ط§ظ„ط¯ظˆط§ظ„ functions (http://www.dzbatna.com/t1320729/)




كنا قد تعرفنا في الدروس السابقة على أغلب التعليمات الأساسية في لغة الـ php
وحقيقة هي أساس اللغة ولن أبالغ إذا قلت أننا لليوم نكون قد أنهينا مايقارب من ربع الدورة...
فقد كانت مكثفة بغير قصد مني... بالاضافة إلى أنها كانت تحوي بعض الصعوبة والعجلة...

وإلا فلغة الـ php من أسهل لغات برمجة الويب...


ودرس مفصلنا اليوم عن الدوال .. functions
طبعاً لا نستصعب الإسم... ولنعتبره اصطلاحاً...

ماهي الدوال وماهو هدفها...؟
كثيراً ما نحتاج أثناء البرمجة إلى تكرار مجموعة عمليات عدة مرات ولهذا نستخدم التعليمة for أو while
لكن قد لاتفيان بالغرض...
فمثلاً : أريد تنفيذ مجموعة من العمليات مرة في أول الصفحة وتكرار تنفيذها نفسها في أسفل الصفحة ووسطها أيضاً إذا أحببت.. ويفصل بين أسفل الصفحة وأعلاها عدة عمليات أخرى...
فلا تنفع معنا هنا اي تعليمة للتكرار... لأن التكرار يلزمه التتابع في العرض... وسأضطر لنسخ الكود code البرمجي عدة مرات واضعه حسب أماكن الظهور التي أريد وهنا تنبع مشكلة ثانية وهي صعوبة التعديل إذا ما أردت تغيير شيء في هذا الكود code البرمجي...
...وهنا تحل الدوال هذه المعضلة.

فهي عبارة عن مجموعة تعليمات (كود code برمجي) يتم جعله ضمن طريقة كتابة محددة
ويتم طلب تنفيذ هذه التعليمة في أي مكان في الصفحة بمنتهى السهولة...





لها الشكل التالي






واستدعاء الدالة (أي طلب تنفيذ التعليمات الموجودة فيها) يتم بطلب اسم الدالة..



<?
name_of_function();
?>






فعلى سبيل المثال...
نكتب دالة تحوي تعليمة واحدة:




<?
// بدء الدالة
function printit(){
print 'Jamaa.Cc is my BEST forum<br>';
}
// انتهاء الدالة


print 'Hi There...<br>';
print 'I want to asc you about Jamaa.Cc<br>';

// طلب تنفيذ الدالة
printit();

print 'WHAT!!?<br>';

// طلب تنفيذ الدالة من جديد
printit();

print 'AHA...';
?>





طبعاً لاحظنا أننا أنشأنا في بداية الصفحة دالة باسم printit نحن اخترعناه...
وجعلناها تحتوي تعليمة طباعة واحدة... وإنشاء الدالة لا يعني انها ستقوم بالتنفيذ أبداً... فلن تقوم بالتنفيذ الا باستدعائها بطلب اسمها كما شاهدنا

وقد شاهدنا قوسين بعد اسم الدالة فما وظيفتهما؟
يمكن عن طريق هذين القوسين تمرير قيم إلى التعليمات ضمن الدالة ليتم التنفيذ على أساس هذه القيم...
والمثال السابق لا يحوي هذه الخاصية وهو يعمل طبعاً فليست ضرورية... لذلك سنكتب مثالاً جديداً...




<?
function minusfunc($num1, $num2){
$op = $num1 - $num2 ;
print 'ناتج طرح الرقم '. $num2 .' من الرقم '. $num1 .' هو '. $op .'<br>';
print $num1 .' - '. $num2 .' = '.$op .'<br><br>';
}



print 'ماهو ناتج طرح الرقم 5 من الرقم 19<br>';
minusfunc(19, 5);

print 'سنستخدم رقماً أخر... <br><br>';

print 'ماهو ناتج طرح الرقم 11 من الرقم 10<br>';
minusfunc(10, 11);

print 'ماهو ناتج طرح الرقم 7 من الرقم 54<br>';
minusfunc(54, 7);
?>





وهنا لاحظنا أننا قمنا بتمرير قيمتين إلى الدالة في كل عملية تنفيذ وجعلنا بينهم فاصلة عادية
وجعلنا في قوس المتغيرات في انشاء الدالة متغيرين ليستقبلا القيمتين المرسلتين أثناء طلب استدعاء الدالة للتنفيذ...
وعدد القيم المرسلة يجب أن يكون بعدد المتغيرات الموجود في انشاء الدالة...

وطبعاً في الدالة يمكن أن أضع أي كود code برمجي... وأي تعليمة حتى ولو كان دالة داخلية أو تعليمة تكرارية أو شرطية...
ولكن لا يمكنني أن أعرف ضمن الدالة قيمة أي متغير موجود خارجها...
وكأنها بناء منفصل لايتأثر بالتعليمات أو بالمتغيرات ضمن الصفحة ولا يؤثر فيها

فمثلاً



<?
$var = 'text variable';
function printvar(){
print 'var = ' . $var .'<br>';
}

printvar(); // استدعاء الدالة

$var = 'New text variable'; // تغيير قيمة المتغير على سبيل المثال

printvar(); // استدعاء الدالة بعد تغيير قيمة المتغير

print 'var = ' . $var; // تجريب تعليمة الطباعة النظامية
?>




ستطبع البرمجية التالي



الكود code var =
var =
var = New text variable


لم تتأثر الدالة بقيمة المتغير var القديمة ولا الجديدة ...
وهناك طريقة واحدة لامكانية التأثر والتأثير... وهي أن نضع ضمن الدالة كلمة global كتعليمة بداية فيها وبعدها اسماء المتغيرات الخارجية التي نريد ان تتعرف عليها التعليمات ضمن الدالة وتتأثر وتؤثر بها
وكتعديل للمثال السابق




<?
$var = 'text variable';
function printvar(){
global $var;
print 'var = ' . $var .'<br>';
}

printvar(); // استدعاء الدالة

$var = 'New text variable'; // تغيير قيمة المتغير على سبيل المثال

printvar(); // استدعاء الدالة بعد تغيير قيمة المتغير

print 'var = ' . $var; // تجريب تعليمة الطباعة النظامية
?>





وبعد التجريب ستطبع البرمجية التالي


الكود code var = text variable
var = New text variable
var = New text variable


وكذلك إذا قمت بتغيير قيمة المتغير من داخل الدالة فإنها ستتغير خارجها
وقيمة المتغير ضمن الدالة هي قيمته في الذاكرة لحظة وصول البرنامج بالتنفيذ لطلب استدعاء الدالة وهذا سبب طباعة الدالة لقيمتين مختلفتين بنفس تعليمة الاستدعاء...
وإذا أردنا تضمين أكثر من متغير ضمن الدالة فيمكن الفصل بينهم ضمن تعليمة global واحدة بفواصل عادية




<?
$var = 'text variable';
function printvar(){
global $var2, $var3, $var4, $var5;
print 'var2 = ' . $var2 .'<br>';
print 'var3 = ' . $var3 .'<br>';
print 'var4 = ' . $var4 .'<br>';
print 'var5 = ' . $var5 .'<br>';
}
?>












لاحظنا أننا نقوم بعمل print ضمن الدالة
وهذا أمر قد لا يناسبنا دائماً... فلربما نريد تنفيذ الدالة لتقوم بمجموعة عمليات حسابية وتعيد إلينا ناتج تنفيذ هذه العمليات
دون ان تقوم بالطباعة... وقد يسبب لنا بعض المشاكل استخدام global...
لذلك يمكننا استخدام خاصية return في الدالة
ووظيفتها أنها تقوم بإعادة ناتج انت تريده إلى المكان الذي تريد استخدامه فيه

فمثلاً بالعودة لمثالنا الأول



<?
function minusfunc($num1, $num2){
$op = $num1 - $num2 ;
return $op;
}
$sss = minusfunc(4, 7);
print ' 4 - 7 = ' . $sss;
?>





في هذا المثال نجد أنه لا يوجد في الدالة تعليمة print وتقوم تعليمة return بإرجاع قيمة المتغير op إلى المكان الذي تم فيه استدعاء الدالة ليتم تخزينه مباشرة بالمتغير sss كما لاحظنا
وطبعاً أصبحت الآن نتيجة المعالجة في الذاكرة يمكننا استخدامها أنـّى نريد...


طبعاً لا نتعامل مع أرقام فقط...
يمكنكم تجربة هذا المثال...




<?
function writeName($fname,$punctuation){
return $fname . &quot; In Jamaa.cc&quot; . $punctuation . &quot;<br>&quot;;
}

print &quot;My name is &quot;;
print writeName(&quot;Yasser&quot;,&quot;.&quot;);

print &quot;My friend's name is &quot;;
$val = writeName(&quot;Talal&quot;,&quot;!&quot;);
print $val;

print &quot;My brother's name is &quot; . writeName(&quot;Ahmad&quot;,&quot;...&quot;);
?>





نلاحظ في المثال الأخير كيف نعامل الدوال معاملة المتغيرات تماماً اذا كنا نستخدم في الدالة الأمر return
والأمر return لا نستطيع أن نمرر عبره الا قيمة واحدة فقط...




يمكننا اعطاء قيم افتراضية للمتغيرات ضمن الدالة وليس من الضروري حينها ارسال هذه القيم حين استدعاء الدالة...
ويتم هذا الأمر في قوس المتغيرات على الشكل التالي




<?
function printvar($var2, $var3='a', $var4=8, $var5='Yes'){
print 'var2 = ' . $var2 .'<br>';
print 'var3 = ' . $var3 .'<br>';
print 'var4 = ' . $var4 .'<br>';
print 'var5 = ' . $var5 .'<br>';
}
printvar(2345667890);
print '<br><br>';

printvar(2345667890, 'gh');
print '<br><br>';

printvar(2345667890, 21345, 8, 'NA');
print '<br><br>';

printvar(2345667890, 'Yes', 'a');
print '<br><br>';

printvar(2345667890, '', 'a');
print '<br><br>';
?>




بعد التجربة نلاحظ أنه في حال ليس هناك قيم مرسلة فإنه يستخدم القيم الافتراضية المعطاة...
ولايهم تغير النوع في المتغير المهم انه صالح للاستخدام ضمن الدالة... يعني طبعاً لن أرسل حرف ليتم طرح رقم منه!!!
وكذلك من الضروري جعل القيم الافتراضية في النهاية او عند استدعاء الدالة الاستغناء عن ارسال القيم بوضع اشارتي اقتباس...



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



<?
$text = 'HELLO World... I`m here to here about you... and just waiting!!!!.';
print strtolower($text); // تحويل جميع الأحرف لأحرف صغيرة

print '<br><br>';
print strtoupper($text); // تحويل جميع الأحرف لأحرف كبيرة

print '<br><br>';
$text_long strlen($text); // عدّ عدد الأحرف في الجملة joomla وتخزينه من ثم طباعته
print $text_long;

print '<br><br>';
print substr($text, 0, 15); // اظهار جميع الحروف من بداية الجملة joomla وحتى الحرف الـ 15

print '<br><br>';
print substr($text, 20, $text_long);
// اظهار جميع الحروف من الحرف الـ 20 وحتى النهاية وطبعاً ستلاحظون كيف عرفت اين النهاية
?>





لاوظيفة.... المهم تجربة الدرس مفصل والمتابعة...


--=-=-=-=-=-


أرجو ان وفقت بنقل هذا الدرس مفصل لكم
لأي سؤال عن هذه الدرس مفصل او اي استفسار
يمكنكم زيارة الرابط التالي :

http://it.jamaa.cc/art247946.html

إلى اللقاء موعدنا في الدرس مفصل التالي
وهو الدرس مفصل السابع
تحيــاتي








ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى