الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

DIM و STATIC

بدأه العميد ريان في 28 أغسطس 2010 · 6 رد · 986 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم .. عندي سؤال بسيط

ممكن أعرف الفرق بين الإعلان عن المتغيرات بواسطة DIM و STATIC

سمعت أن الفرق أن DIM وسط إجراء محدد والثانية العكس بس مافهمت

ممكن شرح من الأعضاء ويكون مفهوم بنسبة لمبتدأ مثلي

ومشكورين

−1
#2

الفرق بينهما هو كالتالي :

المتغيرات التي يتم الاعلان عنها بواسطة DIM تحتفظ بقيمتها فقط وسط الاجراء الذي تم الاعلان عنها فيه وبالتالي فهي سوف تتوقف عن الوجود مع انتهاء الاجراء الذي توجد فيه

ما المتغيرات التي يتم الاعلان عنها بواسطة Static فهي تحتفظ بآخر قيمة لها بعد انتهاء الاجراء الذي توجد فيه ولا تتوقف عن الوجود.

فمثلا لدينا متغير اسمه X يوجد في اجراء معين

في حالة الاعلان عنه بواسطة Dim يختفي بعد انتهاء الاجراء

أما في حالة تم الاعلان عنه بواسطة Static لن يختفي بل سيحتفظ بآخر قيمة له

فمثلا كانت آخر قيمة له هي 7 سيتحتفظ واذا تم استعماله في اجراء آخر سيستعمل على أنه 7 وهكذا يحتفظ دائما بآخر قيمة تسند له

بالتوفيق أخي ...

تم تعديل هذه المشاركة بواسطة OricalcosZy في 29 أغسطس 2010 في 01:20

Zefri Yahya - ArabTeam 2000

tpc7rzy94tx8iduak4b.png

#3

طيب كيف يعني وسط الإجراء ؟

أنا لسة مبتدأ ومش فاهم أي شي ، وكمان ممكن أعرف متى أستعمل الثنتين

أبغى شرح واضح ومفهوم :)

#4

سأعطيك مثلا عن اجراءات :

Function MyfirstProgram

End Function

Sub ()

End Sub

المجموعة التي تبدأ ب Function وتنتهي ب End Function تسمى اجراء يقوم بمهمة محددة أنت تحددها له

المجموعة التي تبدأ ب Sub وتنتهي ب End Sub تسمى اجراء يقوم بمهمة محددة أنت تحددها له عن طريق الكود الذي تكتبه

لكن نادرا ما يتم الاعلان عن المتغيرات بواسطة Static فالأكثر استخداما هي Dim

تم تعديل هذه المشاركة بواسطة OricalcosZy في 29 أغسطس 2010 في 01:26

Zefri Yahya - ArabTeam 2000

tpc7rzy94tx8iduak4b.png

#5

السلام عليكم ورحمة الله و بركاته ..تُستخدم 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

1
#6

والله آسف على أني ماقيمت أحد بس مشكوريين

#7

بسم الله الرحمن الرحيم

الحمد لله والصلاة والسلام على رسول الله صلى الله عليه وسلم

وبعد

هل تعرف ما هو الاجراء

هو ما بين هذين

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 يعني بعد الدخول إلى الاجراء خمس مرات سيكون المال على الحديدة

وربنا يستر علينا

والسلام عليكم ورحمة الله وبركاته

1

مواضيع مشابهة