تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
قضية كبيرة جدًا للمناقشة ... وكل المبرمجين المحترفين مدعوِّين لمناقشتها
#1
Exclamation 
أسعد الله أوقاتكم أيها المبرمجون الأحبة

في هذه المشاركة (الصغيرونه)  - هذه الكلمة في لهجة أهل عُمان ؛ للتعبير عن الشيء الصغير جدًا 

 ألاحظ أكثر المبرمجين - خصوصًا المبرمجين المحترفين - عندما يريدون وضع متغير رقمي فإنهم يختارون وبلا تفكير ، يختارون المتغير 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 بايت فقط Smile

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

 وقِس على متغير Integer بقية المتغيرات التي يكتبها المبرمجون دون مراعاة !

 أخواني المبرمجين ...

أترك لكم هذه القضية للمناقشة ، ولإدلاء آرائكم فيها ، كل مبرمج فيكم يكتب حسب وجهة نظره .

ولكم مني خالص التحية والاحترام .


كود :
   Dim myNumber As Integer = 0

       For myNumber = 1 To 11
           ListBox1.Items.Add(myNumber)
       Next
الرد }}
#2
أسعد الله مساك ومساء الجميع ..

هذه الكلام كان مهم جداً عندما كانت البرامج تصمم لنظام تشغيل دوس وما شابه

ولكن في أيامنا هذه مهما كان المتغير كبيرا أو صغيراً لم يعد مهماً 
فأقل جهاز يحتوي على 3 جيجا رام DDR2  
وأغلب الأجهزة الحالية أصبحت من 4 جيجا رام DDR3

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

حيث أن أنظمة التشغيل هي من تطلب ذلك ..


فأي متغير مهما كان انتيجر أو لونج أو دبل 
يهمل لصغره أمام هذه الرامات الضخمة..

ولكن عنايتك ببرامجك ومعرفة المتغيرات التي تريدها لبرنامك يجعل برنامجك أسرع بشكل غير ملحوظ.
أغلب البرامج البطيئة لم يكن السبب فيها نوع المتغير 
ولكن الطريقة التي طلب بها تنفيذ البرنامج (يعني خطأ من الكود أساساً وليس المتغيرات).

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

قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}
#3
(17-01-22, 09:05 PM)Taha Okla كتب : أسعد الله مساك ومساء الجميع ..

هذه الكلام كان مهم جداً عندما كانت البرامج تصمم لنظام تشغيل دوس وما شابه

ولكن في أيامنا هذه مهما كان المتغير كبيرا أو صغيراً لم يعد مهماً 
فأقل جهاز يحتوي على 3 جيجا رام DDR2  
وأغلب الأجهزة الحالية أصبحت من 4 جيجا رام DDR3

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

حيث أن أنظمة التشغيل هي من تطلب ذلك ..


فأي متغير مهما كان انتيجر أو لونج أو دبل 
يهمل لصغره أمام هذه الرامات الضخمة..

ولكن عنايتك ببرامجك ومعرفة المتغيرات التي تريدها لبرنامك يجعل برنامجك أسرع بشكل غير ملحوظ.
أغلب البرامج البطيئة لم يكن السبب فيها نوع المتغير 
ولكن الطريقة التي طلب بها تنفيذ البرنامج (يعني خطأ من الكود أساساً وليس المتغيرات).

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


وجهة نظرك جيدة جدًا أستاذ Taha Okla

ولكن الناس الآخرون قد يستعملون برنامجك وتكون مواصفات أجهزتهم ضعيفة !
فقد تكون ذاكرة الرام مثلا أقل بكثير من 2 جيجا بايت .
وإذا كان برنامجك مليء بالمتغيرات التي تلتهم الذاكرة ؛ فإن برنامجك سيعمل ببطء شديد في أجهزتهم .

ولكنا على كل حال دعنا نرى آراءً أخرى من مبرمجين آخرين .

ولك مني خاص الشكر والتقدير على ردك التفصيلي .
الرد }}
#4
السلام عليكم ورحمة الله وبركاته
اخي الكريم 
كما أشار الأخ الغالي  Taha انه فيما مضى كانت الذاكرة صغيرة جدا والمبرمج كان يفترض ان أغلب الأجهزة التي سيعمل برنامجه عليها راماتها صغيرة (نظرا لارتفاع أسعارها في ذلك الوقت ) حيث كان يبرمج بالمتغيرات الرقمية الصغيرة المجال والتي تم انشاؤها أيضا لنفس الأسباب وأسباب أخرى وحتى لا يتم التهام ذاكرة التشغيل .. حتى اني أتذكر اننا كنا نقوم بتحسين الذكرة (640Kb) حتى تعمل البرامج وكم عانيت يومها من تشغبل نسخة PhotoShop  الإصدار 3.05 لان الرام كانت عندي 4 ميغا والويندوز 3.11 ويحتاج الى 8 ميغا ويقيت على الاصدار 2.5
المهم نأتي الى النقطة الأهم وهي السكوب الذي يتم فيه تعريف المتغير فإن كان معرف في دالة فإن هذا المتغير سينتهي بنهاية الدالة وسيتدمر اما لو تم تعريفه على مستوى المشروع ككل فهنا سيبقى في الذاكرة حتى انهاء البرنامج وان كثرت المتغيرات على مستوى المشروع هنا يمكننا  
اختيار المتغيرات ذات أنواع البيانات الصغيرة  بالرغم من ان الامر لم يعد بالأهمية التي يجب علينا الاهتمام بها بسبب حجم الذاكرة الكبير
ناحية أخرى تعودنا على تعريف المتغير في الجملة  نفسها بنوع Integer بل ان الحرف الذي نضعه للمتغير هو الحرف I مأخوذ من اسم نوع البيانات
وهذا ما دأب عليه اغلب المبرمجين
بقي شيء مهم وهو لماذا تصبح البرامج ثقيلة ؟ الأسباب كثيرة أهمها إضافة أدوات خارجية فيها بعض المؤثرات -الإكثار من جمل التكرار عند التحميل  - تحميل كل البيانات وبخاصة ان كانت السجلات كثيرة  فتح اكثر من فورم في نفس الوقت - كثرة الادوات على الفورم فمثلا 20 RadioBotton يمكن الاستعاضة عنها بكومبوبوكس طريقة كتابة الاكواد وبخاصة التكرار وعدم اللجوء الى oop البرمجة الشيئية وغيرها الكثير
على اية حال موضوع جميل يعيدنا الى التسعينات من القرن الماضي والى زمن كنا فيه شباب وكانت الاجهزة ضعيفة كالرجل الهرم 
اما الان فقد ازدادت الاجهزة شبابا ونحن هرمنا (ههههه)
شكرا لك يا أبو خالد
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}
#5
فعلا الكلام صحيح  لكن الطبع يغلب التطبعSmile مدري لها دخل او لا.
لكن فعلا  -مرة اخرى-  ,و استغرب من عدم استخدامي لغير الـ Integer.

PHP كود :
Dim myNumber As Byte 0
        For myNumber 
1 To 254
            ListBox1
.Items.Add(myNumber)
 
       Next 

انواع البيانات البسيطة مثل هذه تناسب اي نسخة محدودة من اي برنامج  [اظن فقط]
باذن الله تعالى  اذا لم انس ساعمل بهذه النصيحة و اذكر بها كل من يرى موضوع لي بالمنتدى.
شكر الله لك وبارك فيك وكل من يقرأ هذا الكلام.
الرد }}
#6
وعليكم السلام ورحمة الله وبركاته


لك الشكر الجزيل أستاذ إبراهيم على ما أفضت به علينا من معلومات ثرية
والحق معك فقد كان زمانًا ( أغبرًا Smile ) إن صح التعبير ؛ فقد كانت الأجهزة بما فيها من رامات ومعالجات كانت ضعيفة وبطيئة وبتكنولوجيا متواضعة إلى حدٍ ما .
وأنا من الذين عاصروا تلك الأجهزة (التعبانة) والبرمجيات البدائية ، فما زالت في ذاكرتي أجهزة صخر MSX على سبيل المثال وسرعاتها المحدودة وبرمجياتها الصغيرة . 
وأذكر أيضا ويندوز 3.1 ثم تلتها ويندوز 3.11 ثم ويندوز Xp وغيرها ...
أما الآن فقد تطورت التكنولوجيا كثيرًا فعلا ، وكلامك منطقي جدًا فإن المتغيرات على كثرتها لن تؤثر على سرعة الأجهزة ذات المواصفات العالية من جهة ، وكذلك لأن عمر تنفيذ المتغيرات صغير إن لم تكن على مستوى المشروع من جهة أخرى .

جميل جدَا جدًا ما شاء الله ؛ كل واحد منكما أعطانا معلومات رائعة حول موضوع (المتغيرات) !

هذه هي الخبرة ( ومنكم نستفيد ) ، وعسى أن يستفيد كل قراء المنتدى من هذه المعلومات القيِّمة .

خالص الشكر والتقدير لك أستاذ إبراهيم .

وما زال المجال مفتوحًا لكل المبرمجين لإضافة أية معلومات جديدة .

وشكرًا .

(18-01-22, 12:45 AM)سعود كتب : فعلا الكلام صحيح  لكن الطبع يغلب التطبعSmile مدري لها دخل او لا.
لكن فعلا  -مرة اخرى-  ,و استغرب من عدم استخدامي لغير الـ Integer.

PHP كود :
Dim myNumber As Byte 0
        For myNumber 
1 To 254
            ListBox1
.Items.Add(myNumber)
 
       Next 

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



مرحبًا بك أستاذ سعود ، وتشرفنا بمشاركتك اللطيفة

وفعلا المثل صحيح ( الطبع يغلب على التطبع ) Smile

فنحن تعودنا وتبرمجنا عقليًّا على استخدام Integer حتى للأعداد الصغيرة Smile

ولكن لا بأس أن نصحح أو نعدل أو نطور (برامجنا) بما هو مناسب لأجهزتنا المتطورة وللأجهزة الأخرى الأقل تطورًا !

أشكرك أستاذي على مشاركتك في موضوع ( المتغيرات) ، وبارك الله فيك .
الرد }}
تم الشكر بواسطة: ابراهيم ايبو , 3booody
#7
الرد }}
#8
ابدعت حقيقي
صراحة لم يخطر علي بالي من قبل
مع العلم ان معظم الاوقات كنت ابحث دائما عن افضل كود لتنفيذ المهمة التي اعمل عليها من حيث السرعة والاداء والثبات وقلة الاخطاء المحتملة ولم يخطر ببالي ذلك من قبل ما كان يخطر ببالي ان اعرف نوع المتغير الغير معلوم حتي لا يستغل من الرامات اكثر من object
وطريقتك بالفعل هتفرق جدا مع البرامج كبيرة الحجم وكثيرة النوافذ والمهام ولا اعتقد انها ستفرق او ستلاحظ في البرامج الصغيرة
وصراحة اتشوق لمثل هذه المواضيع والافكار التي ربما يسهي عنها بعض الاشخاص لتعودهم علي طرق اخري او لعدم التفكير بيها من قبل
شكرا جزيلا لك استمر ♥
الرد }}
#9
شكرًا جزيلا على مرورك الكريم

كلنا نتعلم من بعضنا

وفعلا هناك أمور صغيرة ولكنها مهمة ويجب مراعاتها عند بناء برنامج جديد



تحياتي لك ، والله يوفقك .
الرد }}
تم الشكر بواسطة: 3booody , ابراهيم ايبو , ابراهيم ايبو
#10
السلام عليكم ورحمة الله وبركاته

ربما لا اكون من المبرمجين المحترفين حتى اناقش هذا الموضوع لكن انا أتفق مع أخي أبو خالد الشكري وللأسباب التالية:

اولا: ان الفئة التي تستخدم برنامجك من الناس ليس كلهم على دراية بالحاسوب ويتفحص الضغط المسلط على ال RAM وعلى المعالج بأستمرار وهو ممكن مثبت على الوندوز كثير برامج واغلبها تعمل على المعالج بوضع الاختفاء وبعضها قام بتشغيلها ولم يطفئها وتستهلك ذاكرة
صح ان الRAM ٤ جيجا هو قوي لكن ربما قد تكون لعبة او برنامج معين يستهل اكثر من نصف هذا الرقم! فنأخذ بالحسبان خفة عمل برنامجنا لتجنب الوقوع بأخطاء.

ثانيا:ليس فقط المتغيرات الرقمية الكثير من المتغيرات وايضا الفئات المستخدمه اذا كانت تستهلك شيء من الذاكرة يفضل بالكود هدم عمل هذا المتغير او الفئة وخاصة البرامج التي تحتوي على تصاريح كثيرة
حتى لانتسبب بتهنيج او تعليق البرنامج.

ثالثا: الفرق بين ال ٤ Byte وال ١ byte وغيرها لايظهر بالمشاريع الصغيرة
فأنا هنا اتحدث عن المشاريع الضخمه التي ربما تحتوي على الف متغير 
فبفرض بنفس الوقت الف متغير من حجم ٤ يكون ٤٠٠٠ الف بينما ١ يكون ١٠٠٠ فقط وهي ربع القيمة! وهذا عدا مايستهلكه البرنامج من الاشياء الاخرى.

واخيرا انا من وجهة نظري افضل بالعمل على تقسيم البرنامج بأسلوب معين بحيث اتلاعب بحجم الذاكرة للبرنامج مثل تقسيم برنامج الى برنامجين ويتصل واحد بالثاني حتى اثناء الاستخدام يكون التأثير بالنصف على الجهاز ( المقصود هنا بعض البرامج المعينة)

مجرد رأيي واتمنى ان لا اكون قد اخطأت بشي

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الى الاخوة المبرمجين بالسعودية مساعدة بخصوص الفاتورة الإلكترونية mohamedgadain61 7 1,518 23-12-21, 06:07 AM
آخر رد: DR.YASER
  مشكلة كبيرة ارجو المساعدة خالد20 3 949 22-06-21, 04:54 PM
آخر رد: خالد20
  [كود] احتج كود بعد ازن اخونا المبرمجين (تم الحل) محمد ايمن 6 1,445 24-05-20, 03:15 AM
آخر رد: محمد ايمن
  مطلوب مثال لعرض بيانات كبيرة الحجم مع بروجرس بار new_programer 2 1,283 05-03-19, 06:28 AM
آخر رد: new_programer
  مساعده شباب اريد تعديل الكود يشتغل عليDataGridView بدل ListView -اين المحترفين Fransesco 5 1,838 25-02-19, 10:49 AM
آخر رد: elgokr
  ممكن احد يعمل المشروع اخواني المبرمجين نور الهدى الهدى 14 4,053 21-06-18, 04:51 PM
آخر رد: نور الهدى الهدى
  [VB.NET] رجاء دخول المحترفين فى برمجة الشبكات network 0 2,180 13-09-17, 05:45 AM
آخر رد: network
  مشكلة كبيرة فى طريح تاريخين من بعض عشان يجيبلى عدد الدقايق مابين التاريخين دول araxis 8 2,412 27-10-16, 08:23 PM
آخر رد: ممدوح
  الخبراء المبرمجين والمختصيين محمد بوقزاحة 4 1,948 27-10-16, 07:03 PM
آخر رد: محمد بوقزاحة
  مساعده من الخبراء المبرمجين والمختصيين محمد بوقزاحة 0 1,274 21-10-16, 12:19 PM
آخر رد: محمد بوقزاحة

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم