السلام عليكم .. عندي سؤال بسيط
ممكن أعرف الفرق بين الإعلان عن المتغيرات بواسطة DIM و STATIC
سمعت أن الفرق أن DIM وسط إجراء محدد والثانية العكس بس مافهمت
ممكن شرح من الأعضاء ويكون مفهوم بنسبة لمبتدأ مثلي
ومشكورين
السلام عليكم .. عندي سؤال بسيط
ممكن أعرف الفرق بين الإعلان عن المتغيرات بواسطة DIM و STATIC
سمعت أن الفرق أن DIM وسط إجراء محدد والثانية العكس بس مافهمت
ممكن شرح من الأعضاء ويكون مفهوم بنسبة لمبتدأ مثلي
ومشكورين
الفرق بينهما هو كالتالي :
المتغيرات التي يتم الاعلان عنها بواسطة DIM تحتفظ بقيمتها فقط وسط الاجراء الذي تم الاعلان عنها فيه وبالتالي فهي سوف تتوقف عن الوجود مع انتهاء الاجراء الذي توجد فيه
ما المتغيرات التي يتم الاعلان عنها بواسطة Static فهي تحتفظ بآخر قيمة لها بعد انتهاء الاجراء الذي توجد فيه ولا تتوقف عن الوجود.
فمثلا لدينا متغير اسمه X يوجد في اجراء معين
في حالة الاعلان عنه بواسطة Dim يختفي بعد انتهاء الاجراء
أما في حالة تم الاعلان عنه بواسطة Static لن يختفي بل سيحتفظ بآخر قيمة له
فمثلا كانت آخر قيمة له هي 7 سيتحتفظ واذا تم استعماله في اجراء آخر سيستعمل على أنه 7 وهكذا يحتفظ دائما بآخر قيمة تسند له
بالتوفيق أخي ...
تم تعديل هذه المشاركة بواسطة OricalcosZy في 29 أغسطس 2010 في 01:20
Zefri Yahya - ArabTeam 2000

طيب كيف يعني وسط الإجراء ؟
أنا لسة مبتدأ ومش فاهم أي شي ، وكمان ممكن أعرف متى أستعمل الثنتين
أبغى شرح واضح ومفهوم :)
سأعطيك مثلا عن اجراءات :
Function MyfirstProgram End Function
Sub () End Sub
المجموعة التي تبدأ ب Function وتنتهي ب End Function تسمى اجراء يقوم بمهمة محددة أنت تحددها له
المجموعة التي تبدأ ب Sub وتنتهي ب End Sub تسمى اجراء يقوم بمهمة محددة أنت تحددها له عن طريق الكود الذي تكتبه
لكن نادرا ما يتم الاعلان عن المتغيرات بواسطة Static فالأكثر استخداما هي Dim
تم تعديل هذه المشاركة بواسطة OricalcosZy في 29 أغسطس 2010 في 01:26
Zefri Yahya - ArabTeam 2000

السلام عليكم ورحمة الله و بركاته ..تُستخدم dim لتعريف البرنامج بإسم المتغير و نوعه، مثال:
dim i as integer
هنا قمنا بتعريف المتغير i على انه من النوع integer. وضع dim يحدد مدى إستخدام المتغير على مستوى البرنامج مثلاً:
private function func1 () dim i as integer end function private function func2 () i=i+1end function
سينتج خطأ عند إستخدامك المتغير i داخل الوظيفة func2، لأن مدى النتغير i داخل func1 فقط.
dim i as integer1
private function func1 () i=i+1 end function // private function func2 () i=i+1 end function
يمكن إستعمال المتغير i داخل الوظيفتين لأنه تم تعريفه خارجهما، لذ فإن مداه يمتد إلى داخل الوظيفتين.
أما static فيتم إستعمالها إذا كنا نريد تثبيت قيمة المتغير على مستوى الكلاس (class)و هذا معناه أن جميع الكائنات المشتقة من الكلاس (objects) ستتشارك في قيمة هذا المتغير.
أنظر للمثال التالي:
class Sumclasspublic public i as integer=0 public y as integer=0 end class
إذا أخذت 2 object من هذه الكلاس:
dim sumobj=new sumclass() sumobj.i=5 dim sumobj2=new sumclass() sumobj2.y=sumbobj2.i
ستجد أن قيمة sumbobj2.y تساوي صفر لأن sumbobj2.i ليست sumobj.i و هذا معناه ان الكائنان لا يتشاركان نفس قيمة المتغير i و لكن إذا عرفنا المتغير i على انه static فإن كل الكائنات ستتشارك نفس المتغير i
class Sumclass public static i as integer=0 public y as integer=0 end class
لأن المتغير i أصبح static فلا يمكن للكائنات أن تستعمله من تلقاء نفسها، لذا لا يمكن تمرير قيمة للمتغير إلا عن طريق الكلاس نفسه:
Sumclass.i=7 dim sumobj2=new sumclass() sumobj2.y=Sumclass.i dim sumobj3=new sumclass() sumobj3.y=Sumclass.i
ستجد ان قيمة المتغير sumobj2.y و sumobj3.y تساوي 7
تم تعديل هذه المشاركة بواسطة بهاء صلاح الدين فراج في 29 أغسطس 2010 في 05:35
والله آسف على أني ماقيمت أحد بس مشكوريين
بسم الله الرحمن الرحيم
الحمد لله والصلاة والسلام على رسول الله صلى الله عليه وسلم
وبعد
هل تعرف ما هو الاجراء
هو ما بين هذين
sub tamer
end sub
فهذا الاجراء يسمى اجراء تامر (tamer)
لكن يا ترى تامر هذا من أبوه لنقل أن أبوه حسين فيكون الاجراء الابن داخل الاجراء الاب هكذا
sub hosain
sub tamer
end sub(نهاية تامر)
end sub (نهاية حسين)
والسؤال هل لتامر هذا اخوة ؟ نعم له اخ اسمه أحمد
sub hosain
sub tamer
end sub(نهاية تامر)
sub ahmed
end sub(نهاية أحمد)
end sub (نهاية حسين)
وبعد ، انتهى الموال أم لا
اصبر قليلا .
لنفرض أن الأب حسين معه مال فبالطبع كل ابناؤه سيعلمون بوجود هذا المال كالتالي
sub hosain
dim mal=5000
sub tamer
end sub(نهاية تامر)
sub ahmed
end sub(نهاية أحمد)
end sub (نهاية حسين)
لذلك داخل الاجراء أحمد أو تامر يمكن التعامل مع المال (mal)وتغيير قيمته ( طبعا عياله ولهم أن يصرفوا من مال ابيهم أو يكونوا كرماء ويزيدوه)
sub hosain
dim mal=5000
sub tamer
mal=4000
end sub(نهاية تامر)
sub ahmed
mal=6000
end sub(نهاية أحمد)
end sub (نهاية حسين)
لكن ماذا إذا كان المال عند أحمد هل سيعرف ابوه أو أخوة عن هذا المال شيئا ؟ الاجابة لا ( شح ابعده الله عنا )
sub hosain
sub tamer
end sub(نهاية تامر)
sub ahmed
dim mal=50
end sub(نهاية أحمد)
end sub (نهاية حسين)
وبالتالي لو حاولت ان تعلم قيمة المال من عند حسين أو تامر فلن تجدهم يعرفون عنه شيئا ؟ طيب سؤال اعرف اجابته مسبقا لنفرض أني خرجت من عند احمد وذهبت إلى ابوه أو اخوه ثم عدت إلى أحمد مرة اخرى هل سأجد أحمد فاكر المبلغ الذي كان معه ؟
الاجابة على خلاف ما تظن أحمد نفسه لن يذكر أي شيء عن هذا المبلغ وسيتعامل مع الأمر كأنه لم يتعامل معه قبل ذلك
مثال ما هي قيمة المال في المثال التالي لو خرجت من عند احمد ثم دخلت اليه خمس مرات
sub hosain
sub tamer
end sub(نهاية تامر)
sub ahmed
dim mal=50
mal=mal-10
end sub(نهاية أحمد)
end sub (نهاية حسين)
هل تعلم ؟ نجرب
1- قيمة المال 50 ثم نقصت 10 ( قيمته تساوي سابق قيمته مطروح منها عشرة )
أي قيمة المال 40
2- خرجت وعدت ستكون قيمة المال كم ؟ ستكون 50 من جديد لأنه لا يذكر أي شيء عن هذا المال وما إذا كان نقص قبل ذلك أم زاد أو اي شيء
وهكذا
لكن ماذا لو أردته أن يتذكر عند الخروج من عنده ثم الرجوع إليه مرة اخرى قيمة هذا المال ؟
الامر بسيط عرفه بالامر static ( ملحوظة بعض الاجراء ات فقط هي التي تستخدم معها تستطيع أن تقول هذا للأطفال فقط وليس للأب )
فتكون النتيجة أنك كلما دخلت أو خرجت من الإجراء انقصت المال 10 يعني بعد الدخول إلى الاجراء خمس مرات سيكون المال على الحديدة
وربنا يستر علينا
والسلام عليكم ورحمة الله وبركاته