المشاركات : 565
المواضيع 65
الإنتساب : Feb 2021
السمعة :
73
الشكر: 1001
تم شكره 872 مرات في 436 مشاركات
17-01-22, 05:30 PM
أسعد الله أوقاتكم أيها المبرمجون الأحبة
في هذه المشاركة (الصغيرونه) - هذه الكلمة في لهجة أهل عُمان ؛ للتعبير عن الشيء الصغير جدًا
ألاحظ أكثر المبرمجين - خصوصًا المبرمجين المحترفين - عندما يريدون وضع متغير رقمي فإنهم يختارون وبلا تفكير ، يختارون المتغير 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
المشاركات : 1,262
المواضيع 16
الإنتساب : May 2016
السمعة :
291
الشكر: 801
تم شكره 2223 مرات في 1168 مشاركات
أسعد الله مساك ومساء الجميع ..
هذه الكلام كان مهم جداً عندما كانت البرامج تصمم لنظام تشغيل دوس وما شابه
ولكن في أيامنا هذه مهما كان المتغير كبيرا أو صغيراً لم يعد مهماً
فأقل جهاز يحتوي على 3 جيجا رام DDR2
وأغلب الأجهزة الحالية أصبحت من 4 جيجا رام DDR3
وخلال سنتين ستجد الأغلبية سيرفع رامات جهازه ل 8 جيجا على الاقل.
حيث أن أنظمة التشغيل هي من تطلب ذلك ..
فأي متغير مهما كان انتيجر أو لونج أو دبل
يهمل لصغره أمام هذه الرامات الضخمة..
ولكن عنايتك ببرامجك ومعرفة المتغيرات التي تريدها لبرنامك يجعل برنامجك أسرع بشكل غير ملحوظ.
أغلب البرامج البطيئة لم يكن السبب فيها نوع المتغير
ولكن الطريقة التي طلب بها تنفيذ البرنامج (يعني خطأ من الكود أساساً وليس المتغيرات).
مثلاً : تستطيع في برنامجك أن تجعله يتصل بقاعدة البيانات ويستخرج لك نتيجة البحث مع كل طلب.
وتستطيع مثلا في برنامج يوزرات أوقاعدة بيانات طلاب وتستطيع أن تخزن ما تحتاج البحث فيه في داتا جريد فيو
وتبحث في فيها كلما احجتجت لذلك دون أن تجعل البرنامج يتصل بقاعدة البيانات
كل الطرق متاحة ولكن أن من يختار الطريق إما المتشعب الطويل أم الطريق المختصر القصير ..
قال صلى الله عليه وسلم:
«كلمتان خفيفتان على اللسان
ثقيلتان في الميزان،حبيبتان إلى الرحمن:
سبحان الله وبحمده، سبحان الله العظيم».
تم الشكر بواسطة: DOX.1 , ابراهيم ايبو , ابراهيم ايبو , أبو خالد الشكري , محمود صالح , محمود صالح , سعود , ابو انس , 3booody , رضوان الجماعي , رضوان الجماعي , عبدالله الدوسري , حسن الجلب , حسن الجلب
المشاركات : 565
المواضيع 65
الإنتساب : Feb 2021
السمعة :
73
الشكر: 1001
تم شكره 872 مرات في 436 مشاركات
(17-01-22, 09:05 PM)Taha Okla كتب : أسعد الله مساك ومساء الجميع ..
هذه الكلام كان مهم جداً عندما كانت البرامج تصمم لنظام تشغيل دوس وما شابه
ولكن في أيامنا هذه مهما كان المتغير كبيرا أو صغيراً لم يعد مهماً
فأقل جهاز يحتوي على 3 جيجا رام DDR2
وأغلب الأجهزة الحالية أصبحت من 4 جيجا رام DDR3
وخلال سنتين ستجد الأغلبية سيرفع رامات جهازه ل 8 جيجا على الاقل.
حيث أن أنظمة التشغيل هي من تطلب ذلك ..
فأي متغير مهما كان انتيجر أو لونج أو دبل
يهمل لصغره أمام هذه الرامات الضخمة..
ولكن عنايتك ببرامجك ومعرفة المتغيرات التي تريدها لبرنامك يجعل برنامجك أسرع بشكل غير ملحوظ.
أغلب البرامج البطيئة لم يكن السبب فيها نوع المتغير
ولكن الطريقة التي طلب بها تنفيذ البرنامج (يعني خطأ من الكود أساساً وليس المتغيرات).
مثلاً : تستطيع في برنامجك أن تجعله يتصل بقاعدة البيانات ويستخرج لك نتيجة البحث مع كل طلب.
وتستطيع مثلا في برنامج يوزرات أوقاعدة بيانات طلاب وتستطيع أن تخزن ما تحتاج البحث فيه في داتا جريد فيو
وتبحث في فيها كلما احجتجت لذلك دون أن تجعل البرنامج يتصل بقاعدة البيانات
كل الطرق متاحة ولكن أن من يختار الطريق إما المتشعب الطويل أم الطريق المختصر القصير ..
وجهة نظرك جيدة جدًا أستاذ Taha Okla
ولكن الناس الآخرون قد يستعملون برنامجك وتكون مواصفات أجهزتهم ضعيفة !
فقد تكون ذاكرة الرام مثلا أقل بكثير من 2 جيجا بايت .
وإذا كان برنامجك مليء بالمتغيرات التي تلتهم الذاكرة ؛ فإن برنامجك سيعمل ببطء شديد في أجهزتهم .
ولكنا على كل حال دعنا نرى آراءً أخرى من مبرمجين آخرين .
ولك مني خاص الشكر والتقدير على ردك التفصيلي .
المشاركات : 2,055
المواضيع 49
الإنتساب : Oct 2017
السمعة :
538
الشكر: 10589
تم شكره 5330 مرات في 2095 مشاركات
17-01-22, 10:53 PM
(آخر تعديل لهذه المشاركة : 17-01-22, 11:02 PM {2} بواسطة ابراهيم ايبو.)
السلام عليكم ورحمة الله وبركاته
اخي الكريم
كما أشار الأخ الغالي Taha انه فيما مضى كانت الذاكرة صغيرة جدا والمبرمج كان يفترض ان أغلب الأجهزة التي سيعمل برنامجه عليها راماتها صغيرة (نظرا لارتفاع أسعارها في ذلك الوقت ) حيث كان يبرمج بالمتغيرات الرقمية الصغيرة المجال والتي تم انشاؤها أيضا لنفس الأسباب وأسباب أخرى وحتى لا يتم التهام ذاكرة التشغيل .. حتى اني أتذكر اننا كنا نقوم بتحسين الذكرة (640Kb) حتى تعمل البرامج وكم عانيت يومها من تشغبل نسخة PhotoShop الإصدار 3.05 لان الرام كانت عندي 4 ميغا والويندوز 3.11 ويحتاج الى 8 ميغا ويقيت على الاصدار 2.5
المهم نأتي الى النقطة الأهم وهي السكوب الذي يتم فيه تعريف المتغير فإن كان معرف في دالة فإن هذا المتغير سينتهي بنهاية الدالة وسيتدمر اما لو تم تعريفه على مستوى المشروع ككل فهنا سيبقى في الذاكرة حتى انهاء البرنامج وان كثرت المتغيرات على مستوى المشروع هنا يمكننا
اختيار المتغيرات ذات أنواع البيانات الصغيرة بالرغم من ان الامر لم يعد بالأهمية التي يجب علينا الاهتمام بها بسبب حجم الذاكرة الكبير
ناحية أخرى تعودنا على تعريف المتغير في الجملة نفسها بنوع Integer بل ان الحرف الذي نضعه للمتغير هو الحرف I مأخوذ من اسم نوع البيانات
وهذا ما دأب عليه اغلب المبرمجين
بقي شيء مهم وهو لماذا تصبح البرامج ثقيلة ؟ الأسباب كثيرة أهمها إضافة أدوات خارجية فيها بعض المؤثرات -الإكثار من جمل التكرار عند التحميل - تحميل كل البيانات وبخاصة ان كانت السجلات كثيرة فتح اكثر من فورم في نفس الوقت - كثرة الادوات على الفورم فمثلا 20 RadioBotton يمكن الاستعاضة عنها بكومبوبوكس طريقة كتابة الاكواد وبخاصة التكرار وعدم اللجوء الى oop البرمجة الشيئية وغيرها الكثير
على اية حال موضوع جميل يعيدنا الى التسعينات من القرن الماضي والى زمن كنا فيه شباب وكانت الاجهزة ضعيفة كالرجل الهرم
اما الان فقد ازدادت الاجهزة شبابا ونحن هرمنا (ههههه)
شكرا لك يا أبو خالد
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
المشاركات : 7,397
المواضيع 802
الإنتساب : Sep 2013
السمعة :
853
الشكر: 13167
تم شكره 18826 مرات في 4421 مشاركات
فعلا الكلام صحيح لكن الطبع يغلب التطبع  مدري لها دخل او لا.
لكن فعلا -مرة اخرى- ,و استغرب من عدم استخدامي لغير الـ Integer.
PHP كود :
Dim myNumber As Byte = 0 For myNumber = 1 To 254 ListBox1.Items.Add(myNumber) Next
انواع البيانات البسيطة مثل هذه تناسب اي نسخة محدودة من اي برنامج [اظن فقط]
باذن الله تعالى اذا لم انس ساعمل بهذه النصيحة و اذكر بها كل من يرى موضوع لي بالمنتدى.
شكر الله لك وبارك فيك وكل من يقرأ هذا الكلام.
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
المشاركات : 565
المواضيع 65
الإنتساب : Feb 2021
السمعة :
73
الشكر: 1001
تم شكره 872 مرات في 436 مشاركات
18-01-22, 12:49 AM
(آخر تعديل لهذه المشاركة : 18-01-22, 12:55 AM {2} بواسطة أبو خالد الشكري.)
المشاركات : 565
المواضيع 65
الإنتساب : Feb 2021
السمعة :
73
الشكر: 1001
تم شكره 872 مرات في 436 مشاركات
المشاركات : 515
المواضيع 87
الإنتساب : Apr 2015
السمعة :
5
الشكر: 1433
تم شكره 417 مرات في 120 مشاركات
ابدعت حقيقي
صراحة لم يخطر علي بالي من قبل
مع العلم ان معظم الاوقات كنت ابحث دائما عن افضل كود لتنفيذ المهمة التي اعمل عليها من حيث السرعة والاداء والثبات وقلة الاخطاء المحتملة ولم يخطر ببالي ذلك من قبل ما كان يخطر ببالي ان اعرف نوع المتغير الغير معلوم حتي لا يستغل من الرامات اكثر من object
وطريقتك بالفعل هتفرق جدا مع البرامج كبيرة الحجم وكثيرة النوافذ والمهام ولا اعتقد انها ستفرق او ستلاحظ في البرامج الصغيرة
وصراحة اتشوق لمثل هذه المواضيع والافكار التي ربما يسهي عنها بعض الاشخاص لتعودهم علي طرق اخري او لعدم التفكير بيها من قبل
شكرا جزيلا لك استمر ♥
المشاركات : 565
المواضيع 65
الإنتساب : Feb 2021
السمعة :
73
الشكر: 1001
تم شكره 872 مرات في 436 مشاركات
شكرًا جزيلا على مرورك الكريم
كلنا نتعلم من بعضنا
وفعلا هناك أمور صغيرة ولكنها مهمة ويجب مراعاتها عند بناء برنامج جديد
تحياتي لك ، والله يوفقك .
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
82
الشكر: 774
تم شكره 996 مرات في 298 مشاركات
السلام عليكم ورحمة الله وبركاته
ربما لا اكون من المبرمجين المحترفين حتى اناقش هذا الموضوع لكن انا أتفق مع أخي أبو خالد الشكري وللأسباب التالية:
اولا: ان الفئة التي تستخدم برنامجك من الناس ليس كلهم على دراية بالحاسوب ويتفحص الضغط المسلط على ال RAM وعلى المعالج بأستمرار وهو ممكن مثبت على الوندوز كثير برامج واغلبها تعمل على المعالج بوضع الاختفاء وبعضها قام بتشغيلها ولم يطفئها وتستهلك ذاكرة
صح ان الRAM ٤ جيجا هو قوي لكن ربما قد تكون لعبة او برنامج معين يستهل اكثر من نصف هذا الرقم! فنأخذ بالحسبان خفة عمل برنامجنا لتجنب الوقوع بأخطاء.
ثانيا:ليس فقط المتغيرات الرقمية الكثير من المتغيرات وايضا الفئات المستخدمه اذا كانت تستهلك شيء من الذاكرة يفضل بالكود هدم عمل هذا المتغير او الفئة وخاصة البرامج التي تحتوي على تصاريح كثيرة
حتى لانتسبب بتهنيج او تعليق البرنامج.
ثالثا: الفرق بين ال ٤ Byte وال ١ byte وغيرها لايظهر بالمشاريع الصغيرة
فأنا هنا اتحدث عن المشاريع الضخمه التي ربما تحتوي على الف متغير
فبفرض بنفس الوقت الف متغير من حجم ٤ يكون ٤٠٠٠ الف بينما ١ يكون ١٠٠٠ فقط وهي ربع القيمة! وهذا عدا مايستهلكه البرنامج من الاشياء الاخرى.
واخيرا انا من وجهة نظري افضل بالعمل على تقسيم البرنامج بأسلوب معين بحيث اتلاعب بحجم الذاكرة للبرنامج مثل تقسيم برنامج الى برنامجين ويتصل واحد بالثاني حتى اثناء الاستخدام يكون التأثير بالنصف على الجهاز ( المقصود هنا بعض البرامج المعينة)
مجرد رأيي واتمنى ان لا اكون قد اخطأت بشي
والسلام عليكم ورحمة الله وبركاته
|