VOL6: The Power of Recursion & Software Versioning
في عالم برمجة واجهات المستخدم الحديثة، يُعد تحقيق التوازن بين المرونة وسهولة الاستخدام من الأهداف المهمة للمطورين. يُمثل نمط Prop Getters في React إحدى الطرق الفعّالة لتحقيق هذه الأهداف، مما يُتيح بناء مكونات ديناميكية تتميز بالمرونة وقابلية التخصيص. في هذا المقال سنستكشف كيف يُمكن لنمط Prop Getters أن يُحدث فرقًا كبيرًا في تطوير مكونات React.
في عالم ألعاب الفيديو، تُوفر وحدات التحكم (controllers) ميزة تعديل وظائف الأزرار وإعادة تخصيصها لتُناسب تفضيلات اللاعب. يمكنك مثلاً في لعبة FIFA تغيير زر التسديد أو التمرير إلى زر آخر. هذه القدرة على إعادة تخصيص وحدة التحكم تشبه كثيرا ما يفعله نمط Prop Getters. يُتيح لك هذا النمط إعادة تعيين وتغيير "خصائص" المكونات في تطبيقك، مما يمنحك القدرة على تكييف وظائفها ومظهرها بما يتوافق مع متطلباتك الخاصة.
بناءا على هذا المثال يُمكننا تعريف نمط الـ Prop Getters على أنه طريقة لإعطاء المزيد من القدرة على التحكم للمستخدمين في كيفية تخصيص المكونات. يتم ذلك من خلال توفير دوال (functions) تُعيد مجموعة من الخصائص (props)، والتي يُمكن للمستخدمين بعد ذلك استخدامها لتعديل وتخصيص المكونات. هذا يُشبه إلى حدٍ ما إعطاء الأشخاص عدة أدوات لتخصيص منتج ما حسب رغبتهم، بدلاً من تقديم المنتج بصورة نهائية لا يُمكن تعديلها.
Software Versioning
كمبرمج رايق خلصت مشروعك وهيطلع للنور أخيرًا, ودي هتكون أول نسخة منه بس بدل ما تكتب جمبه version 1 هتلاقيك كتبت"Version 1.0.0" طيب ليه كل البرامج بتكتب نسخها كدا ودا معناه إيه ليا كمبرمج, دا اللي هنعرفه النهارده!
💡
ال Semantic Versioning أو "إصدار نسخ البرمجيات" هو ببساطة نظام تسمية لإصدارات البرامج, نظام التسمية دا مهم في كل أنواع البرمجيات سواء البرنامج دا تطبيق موبايل أو Web App API أو Library أو لغة برمجة أو حتى نظام تشغيل كامل زي IOS أو Windows
أهمية الـ Semantic Versioning
كمستخدم: بيعرفك إيه هي طبيعة التغيرات والاختلافات بين النسخ وبعضها
كمبرمج مهم بالنسبة لك في أمرين:
امتي تغير اسم نسخة البرنامج بتاعك وعلى أي أساس؟
إدارة ال Dependencies واللي يبان سهل بس كل لما برنامجك هيكبر وتزيد ال Dependencies كل لما فهمك وحُسن استخدامك لل Semantic Versioning هيريحك من مشاكل كتير ممكن تكسرأجزاء من برنامجك أو توقف شغله بالكامل.
The Power of Recursion
هذا المقال هو الجزء الثاني من مقال making sense of recursion، بعدما رأينا كيفية عمل الـ recursion وكيفية استخدامه، في هذا المقال سنبني على ما تعلمناه في المقال السابق لنتعلم مبادئ جديدة وسنرى نوعية المشاكل التي يساعدنا الـ recursion على حلها.
أغلب الأسئلة التي قمنا بحلها في المقال السابق كان يمكن حلها ببساطة باستخدام Loop دون الحاجة إلى استخدام recursion فعلى سبيل المثال سؤال مجموع الأعداد الصحيحة من 1 إلى N يمكن حله باستخدام loop كالتالي:
حتى إذا كنت تفهم الـ recursion جيداََ فعلى الأرجح هذا الحل هو ما ستفكر فيه عند قراءة السؤال. وهذه إحدى المشاكل التي قد تواجهك أثناء تعلم الـ recursion وهي أنك في البداية ترى استخدام الـ recursion لحل أسئلة يمكن حلها بسهولة باستخدام Loop وهذا ما قد يجعلك تتسائل عن أهمية الـ recursion أو الفائدة من تعلمه.
في هذا المقال، سنرى أمثلة متنوعة تظهر أهمية الـ recursion كأداة قوية لحل المشاكل.
Divide and conquer
أبرز الحالات التي يكون فيها الـ recursion مفيداََ هي خوارزميات divide and conquer
divide and conquer هو أحد أشهر الطرق لتصميم الخوارزميات والذي يعتمد على الـ recursion، باستخدام divide and conquer يمكننا حل العديد من المشاكل الصعبة بسهولة، وكمية الكود التي تكتبها عادة ما تكون صغيرةََ ويمكنك فهم ما الذي يقوم به الكود بمجرد قراءته، والميزة الأهم هي أنه يمكننا فعل كل ذلك بكفاءة
TypeScript Tales - Part 2
هنتعرف في المقال ده على نوع البيانات الخاص بالـ TypeScript والذي يعد جزءًا مهمًا في أي لغة برمجة. يوضح الرسم البياني أنواع البيانات التي تم تصنيفها على أنها أنواع بيانات أولية primitive/أنواع مدمجة builtin وأنواع محددة user defined من قبل المستخدم.
الأنواع الأولية Basic Types في TypeScript هي كالتالي:
number
bigint
string
boolean
null
undefined
number
bigint
string
boolean
null
undefined
Number
جميع الأرقام في TypeScript هي إما قيم عشرية floating-point أو أعداد صحيحة كبيرة. الأرقام العشرية لها نوع number بينما تحصل الأعداد الصحيحة الكبيرة على نوع bigint.
Git Commit Message Cheatsheet
بعد كل تغيير بتحب تسجله علي ال Version Control اللي عليه المشروع الخاص بيك بتحتاج تكتب رسالة , الرسالة دي بتوضح ايه التغيير اللي أنت عملته في الكود اللي أنت حاليا بترفعه علي Version Controlو كتير مننا بيتجاهل إنه يكتب الرسالة بشكل واضح يسهل عليه وعلي اللي بعده إنه يفهم من عنوان الرساله إيه اللي اتغير في الكود.
خلينا نقولك بسرعة على كلمات تقدر تبتدي بيها رسالتك، علشان تسهل عليك وتفهم اللي بعدك إيه اللي اتغير: