أسعد الله أوقاتكم أيها المبرمجون الأحبة
في هذه المشاركة (الصغيرونه) - هذه الكلمة في لهجة أهل عُمان ؛ للتعبير عن الشيء الصغير جدًا
ألاحظ أكثر المبرمجين - خصوصًا المبرمجين المحترفين - عندما يريدون وضع متغير رقمي فإنهم يختارون وبلا تفكير ، يختارون المتغير Integer
وحتى لو كان الرقم الأقصى الذي يريدون الوصول إليه صغيرًا .
على سبيل المثال لاحظ البرنامج الذي بالأسفل فيه Loop (صغيرون) من 1 إلى 11 ، فقد وضعوا Integer للمتغير myNumber
علمًا بأن Integer يستهلك من الذاكرة 4 بايت
لأنه أساسًا يستخدم للأرقام الكبيرة ( السالبة والموجبة معًا ) ومجاله هو -2,147,483,648 إلى 2,147,483,647
بينما لو استخدموا Byte فإنه يفي بالغرض تمامًا وأكثر ، ولا يستهلك الكثير من الذاكرة سوى 1 بايت فقط
ومجاله هو من 0 إلى 255
أما لو كان عنده أرقامًا سالبة صغيرة ، فإن استخدام SByte يكون مناسبًا جدًا
لأن مجاله هو من -128 إلى 127
وهذا الشيء المسمى SByte أيضا حجمه مثل أخيه Byte وهو 1 بايت فقط
وأنا من وجهة نظري أنه عند كتابة برنامج كبير وفيه متغيرات كثيرة ، فلا نكتب المتغيرات عشوائيا ؛ حتى لا نستهلك ذاكرة الجهاز ؛ وبالتالي يكون برنامجك ثقيلا على الجهاز ، وعمله يكون بطيئا إلى حد ما .
وقِس على متغير Integer بقية المتغيرات التي يكتبها المبرمجون دون مراعاة !
أخواني المبرمجين ...
أترك لكم هذه القضية للمناقشة ، ولإدلاء آرائكم فيها ، كل مبرمج فيكم يكتب حسب وجهة نظره .
ولكم مني خالص التحية والاحترام .
كود :
Dim myNumber As Integer = 0
For myNumber = 1 To 11
ListBox1.Items.Add(myNumber)
Next
أسعد الله مساك ومساء الجميع ..
هذه الكلام كان مهم جداً عندما كانت البرامج تصمم لنظام تشغيل دوس وما شابه
ولكن في أيامنا هذه مهما كان المتغير كبيرا أو صغيراً لم يعد مهماً
فأقل جهاز يحتوي على 3 جيجا رام DDR2
وأغلب الأجهزة الحالية أصبحت من 4 جيجا رام DDR3
وخلال سنتين ستجد الأغلبية سيرفع رامات جهازه ل 8 جيجا على الاقل.
حيث أن أنظمة التشغيل هي من تطلب ذلك ..
فأي متغير مهما كان انتيجر أو لونج أو دبل
يهمل لصغره أمام هذه الرامات الضخمة..
ولكن عنايتك ببرامجك ومعرفة المتغيرات التي تريدها لبرنامك يجعل برنامجك أسرع بشكل غير ملحوظ.
أغلب البرامج البطيئة لم يكن السبب فيها نوع المتغير
ولكن الطريقة التي طلب بها تنفيذ البرنامج (يعني خطأ من الكود أساساً وليس المتغيرات).
مثلاً : تستطيع في برنامجك أن تجعله يتصل بقاعدة البيانات ويستخرج لك نتيجة البحث مع كل طلب.
وتستطيع مثلا في برنامج يوزرات أوقاعدة بيانات طلاب وتستطيع أن تخزن ما تحتاج البحث فيه في داتا جريد فيو
وتبحث في فيها كلما احجتجت لذلك دون أن تجعل البرنامج يتصل بقاعدة البيانات
كل الطرق متاحة ولكن أن من يختار الطريق إما المتشعب الطويل أم الطريق المختصر القصير ..
(17-01-22, 09:05 PM)Taha Okla كتب : [ -> ]أسعد الله مساك ومساء الجميع ..
هذه الكلام كان مهم جداً عندما كانت البرامج تصمم لنظام تشغيل دوس وما شابه
ولكن في أيامنا هذه مهما كان المتغير كبيرا أو صغيراً لم يعد مهماً
فأقل جهاز يحتوي على 3 جيجا رام DDR2
وأغلب الأجهزة الحالية أصبحت من 4 جيجا رام DDR3
وخلال سنتين ستجد الأغلبية سيرفع رامات جهازه ل 8 جيجا على الاقل.
حيث أن أنظمة التشغيل هي من تطلب ذلك ..
فأي متغير مهما كان انتيجر أو لونج أو دبل
يهمل لصغره أمام هذه الرامات الضخمة..
ولكن عنايتك ببرامجك ومعرفة المتغيرات التي تريدها لبرنامك يجعل برنامجك أسرع بشكل غير ملحوظ.
أغلب البرامج البطيئة لم يكن السبب فيها نوع المتغير
ولكن الطريقة التي طلب بها تنفيذ البرنامج (يعني خطأ من الكود أساساً وليس المتغيرات).
مثلاً : تستطيع في برنامجك أن تجعله يتصل بقاعدة البيانات ويستخرج لك نتيجة البحث مع كل طلب.
وتستطيع مثلا في برنامج يوزرات أوقاعدة بيانات طلاب وتستطيع أن تخزن ما تحتاج البحث فيه في داتا جريد فيو
وتبحث في فيها كلما احجتجت لذلك دون أن تجعل البرنامج يتصل بقاعدة البيانات
كل الطرق متاحة ولكن أن من يختار الطريق إما المتشعب الطويل أم الطريق المختصر القصير ..
وجهة نظرك جيدة جدًا أستاذ Taha Okla
ولكن الناس الآخرون قد يستعملون برنامجك وتكون مواصفات أجهزتهم ضعيفة !
فقد تكون ذاكرة الرام مثلا أقل بكثير من 2 جيجا بايت .
وإذا كان برنامجك مليء بالمتغيرات التي تلتهم الذاكرة ؛ فإن برنامجك سيعمل ببطء شديد في أجهزتهم .
ولكنا على كل حال دعنا نرى آراءً أخرى من مبرمجين آخرين .
ولك مني خاص الشكر والتقدير على ردك التفصيلي .
السلام عليكم ورحمة الله وبركاته
اخي الكريم
كما أشار الأخ الغالي Taha انه فيما مضى كانت الذاكرة صغيرة جدا والمبرمج كان يفترض ان أغلب الأجهزة التي سيعمل برنامجه عليها راماتها صغيرة (نظرا لارتفاع أسعارها في ذلك الوقت ) حيث كان يبرمج بالمتغيرات الرقمية الصغيرة المجال والتي تم انشاؤها أيضا لنفس الأسباب وأسباب أخرى وحتى لا يتم التهام ذاكرة التشغيل .. حتى اني أتذكر اننا كنا نقوم بتحسين الذكرة (640Kb) حتى تعمل البرامج وكم عانيت يومها من تشغبل نسخة PhotoShop الإصدار 3.05 لان الرام كانت عندي 4 ميغا والويندوز 3.11 ويحتاج الى 8 ميغا ويقيت على الاصدار 2.5
المهم نأتي الى النقطة الأهم وهي السكوب الذي يتم فيه تعريف المتغير فإن كان معرف في دالة فإن هذا المتغير سينتهي بنهاية الدالة وسيتدمر اما لو تم تعريفه على مستوى المشروع ككل فهنا سيبقى في الذاكرة حتى انهاء البرنامج وان كثرت المتغيرات على مستوى المشروع هنا يمكننا
اختيار المتغيرات ذات أنواع البيانات الصغيرة بالرغم من ان الامر لم يعد بالأهمية التي يجب علينا الاهتمام بها بسبب حجم الذاكرة الكبير
ناحية أخرى تعودنا على تعريف المتغير في الجملة نفسها بنوع Integer بل ان الحرف الذي نضعه للمتغير هو الحرف I مأخوذ من اسم نوع البيانات
وهذا ما دأب عليه اغلب المبرمجين
بقي شيء مهم وهو لماذا تصبح البرامج ثقيلة ؟ الأسباب كثيرة أهمها إضافة أدوات خارجية فيها بعض المؤثرات -الإكثار من جمل التكرار عند التحميل - تحميل كل البيانات وبخاصة ان كانت السجلات كثيرة فتح اكثر من فورم في نفس الوقت - كثرة الادوات على الفورم فمثلا 20 RadioBotton يمكن الاستعاضة عنها بكومبوبوكس طريقة كتابة الاكواد وبخاصة التكرار وعدم اللجوء الى oop البرمجة الشيئية وغيرها الكثير
على اية حال موضوع جميل يعيدنا الى التسعينات من القرن الماضي والى زمن كنا فيه شباب وكانت الاجهزة ضعيفة كالرجل الهرم
اما الان فقد ازدادت الاجهزة شبابا ونحن هرمنا (ههههه)
شكرا لك يا أبو خالد
فعلا الكلام صحيح لكن الطبع يغلب التطبع

مدري لها دخل او لا.
لكن فعلا -مرة اخرى- ,و استغرب من عدم استخدامي لغير الـ Integer.
PHP كود :
Dim myNumber As Byte = 0
For myNumber = 1 To 254
ListBox1.Items.Add(myNumber)
Next
انواع البيانات البسيطة مثل هذه تناسب اي نسخة محدودة من اي برنامج [اظن فقط]
باذن الله تعالى اذا لم انس ساعمل بهذه النصيحة و اذكر بها كل من يرى موضوع لي بالمنتدى.
شكر الله لك وبارك فيك وكل من يقرأ هذا الكلام.
ابدعت حقيقي
صراحة لم يخطر علي بالي من قبل
مع العلم ان معظم الاوقات كنت ابحث دائما عن افضل كود لتنفيذ المهمة التي اعمل عليها من حيث السرعة والاداء والثبات وقلة الاخطاء المحتملة ولم يخطر ببالي ذلك من قبل ما كان يخطر ببالي ان اعرف نوع المتغير الغير معلوم حتي لا يستغل من الرامات اكثر من object
وطريقتك بالفعل هتفرق جدا مع البرامج كبيرة الحجم وكثيرة النوافذ والمهام ولا اعتقد انها ستفرق او ستلاحظ في البرامج الصغيرة
وصراحة اتشوق لمثل هذه المواضيع والافكار التي ربما يسهي عنها بعض الاشخاص لتعودهم علي طرق اخري او لعدم التفكير بيها من قبل
شكرا جزيلا لك استمر ♥
شكرًا جزيلا على مرورك الكريم
كلنا نتعلم من بعضنا
وفعلا هناك أمور صغيرة ولكنها مهمة ويجب مراعاتها عند بناء برنامج جديد
تحياتي لك ، والله يوفقك .
السلام عليكم ورحمة الله وبركاته
ربما لا اكون من المبرمجين المحترفين حتى اناقش هذا الموضوع لكن انا أتفق مع أخي أبو خالد الشكري وللأسباب التالية:
اولا: ان الفئة التي تستخدم برنامجك من الناس ليس كلهم على دراية بالحاسوب ويتفحص الضغط المسلط على ال RAM وعلى المعالج بأستمرار وهو ممكن مثبت على الوندوز كثير برامج واغلبها تعمل على المعالج بوضع الاختفاء وبعضها قام بتشغيلها ولم يطفئها وتستهلك ذاكرة
صح ان الRAM ٤ جيجا هو قوي لكن ربما قد تكون لعبة او برنامج معين يستهل اكثر من نصف هذا الرقم! فنأخذ بالحسبان خفة عمل برنامجنا لتجنب الوقوع بأخطاء.
ثانيا:ليس فقط المتغيرات الرقمية الكثير من المتغيرات وايضا الفئات المستخدمه اذا كانت تستهلك شيء من الذاكرة يفضل بالكود هدم عمل هذا المتغير او الفئة وخاصة البرامج التي تحتوي على تصاريح كثيرة
حتى لانتسبب بتهنيج او تعليق البرنامج.
ثالثا: الفرق بين ال ٤ Byte وال ١ byte وغيرها لايظهر بالمشاريع الصغيرة
فأنا هنا اتحدث عن المشاريع الضخمه التي ربما تحتوي على الف متغير
فبفرض بنفس الوقت الف متغير من حجم ٤ يكون ٤٠٠٠ الف بينما ١ يكون ١٠٠٠ فقط وهي ربع القيمة! وهذا عدا مايستهلكه البرنامج من الاشياء الاخرى.
واخيرا انا من وجهة نظري افضل بالعمل على تقسيم البرنامج بأسلوب معين بحيث اتلاعب بحجم الذاكرة للبرنامج مثل تقسيم برنامج الى برنامجين ويتصل واحد بالثاني حتى اثناء الاستخدام يكون التأثير بالنصف على الجهاز ( المقصود هنا بعض البرامج المعينة)
مجرد رأيي واتمنى ان لا اكون قد اخطأت بشي
والسلام عليكم ورحمة الله وبركاته