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

ماهي الفروق

مغلق
بدأه jojo في 13 نوفمبر 2004 · 10 رد · 1,294 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مالفرق بين بين الأربعة أنواع التالية :

Dim

Private

Const

Public

#2

:Dim

تستخدم لتعريف المتغيرات على مستوى الـ Class و الـ Methods و Modules و الـ Structures، و لا نستطيع أن نستخدم المتغير المعرف بـ Dim خارج أي من الوحدات البرمجية السابقة، بمعنى أن لو هناك متغير معرف بـ Dim في Class A لا نستطيع أن نستخدم هذا المتغير في Class B

:Private

نفس تعريف Dim تماماً، بإستثناء أنه لا يمكننا أن نستخدم الكائن المعرف بـ Private داخل الـ Method.

:Const

تستخدم لتعريف المتغيرات التي لا نريد أن نقوم بتغيير القيمة لها، بمعنى أن متغير معرف بـ Const و أسندناه قيمة معينة لا نستطيع أن نغير في هذه القيمة أبداً.

:Public

تستخدم لتعريف الكائنات على مستوى الـ Class و الـ Methods و Modules و الـ Structures، و نستطيع أن نستخدم المتغير المعرف بـ Public خارج الوحدات البرمجية السابقة، بمعنى أن لو هناك متغير معرف بـ Public في Class A نستطيع أن نستخدم هذا المتغير في Class B

تم تعديل هذه المشاركة بواسطة محمد عبد العليم في 13 نوفمبر 2004 في 03:56

رأس الحكمة الإيمان بالله

#3

جزاك الله خيرا أخي الكريم و الف شكر على مجهودك ..

و كل عام انتم بخير

eid0040.gif

003.jpg

#4

أخي الأستاذ محمد، أعتذر عن تطفلي وأرجو السماح لي بهذه الملاحظة: هل تعتقد بأن من لا يعرف الفرق بين Private وبين Const يستطيع فهم حديثك حول ال Method وStructure؟؟؟ لذا إسمح لي بأن أدردش مع الأخ جوجو شويه:

لقد أغضبتني بسؤالك يا jojo، هل فعلاً لا زلت لا تعرف الفروق؟؟ معرفة هذه الأمور هي من أساسيات تعلم البرمجة، ومن أساسيات البرمجة هي أن تقوم بقراءة أحد الكتب المتخصصة والتي جميعها تشرح هذه الفروق بالتفصيل الملل، على كل حال، اليوم عطلة عندنا في اليابان (أنا ساكن في اليابان يا جوجو وبشتغل هان ومتزوج من يابانية طيبة، وزوجتي الآن عند أهلها... لأ، لأ، مش غضبانه ولكن راحت لهناك للزيارة فقط وأنا قاعد هان بطّال ومش عارف شو بدي أعمل)، لذا سأجيب على سؤالك بالتفصيل الملل، وهذا يعني بأنني سأبدأ أولاً بالحديث عن المتغيرات ومن ثم ننتقل الى بعض الفروق في تعريفها (على فكره، يوجد الكثير من طرق التعريف غير التي ذكرتها في سؤالك):

المتغيرات، إن لم تكن تعلمها، هي عبارة عن مواقع في ذاكرة الكمبيوتر نقوم فيها بتخزين معلومات نحتاجها في برنامجنا، فمثلاً نفترض بأنه عندك مشروع مكون من فورم واحد إسمه form1 وزرين (Button1 وButton2) وصندوقي TextBox (TextBox1، و TextBox2) وتريد ان تنشيء متغير إسمه jojo نضع فيه بعض المعلومات النصية (أي String)، وهنا سيواجهك إحتمالين:

الأحتمال الأول: تريد أن تستخدم المتغير jojo فقط عن طريق الزر الأول، أي أننا لن نحتاج في برنامجنا للوصول الى المتغير عن طريق الزر الثاني، وهنا نقوم بتعريف المتغير فقط في الزر الأول، بهذه الصورة:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim jojo As String
        jojo = "jojo is a nice guy"
        TextBox1.Text = jojo
    End Sub

شغل البرنامج الآن، واضغط على الزر الأول، سترى بأن ال TextBox1 أصبح في النص الذي وضعناه في المتغير، مش هيك؟.

الأحتمال الثاني: تريد الوصول الى المتغير jojo عن طريق الزرين وليس الزر الأول فقط، وهنا ستواجهك مشكلة، أتعلم ما هي؟ عند محاولتك الوصول الى المعلومات الموجودة في المتغير (الذي عرفناه فيه الزر الأول) عن طريق الزر الثاني فإننا لن نستطيع القيام بذلك، حاول أن تكتب الكود التالي في الزر الثاني:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

TextBox1.Text = jojo

End Sub

ماذا لاحظت؟؟؟ بالضبط، قام الفيجوال بيسك بتاعك بوضع خط أحمر متعرج تحت كلمة jojo، وهذا يعني بأن البرنامج لا يعلم ماذا تقصد بكلمة jojo، والسبب في ذلك يسمى بال Scope أي "مجال رؤية المتغيرات"، فالمتغير الذي أنشأناه في الزر الأول غير مريء في الزر الثاني، أي أننا عندما نضغط على الزر الأول فإن البرنامج ينشيء المتغير وعند إنتهاء من الزر end sub فإن البرنامج يقوم بتدمير المتغير ويشطبه من ذاكرة الكمبيوتر لذا لن نستطيع الوصول اليه من أي مكان آخر غير الزر الأول.

وللتغلب على هذه المشكلة نقوم بتوسيع مجال رؤية المتغير، كيف نقوم بذلك؟ حسناً سنقوم بوضع المتغير في مكان آخر غير الزر الأول، وهنا نقوم بتعريف المتغير في الفورم وليس في أحد أزراره، وللقيام بذلك نذهب الى بداية الفورم (أي بعد عبارة Windows Form Designer generated code) ونقوم بكتابة التالي:

Dim HMS As String

إذهب الآن الزر الثاني وقم بكتابة التالي:

TextBox2.Text = HMS

ستلاحظ بأن المتغير HMS مرئياً في الزر الثاني (أي يمكن إستخدامه ولا يظهر خط أحمر تحته)،إن قمت بتشغيل البرنامج والضغط على الزر الثاني فإن نص TextBox1 سيكون فارغاً لأننا لم نقم بإسنداد قيمة إبتدائية للمتغيرHMS، إنهي البرنامج إن قمت بتشغيله واذهب الى الزر الأول في محرر الفيجوال بيسك، وأضف الى ما كتبناه سابقاً التالي:

HMS = "HMS is boring"

الآن قم بتشغيل البرنامج وأضغط على الزر الثاني فقط، ستلاحظ بأن ال TextBox2 فارغ، إذهب الآن الى الزر الأول وقم بالضغط عليه وبعد ذلك إضغط على الزر الثاني، ستلاحظ بأن ال TextBox2 أصبح فيه عبارة HMS is boring... الآن المتغير HMS حي يرزق ما دمنا لم نخرج من البرنامج (أي ما دمنا لم نغلق الفورم).

والمتغيرات في البرمجة هي كثيرة يا جوجو، فمثلاً هناك المتغيرات النصية string التي نستطيع أن نضع فيها الكلام والحكي، وهناك المتغيرات الرقمية وهذه بدورها كثيرة، فمثلاً هناك متغير integer وshort....الخ وهذه المتغيرات نستطيع أن نضع فيها أرقام وتختلف في الحجم، فمثلاً المتغير integer نستطيع أن نضع فيه أرقام صحيحة أكبر من الأرقام التي نستطيع وضعها في ال short، وبعض المتغيرات الرقمية تستطيع أن تضع فيها أرقام فيها فواصل عشرية وبعضها لا نستطيع... وهناك متغيرات زمنية وغيرها الكثير الكثير، ويختلف المتغير عن أخيه بأمرين، حجم المساحة الذي يشغلها من ذاكرة الكمبيوتر وكذلك نوع المعلومات التي نستطيع أن نضعها فيه، وكذلك تختلف بكيفية الوصول إليها...

والآن رجوعاً على موضوعنا الأساسي، ما هو الفرق بين dim و Private؟ بصراحة هناك تداخل هنا، فعندما مثلاً نعرف متغير إسمه HMS في داخل زر مستخدمين الكلمة dim فإن هذا المتغير هو تلقائياً private، ولو قمنا بمحاولة تعريف هذا المتغير في الزر مستخدمين الكلمة private فإن الفيجوال بيسك سيقول لنا بأن ذلك خطأ، لذلك لا نستطيع إستخدام Private بدلاً من dim دائماً... وبالمقابل، لو قمنا بتعريف المتغير على مستوى الفورم (بالصورة التي عرفنا المتغير HMS في مثالنا السابق) مستخدمين الكلمة Private فإن المتغير نستطيع أن نصل له من أي مكان في الفورم (سواء زر sub أو structure أو أو أو)، لذلك تستطيع القول بأن dim هي نفسها Private في معظم الحالات (لا أريد أن أزعجك بالفروق لأن ذلك يفتح علينا أبواب واسعة، ولا أعتقد بأنك تحتاج لمعرفة هذا الأمر في هذه المرحلة).

والآن يا جوجو خلينا نتوسع شويه، قم بإضافة زر ثالث للفورم الأول (سنتطرق لاحقاً لوظيفته) وقم ايضاً بإضافة فورم ثاني (إن كنت لا تعلم كيفية القيام بذلك فاذهب الى قائمة Project واضغط على Add Windows Form، بعد ذلك سيظهر لك صندوق حوار، وتأكد بأنه وفي جهة اليمين أن الصورة Windows Form هي المختارة، ستلاحظ بأن البرنامج أعطى إسم للفورم الجديد إسمه Form2، قم بالضغط على Open ستلاحظ بأن برنامجك الآن أصبح فيه فورم عدد 2)، الآن على الفورم الثاني قم بإضافة زر Button1 وضع TextBox1، أضغط على الزر ضغطاً مزدوجاً لفتح محرر كود الفورم الثاني واكتب ما يلي:

TextBox1.Text = HMS

ماذا لاحظت؟ بالرغم أننا قمنا بتعريف HMS في الفورم الأول على مستوى الفورم فإننا لم نستطيع الوصول إلى ذلك المتغير من الفورم الثاني، لماذا؟ لأن HMS هو متغير خاص بالفورم الأول، أي نستطيع إستخدامه في الفورم الأول وفي جميع المواقع (سواء زر أو غيره) ولكن لن نستطيع أن نصل لهذا المتغير من البيت المجاور (أي الفورم الثاني)، طيب كيف نستطيع الوصول اليه من الفورم الثاني؟ كيف نتغلب على هذه المشكلة؟ في هذه الحالة نستطيع توسيع مدى المتغير بحيث يكون على مستوى المشروع وليس على مستوى فورم واحد، كيف القيام بذلك، سنضيف ما يسمى بال Module... أضف Module الى برنامجك (من قائمة Project أضغط على Add Module…) سيظهر صندوق حوار وسيختار الفيجوال بيسك لنا Module وسيسميه Module1، لاحظ بأن صندوق الحوار هو نفس الصندوق الذي إستخدمناه لإضافة الفورم ولكن الفيجوال بيسك إختار لنا في هذه الحالة Module وليس Windows Form)... بعد أن تضغط على open ستلاحظ بأن البرنامج قد أضاف لك Module، ما هو الفرق بينه وبين الفورم؟؟؟ هناك فروق عدة وأهمها بالنسبة لك بأنك لا تستطيع أن تضيف أزرار وأدوات اليه (أي أنه لايوجد له واجهة مثل الفورم).

إذهب الى الفورم الاول وأشطب المتغير HMS (أحذفه)، ستلاحظ بأن خطوطاً حمراء قد ظهرت في الزر الأول والثاني للفورم الأول لأن البرنامج الآن لا يعرف شو المقصود ب HMS، مش مشكلة... إذهب الى ال Module الذي أنشأناه وقم بكتابة التالي، بين سطري Module Module1 و End Module:

Public HMS As String

إرجع الآن الى الفورم الأول، ستجد بأن الخطوط الحمراء قد إختفت من تحت كلمة HMS، إذهب إيضاً الى الفورم الثاني ستجد أن الخط الأحمر الذي تحت كلمة HMS أيضاً قد أختفت، الآن سنشغل برنامجنا لنرى النتيجة، قبل التشغيل سنقوم بوضع الكود التالي في الزر رقم 3 في الفورم الأول حتى نستطيع تشغيل الفورم الثاني من خلال الفورم الأول:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim NewForm As New Form2
        NewForm.Show()
    End Sub

الآن شغل البرنامج وقم بالتجارب التالية:

أضغط الزر الأول: ستلاحظ بأن ال TextBox1 أصبح فيه المتغير الذي وضعناه في jojo، أضغط الآن الزر الثاني ستلاحظ بأن TextBox2 أصبح فيه المتغير الذي وضعناه في HMS (أي المتغير الذي عرفناه في ال Module).

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

إذاً الآن المتغير HMS أصبح على مستوى المشروع بفضل تعريفنا إياه على مستوى المشروع أي في ال Module.

أخرج من البرنامج بإغلاق كافة النوافذ واذهب الى ال Module وغير كلمة Public الى dim، وبعد ذلك إذهب الفورم الأول والفورم الثاني، ستلاحظ بأن خطوطاً حمراء قد ظهرت تحت HMS، لماذا؟ لأن المتغير الآن هو خاص فقط بال Module ، غير كلمة dim الى Private ستلاحظ بأنه لا تغيير (في هذه الحالة تشابه ال dim وال Private)...

الآن فالنقم بتغيير التعريف من Public الى Friend (وهذا لم تسأل عنه في سؤالك الكريم)، ستلاحظ بأن Public و Friend تتشابهان، والفرق بينهما هو أن المتغير المستخدم عن طريق Friend نستطيع أن نصل إليه فقط عن طريق مشروعنا ولا يمكننا أن نصل إليه من مشروع آخر، ولكن ال Public نستطيع أن نصل له من أي مشروع أو برنامج في الكمبيوتر عندما يكون برنامجنا شغال، لذلك يجب عليك أن لا تستخدم ال Public على الإطلاق إلا في حالات خاصة جداً والإستعاضة عنها ب Private.

أنا بعرف بأنك ذكي يا جوجو وستقول: طيب سأقوم دائماً بتعريف المتغيرات على صورة Public وأخلص من غلبة وهم ال dim وال Private...الخ... أنت غلطان وألف غلطان، يجب أن لا نقوم بذلك لأن هذا الأمر يستهلك ذاكرة الكمبيوتر دون داع، فنحن عندما نقوم بتعريف المتغير في الزر مثلاً فإن المساحة التي حجزها في الذاكرة سيتم تحريرها بعد لحظات من إنتهاء مفعول الزر، يجب أن لا نقوم بتوسعة مجال المتغير إلا إذا اضطررنا لذلك... فذاكرة الكمبيوتر ليست ملك لبرنامجك فقط (هناك برامج كثيرة تشتغل على كمبيوترك الآن دون أن تشاهدها، فمثلاً الأنتي فايروس شغل حتى ولو لم ترى صفحته، مش هيك؟)، طبعاً الفائدة الوحيد ليست إقتصادية ولكن هناك فوائد كثيرة لعدم توسعة مجال المتغير يصعب حصرها.

ملاحظة: أرفقت البرنامج في حالة لم تستطيع إضافة Module أو كان شرحي غير وافياً.

والآن الى موضوع Const، هذه الكلمة هي إختصار لكلمة Constant والتي تعني "ثابت" أو "مستقر"، وهو مخزن نقوم بإنشاء في ذاكرة الكمبيوتر يختلف عن المتغير بأن قيمته لا يمكننا تغييرها، حاول أن تعمل برنامج جديد، وضع عليه زر واحد وصندوقي TextBox (TextBox1 و TextBox2) وفي كود الزر أكتب ما يلي:

Const jojo_age As Integer

ستلاحظ بأن هناك خط أحمر تحت كلمة jojo_age لأننا أستخدمنا الكلمة Const، لو وضعت مؤشر الماوس على الكلمة فإن الفيجوال بيسك سيظهر لك رسالة تقول:

Constants must have a value

وترجمتها "الثوابت يجب أن يكون لها قيمة"، أي أنه يجب أن نضع لها قيمة، وهذه القيمة لايمكننا تغييرها، الآن غير الكود الى التالي:

Const jojo_age As Integer = 18

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

jojo_age = 23

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

طيب ليش بنحتاج الثوابت؟؟؟ الثوابت فقط لتسهيل كتابة الكود، فمثلاً لو كان عندنا برنامج كبير وفيه إشارات كثيرة الى "عمر جوجو"، فمثلاً أحد الأزرار يقوم بحساب عمر جوجو بعد عشر سنوات، وفي زر آخر يقوم بحساب عمر جوجو بالثواني، وزر آخر يقوم بحساب عمر جوجو بالدقائق...الخ، في هذه الحالة يفضل أن نكتب إسم جوجو مرة واحدة على مستوى الفورم (يتم تعريف الثابت تماماً مثل تعريف المتغير ويكون مجال رؤيته مثل المتغير)، وفي الأزرار نقوم فقط بإضافة jojo_age لنعني الرقم "23"، إفترض بأنك في مرحلة لاحقة أردت تغيير العمر الى الرقم "20" في هذه الحالة لن نضظر الى تغيير الرقم من جميع الأزرة، بل نقوم بذلك مرة واحدة عن طريق إسناد قيمة 20 بدلاً من 18 في سطر تعريف الثابت:

Const jojo_age As Integer = 20

الآن قم بكتابة العبارة أعلاه في مستوى الفورم ، وفي الزر أكتب الكود التالي:

Private Const jojo_age As Integer = 20

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = jojo_age * 2
        TextBox2.Text = jojo_age + 3
    End Sub

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

الآن أضف كلمة Private قبل تعريف الثابت أعلاه ليصبح:

Private Const jojo_age As Integer = 20

هنا رجعنا الى موضوعنا السابق، فالثوابت لها نفس مجال الرؤية التي للمتغيرات، فنستطيع أن نستخدم معها dim ونستطيع أن نستخدم معها Public...الخ، وإن لم نكتب أي من هذه الكلمات فإن الفيجوال بيسك سيفترض بأن الثابت هو Private لذلك لا حاجة لإستخدام هذه الكلمة مع ال Constants في مثالنا السابق.

الآن أرجع الى مشاركة الأستاذ محمد وحاول أن تقرأ ذلك الكلام العلمي،وأجبني على السؤال التالي: أيهما أفضل: الكلام العلمي أم الحديث البلدي؟ :-).

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

http://www.visualbasicnet.jeeran.com/

Learn Japanese :>>> http://www.nouben.com/

#5

نسيت أن أضع البرنامج المحترم، لذا ها هو

WindowsApplication1.rar

Learn Japanese :>>> http://www.nouben.com/

#6

HMS شرح بسيط و جيد لكن ماذا إذا كان السؤال حول قواعد البيانات من ربط و اضافه و حذف هل كنت ستشرح بنفس الاسلوب

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#7
بالطبع لا، فمن يريد أن يسأل عن قواعد البيانات لا بد وأن تكون ثقافته البرمجية أكبر قليلاً ممن يسأل عن الفرق بين Dim و Public.

Learn Japanese :>>> http://www.nouben.com/

#8

خطر على بالي أمر بعد كتابة مشاركتي الأخيرة، والشكر للأخ المشرف "إبراهيم" الذي نبهني لها.

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

وللاستاذ محمد كل المحبة والتقدير، فأنا من أشد المعجبين به وبالأخص أنا معجب بدقته العلمية في جميع المشاركات التي تشرفت بقراءتها، وهي دقة للأسف يندر توفرها في المنتديات العربية.

Learn Japanese :>>> http://www.nouben.com/

#9

بصراحة شرح كويس اوى من الاستاذ محمد والخ العزيز HMS

كل سنة وانتم طيبن :)

الفريق المصري للبرمجة

تحليل وتصميم برامج قواعد بيانات لاتصال بينا masry4u@hotmail.com

#10

بارك الله فيك يا HMS على كل هذا الشرح الجميل، و أشكرك على هذا "الثناء" الجميل.

و اعذرني لأني قد اضطر في معظم الاوقات للاختصار لضيق الوقت...

رأس الحكمة الإيمان بالله

#11

ماشاء الله عليك أخوي HMS ,, بصراحة لم أجد مثل تعاونك و اخلاصك في

مساعدة الآخرين ... و الله لو اكتب من اليوم الى بكره ما راح توفي الكلماات

شكري و تقدير ي لك ... ودي اشكرك باللهجة اليابانية :-) بس مااااااأعرف ...:)

Cout<<" Thank You Very Much" ha ha

هذا ردي بـا C++ و على فكرة انا درستها السنة الماضية ...

بس في الفيجوال لا تواخذني انا مبتدئة فيها ...

((( ملاحظه هااامه )))) :

يا أستاذي العزيز لو تبغى تتكلم بلدي او ياباني او اي لهجة ...انت بس لختار

ستجدني اذان صاغية ... و راح افهم كل شي بإذن الله ....

و مشكور اخوي على دعواتك ...

********** Cout<<"GOOD BYE" **********

هذا الموضوع مغلق.

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