واحد كان بيسأل علي stackoverflow ازاي يرتب package.json ابجديا من غير ما يرتبها يدويا ومن غير ما يعمل install لحاجة
ودي كانت اجابتي وحبيت اشاركها معاكم يمكن حد يستفيد
#programming
ودي كانت اجابتي وحبيت اشاركها معاكم يمكن حد يستفيد
#programming
👍3🔥2🤣2
SOLID principals
هي عبارة عن 5 مبادئ بتاخدها في اعتبارك وانت بتبدأ اي مشروع جديد ولازم تكون عارفهم كويس
كل مبدا فيهم بيحل مشكلة عويصة، ودة اللي هنتعلمه مع بعض
S: Single responsibility
O: Open-closed
L: Liskov substitution
I: Interface segregation
D: Dependency inversion
تعالي نمسكهم واحد واحد نتعمق فيه اكتر
S: Single responsibility
كل كلاس مسؤول عن حاجة واحدة بس
بلاش بأة حكاية الكلاس الجامد السوبر هيرو اللي بيعمل كل حاجة ومابيهمهوش حد
اية الميزة ان الكلاس يكون شايل مسؤلية حاجة واحدة، هو يعني لو شيلناه اكتر من طاقته هيقول لأ؟!
لا ياسيدي هيشيل ومش هيقول لا، بس اي تعديل في اي مهمة وارد جدا باقية المهام تتأثر بالتعديل دة وانت مش اخد بالك
الصح ان الكلاس يكون مركز في مهمة واحدة بس، ومعزول تماما عن اي كلاس تاني
O: Open-closed
يعني الكلاس مفتوح للتوسع لكن مغلق للتعدي
فمثلا كل انا تحب تضيف ميزات جديدة للكلاس، ممكن تعمل كلاسات تورث منه، لكن ماتعدلش علي الكلاس نفسه عشان مايحصلش اي سلوك غير متوقع
بالبلدي كدة، سيب كل حاجة متصلبة زي ما هي .. عشان مايحصلش زي ما حصل مع سمير غانم في مسرحية المتزوجون "جيت اصلح الجاكت البنطلون ضرب"
مثلا، بدل ماتعمل ميثود squareArea بيكسب مساحة مربع، اعمل ميثود general اكتر اسمها shapeArea بحيث لما الكلاس يتعامل مع اشكال جديدة مانضطرش نضيف methods جديدة
L: Liskov substitution
و Liskov دة اسم الشخص اللي اتكلمت عن المبدأ دة
المبدا بيقولك مش دايما بيكون صح ان الكلاس يورث من كلاس تاني، حتي لو كانت الموضوع logic بالنسبالك
في شوية شروط للوراثة دي هنتكلم عنها بالتفصيل في بوست لاحق
ينفع مثلا نعمل كلاس مربع بيورث من كلاس مستطيل؟ من الناحية الرياضية المربع هو حالة خاصة من المستطيل بس طوله أد عرضه ... وقبل ماتتسرع وتقول طبعا ينفع يورثوا من بعض احب اقولك للاسف ماينفعش 😳 ... لية؟!
خد المثال دة واللي طبعا مش مكتوب بلغة برمجة معينة
var rectangle = new Rectangle()
rectangle.setHeight(10)
rectangle.setWidth(20)
الكود واضح بيعمل اية، طب تعالي بأة نشوف مجموع الطول والعرض كام
rectangle.getHeight() + rectangle.getWidth()
برضو الكود سهل، والنتيجة زي ماتوقعتها هي 30
حاول بأة تنفذ نفس الكود بس باستخدام كلاس المربع؟ هل يجوز ان الطول يختلف عن العرض؟ لا
من الحلول اللي ممكن تبان لطيفة ان الدالة setWidth تحط قيمة متساوية للطول والعرض ونفس الكلام للدالة setHeight
بس لو نفذنا الكود السابق هتطلعلنا نتيجة غير متوقعة، لان في عملية داخلية حصلت غيرت ال height لما نفذنا setWidth ودة شى غير متوقع
ماينفعش الكلاس الابن يحط شروط اقوي من الموجودة في الكلاس الاب، لكن ينفع العكس
بمعني ابسط، طالما الكلاس الاب ماشترطش ان الطول والعرض يكون بينهم علاقة معينة، ماينفعش الكلاس الابن يحط الشرط دة
I: Interface segregation
مبدأ فصل الواجهة
بدل ما تعمل Interface ضخم فيه كل المميزات، قسمه ل interfaces صغننة، كل واحد فيه شوية مميزات قليلة
بمعني اخر ماتجبرش الكلاسات علي عمل implementation ل methods مش محتاجينها
D: Dependency inversion
من الاخر ماتخليش كود يعتمد علي كود تاني
وبمعني ادق ماتخليش الكلاسات عالية المستوي تعتمد علي الكلاسات منخفضة المستوي، لكن ممكن تخليها تعتمد علي كلاسات مجردة ... مافهمتش؟
لو مثلا عندي متجر بيبيع شوية منتجات، لو عندك كلاس فيه ميثود بيعرض قائمة الاصناف في قسم الاكل
class Store{
food: Food;
listFood(): Food{
.....
}
}
الكود مش مكتوب بلغة برمجة معينة، المهم ان الكلاس دة بيعتمد علي كلاس اسمه Food
لو حبينا بأة نزود خاصية عرض قاىمة لعب الاطفال، فهنعمل ميثود listToys وهنعتمد علي كلاس Toys
وكل ميزة هنحب نزودها، هنتضطر نعتمد علي كلاس خاص بيها (دة طبعا تنفيذا لمبدأ المسؤولية الواحدة بتاعة حرف S)
ودة برضو بينتهك مبدأ Open-closed اللي بيقولك بلاش تعدل علي كلاس موجود
الكلاس Store عالي المستوي بيعتمد علي كلاسات Food و Toys منخفضة المستوي
نقصد بكلمة عالية المستوي انها مبنية علي كلاسات تانية ذات مستوي منخفض، لغاية مانوصل لاول كلاس مش بيعتمد علي حاجة بنقول عليه الاساس .. زي كدة ما بنتعامل مع ادوار العمارة السكنية
بدل مانخلي كلاس Store يعتمد علي كلاسات تانية، هنعمل abstract class اسمه product
ودة االي هنبني عليه الكلاسات منخفضة المستوي
وبدل ما الكلاس عالي المستوي يعتمد علي الكلاسات منخفضة المستوي هنخليه يعتمد علي الكلاس المجرد، فهنعمل تعديل بسيط للكود بتاعنا
class Store{
product: Products
listProduct(){
.....
}
}
كل مرة هنزود منتجات جديدة للمتجر بتاعنا مش هنحتاج نعدل في كلاس Store علشان نضيف الكلاس الجديد جواه، لانه ببساطة مش بيعتمد علي اي كلاسات منخفضة المستوي
#programming
هي عبارة عن 5 مبادئ بتاخدها في اعتبارك وانت بتبدأ اي مشروع جديد ولازم تكون عارفهم كويس
كل مبدا فيهم بيحل مشكلة عويصة، ودة اللي هنتعلمه مع بعض
S: Single responsibility
O: Open-closed
L: Liskov substitution
I: Interface segregation
D: Dependency inversion
تعالي نمسكهم واحد واحد نتعمق فيه اكتر
S: Single responsibility
كل كلاس مسؤول عن حاجة واحدة بس
بلاش بأة حكاية الكلاس الجامد السوبر هيرو اللي بيعمل كل حاجة ومابيهمهوش حد
اية الميزة ان الكلاس يكون شايل مسؤلية حاجة واحدة، هو يعني لو شيلناه اكتر من طاقته هيقول لأ؟!
لا ياسيدي هيشيل ومش هيقول لا، بس اي تعديل في اي مهمة وارد جدا باقية المهام تتأثر بالتعديل دة وانت مش اخد بالك
الصح ان الكلاس يكون مركز في مهمة واحدة بس، ومعزول تماما عن اي كلاس تاني
O: Open-closed
يعني الكلاس مفتوح للتوسع لكن مغلق للتعدي
فمثلا كل انا تحب تضيف ميزات جديدة للكلاس، ممكن تعمل كلاسات تورث منه، لكن ماتعدلش علي الكلاس نفسه عشان مايحصلش اي سلوك غير متوقع
بالبلدي كدة، سيب كل حاجة متصلبة زي ما هي .. عشان مايحصلش زي ما حصل مع سمير غانم في مسرحية المتزوجون "جيت اصلح الجاكت البنطلون ضرب"
مثلا، بدل ماتعمل ميثود squareArea بيكسب مساحة مربع، اعمل ميثود general اكتر اسمها shapeArea بحيث لما الكلاس يتعامل مع اشكال جديدة مانضطرش نضيف methods جديدة
L: Liskov substitution
و Liskov دة اسم الشخص اللي اتكلمت عن المبدأ دة
المبدا بيقولك مش دايما بيكون صح ان الكلاس يورث من كلاس تاني، حتي لو كانت الموضوع logic بالنسبالك
في شوية شروط للوراثة دي هنتكلم عنها بالتفصيل في بوست لاحق
ينفع مثلا نعمل كلاس مربع بيورث من كلاس مستطيل؟ من الناحية الرياضية المربع هو حالة خاصة من المستطيل بس طوله أد عرضه ... وقبل ماتتسرع وتقول طبعا ينفع يورثوا من بعض احب اقولك للاسف ماينفعش 😳 ... لية؟!
خد المثال دة واللي طبعا مش مكتوب بلغة برمجة معينة
var rectangle = new Rectangle()
rectangle.setHeight(10)
rectangle.setWidth(20)
الكود واضح بيعمل اية، طب تعالي بأة نشوف مجموع الطول والعرض كام
rectangle.getHeight() + rectangle.getWidth()
برضو الكود سهل، والنتيجة زي ماتوقعتها هي 30
حاول بأة تنفذ نفس الكود بس باستخدام كلاس المربع؟ هل يجوز ان الطول يختلف عن العرض؟ لا
من الحلول اللي ممكن تبان لطيفة ان الدالة setWidth تحط قيمة متساوية للطول والعرض ونفس الكلام للدالة setHeight
بس لو نفذنا الكود السابق هتطلعلنا نتيجة غير متوقعة، لان في عملية داخلية حصلت غيرت ال height لما نفذنا setWidth ودة شى غير متوقع
ماينفعش الكلاس الابن يحط شروط اقوي من الموجودة في الكلاس الاب، لكن ينفع العكس
بمعني ابسط، طالما الكلاس الاب ماشترطش ان الطول والعرض يكون بينهم علاقة معينة، ماينفعش الكلاس الابن يحط الشرط دة
I: Interface segregation
مبدأ فصل الواجهة
بدل ما تعمل Interface ضخم فيه كل المميزات، قسمه ل interfaces صغننة، كل واحد فيه شوية مميزات قليلة
بمعني اخر ماتجبرش الكلاسات علي عمل implementation ل methods مش محتاجينها
D: Dependency inversion
من الاخر ماتخليش كود يعتمد علي كود تاني
وبمعني ادق ماتخليش الكلاسات عالية المستوي تعتمد علي الكلاسات منخفضة المستوي، لكن ممكن تخليها تعتمد علي كلاسات مجردة ... مافهمتش؟
لو مثلا عندي متجر بيبيع شوية منتجات، لو عندك كلاس فيه ميثود بيعرض قائمة الاصناف في قسم الاكل
class Store{
food: Food;
listFood(): Food{
.....
}
}
الكود مش مكتوب بلغة برمجة معينة، المهم ان الكلاس دة بيعتمد علي كلاس اسمه Food
لو حبينا بأة نزود خاصية عرض قاىمة لعب الاطفال، فهنعمل ميثود listToys وهنعتمد علي كلاس Toys
وكل ميزة هنحب نزودها، هنتضطر نعتمد علي كلاس خاص بيها (دة طبعا تنفيذا لمبدأ المسؤولية الواحدة بتاعة حرف S)
ودة برضو بينتهك مبدأ Open-closed اللي بيقولك بلاش تعدل علي كلاس موجود
الكلاس Store عالي المستوي بيعتمد علي كلاسات Food و Toys منخفضة المستوي
نقصد بكلمة عالية المستوي انها مبنية علي كلاسات تانية ذات مستوي منخفض، لغاية مانوصل لاول كلاس مش بيعتمد علي حاجة بنقول عليه الاساس .. زي كدة ما بنتعامل مع ادوار العمارة السكنية
بدل مانخلي كلاس Store يعتمد علي كلاسات تانية، هنعمل abstract class اسمه product
ودة االي هنبني عليه الكلاسات منخفضة المستوي
وبدل ما الكلاس عالي المستوي يعتمد علي الكلاسات منخفضة المستوي هنخليه يعتمد علي الكلاس المجرد، فهنعمل تعديل بسيط للكود بتاعنا
class Store{
product: Products
listProduct(){
.....
}
}
كل مرة هنزود منتجات جديدة للمتجر بتاعنا مش هنحتاج نعدل في كلاس Store علشان نضيف الكلاس الجديد جواه، لانه ببساطة مش بيعتمد علي اي كلاسات منخفضة المستوي
#programming
❤23👍7🤣1
ال Signals في علم الكمبيوتر هي طريقة للتواصل بين ال objects وبعضها بحيث تحقق observe pattern
واللي بيحصل باختصار ان في signal بيتبعت عند حدوث event معين، بيستقبله ال slots لتنفيذ مهام معينة ردا علي الحدث
ال #observe_pattern بيكون فيه object اسمه subject له قائمة من ال dependants اسمهم observers
بحيث لما ال state بتاعته تتغير ينبه ال observers
ابسط مثال علي كدة لما تخلي مجموعة handlers او event listeners يعملوا listen للاحداث اللي بيطلقها object معين
wikipedia.org/wiki/Observer_pattern
wikipedia.org/wiki/Signals_and_slots
في طرق اخري لتحقيق اهداف مشابهة زي مثلا استخدام callbacks بس في نظام observer pattern نقدر نخلي ال Subject يتواصل مع اكتر من observer في نفس الوقت
نظام callbacks فيه مشكلتين اساسيتين:
- مش آمن: ممكن الفنكشن تنده ال callbacks ب arguments غلط
مثلا لو cb بيقبل parameters معينة، مفيش ضمان انه يتنفذ بال arguments الصحيحة
- ال cb مرتبط ارتباط وثيق بالفنكشن الاصلية، لان الفنكشن لازم تكون عارفة هي هتنادي مين
بعكس نظام observer pattern، ال Subject بيطلق الاحداث بغض النظر عن مين اللي هينفذها
نظام signals/slots تم ابتكاره بواسطة Qt (بيتنطق cute) ودة نظام cross-platform (زي flatter كدة) بقاله اكتر من 20 سنة ومكتوب ب c++ وبيدعم ال desktop apps علي اي نظام تشغبل ومؤخرا بأة بيدعم الموبايل كمان، وحاليا باة بيستخدم web assembly عشان يدعم الويب
qt.io
ودة مقال لطيف بيقارن بين Qt و flutter و React native
scythe-studio.com/en/blog/flutter-vs-react-native-vs-qt-in-2022
تفاصيل اكتر عن نظام signals/slots من ال documentations بتاعة Qt
doc.qt.io/archives/qt-4.8/signalsandslots.html
#programming #برمجة
واللي بيحصل باختصار ان في signal بيتبعت عند حدوث event معين، بيستقبله ال slots لتنفيذ مهام معينة ردا علي الحدث
ال #observe_pattern بيكون فيه object اسمه subject له قائمة من ال dependants اسمهم observers
بحيث لما ال state بتاعته تتغير ينبه ال observers
ابسط مثال علي كدة لما تخلي مجموعة handlers او event listeners يعملوا listen للاحداث اللي بيطلقها object معين
wikipedia.org/wiki/Observer_pattern
wikipedia.org/wiki/Signals_and_slots
في طرق اخري لتحقيق اهداف مشابهة زي مثلا استخدام callbacks بس في نظام observer pattern نقدر نخلي ال Subject يتواصل مع اكتر من observer في نفس الوقت
نظام callbacks فيه مشكلتين اساسيتين:
- مش آمن: ممكن الفنكشن تنده ال callbacks ب arguments غلط
مثلا لو cb بيقبل parameters معينة، مفيش ضمان انه يتنفذ بال arguments الصحيحة
- ال cb مرتبط ارتباط وثيق بالفنكشن الاصلية، لان الفنكشن لازم تكون عارفة هي هتنادي مين
بعكس نظام observer pattern، ال Subject بيطلق الاحداث بغض النظر عن مين اللي هينفذها
نظام signals/slots تم ابتكاره بواسطة Qt (بيتنطق cute) ودة نظام cross-platform (زي flatter كدة) بقاله اكتر من 20 سنة ومكتوب ب c++ وبيدعم ال desktop apps علي اي نظام تشغبل ومؤخرا بأة بيدعم الموبايل كمان، وحاليا باة بيستخدم web assembly عشان يدعم الويب
qt.io
ودة مقال لطيف بيقارن بين Qt و flutter و React native
scythe-studio.com/en/blog/flutter-vs-react-native-vs-qt-in-2022
تفاصيل اكتر عن نظام signals/slots من ال documentations بتاعة Qt
doc.qt.io/archives/qt-4.8/signalsandslots.html
#programming #برمجة
❤1👍1
#vscode #tips
side by side editing
👇👇
https://facebook.com/mobarmegeen/posts/pfbid02QU7UQHPd9Mr3raiR12B7j7cg4bj3ry1h2cSUMWVkJXfPjTHR6rJ2mvUDyRjFvL1Hl/
#developer #developers #frontend #backend #nodejs #html #css #java #programming
side by side editing
👇👇
https://facebook.com/mobarmegeen/posts/pfbid02QU7UQHPd9Mr3raiR12B7j7cg4bj3ry1h2cSUMWVkJXfPjTHR6rJ2mvUDyRjFvL1Hl/
#developer #developers #frontend #backend #nodejs #html #css #java #programming
Facebook
[vscode tips] side by side editing.mp4 | #vscode #tips
side by side...
side by side...
#vscode #tips
side by side editing
#developer #developers #frontend #backend #nodejs #html #css #java #programming
side by side editing
#developer #developers #frontend #backend #nodejs #html #css #java #programming
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
advanced button styling with #CSS
SHARE ♥
#developers #developer #programming #frontend #backend #nodejs #java #python #html
SHARE ♥
#developers #developer #programming #frontend #backend #nodejs #java #python #html
❤6
Forwarded from قعدة مبرمجين
👍5