اذهب إلى المحتوى

كل الأنشطة

تحدث تلقائيًا

  1. الساعة الماضية
  2. انا اقصد في لارافيل وليس بايثون
  3. صحيح، فمسار تحليل البيانات في دورة الذكاء الاصطناعي كافية وبها دروس إضافية أيضًا ومحتوى خاص بها لأن الدورة تحتاج إلى ذلك بسبب اهتمامها بالبيانات وتعلم الآلة بشكل أكبر.
  4. طيب عندي سؤال مالفرق بين حسوب النقاش وحسوب الاكادمية يعني لو بنزل مقال وين انزله ولو بقراء عن شيء وين افضل مكان اتوجه له
  5. تعاملنا كمستقلين مع مختلف أصحاب المشاريع حتما سيختلف من عميل إلى آخر، شخصيا مررت بالعديد من التجارب مع مختلف العملاء داخل منصات العمل الحر وخارجها، لهذا أنصحك أولا عند التفاوض على المشروع، أرسل عرضا خطيا يتضمن نطاق العمل، والمواعيد النهائية، والميزانية، وشروط الدفع (ستستغني عن هذه المرحلة في حالة تعاملك داخل منصة للعمل الحر كمستقل مثلا، وبهذا الشكل يكون هناك دليل واضح على ما تم الاتفاق عليه وكأنك قمت بتوثيق كل شيء من البداية. في الغالب يكون العمل بمبدأ سكرام واعتماد منهجية أجايل لإدارة المشاريع وتسليم المقررات أمرا يعتمده بعض العملاء من غيرهم، لهذا في حالة لم تجد أمرا مشابها في طريقة العمل يمكنك أن تقترح عقد اجتماعات منتظمة لمراجعة التقدم المحرز مع التوثيق داخل نقاش المشروع. ففي المشاريع الكبيرة مثلا، من الأفضل استخدام عقد رسمي يحدد بوضوح المسؤوليات والتوقعات لكلا الطرفين. العديد من الأمور قد تحدث فنحن المستقلون لا نستطيع أن نفرض على العملاء توظيفنا مباشرة من أول نقاش، لهذا يجب أن نردّ بسرعة عند أول استفسار ورسالة منه، وإذا بدأ صاحب المشروع بتغيير المتطلبات أو التراجع عن الاتفاقيات فيمكنك التصرف معه باحترام. ومناقشة أي قضايا وطلب شروحات بوضوح، فعليك أن تكسب العميل وتعرف كيف تتفاوض معه من أول رسالة يرسلها لك، لأن إرسال الاستفسار والرد عليه بشكل مناسب هو نصف التفاوض. يمكنك مراجعة هذه المقالة للاستفادة أكثر: نصائح للتواصل مع العملاء قبل التوظيف ومشاهدة هذا الفيديو التوضيحي:
  6. هل اذا اخذت تحليل البيانات في دوره الذكاء الاصطناعي سيغنيني عن تعلم تليل البيانات في دوره البيثون؟
  7. أكيد فلغة البرمجة بايثون بأطر عملها ومكتباتها لا حصر لاستخداماتها التقنية والبرمجية اليوم، لكن تبقى لغات البرمجة لها نقاط القوة والضعف في مختلف المجالات وعلى حسب احتياجاتنا كمبرمجين لها في كل مشروع محدد نهمّ بإنجازه. فبايثون، متفوقة بشكل كبير في المجالات العلمية والحوسبة. لهذا قد تسمع كثيرا بأنها اللغة المفضلة لدى العلماء والباحثين والمهندسين بسبب سهولة استخدامها وقراءتها، بالإضافة إلى توفر العديد من المكتبات والأدوات المتخصصة في مختلف المجالات. فتكملة لما ذكر في التعليق الذي سبقني، فمكتبة NumPy مثلا نجدها رائدة للحسابات العددية والجبرية وتحليل البيانات وهذه قائمة بأهم المكتبات وما المجالات المخصص لها: SciPy: مكتبة شاملة تغطي العديد من المجالات العلمية مثل الرياضيات، العلوم الفيزيائية، المعالجة الإحصائية وغيرها. Pandas: تحليل البيانات وإدارتها بطريقة فعالة. Matplotlib: مكتبة رسومية متعددة الاستخدامات لإنشاء الرسوم البيانية ثنائية وثلاثية الأبعاد. Scikit-learn: مكتبة شهيرة للتعلم الآلي أين تقدم العديد من الخوارزميات والأدوات لبناء نماذج التعلم الآلي. TensorFlow و PyTorch: مكتبات رائدة للتعلم العميق والشبكات العصبية الاصطناعية. OpenCV: مكتبة متخصصة في معالجة الصور ورؤية الحاسوب. Requests: مكتبة لإجراء طلبات الويب واستجابات الشبكة. كما أن هنالك العديد من المكتبات الأخرى المتخصصة في مجالات مثل الفيزياء، الكيمياء، البيولوجيا، الهندسة، الأمن السيبراني لهذا قلنا بأنه لا حصر لها.
  8. لم يتم تضمين ذلك، لكن سيتم مساعدتك بالأمر عند الوصول لمرحلة نشر التطبيق وإرشادك للطريقة السليمة والاستضافة المناسبة، ويمكنك تفقد التالي:
  9. يتعلق الأمر بالعديد من العوامل، فمثلا لو كنت تعمل على مشروع لك وكنت في مرحلة متقدمة فيجب أن تحلل ما إذا كانت التحديثات الجديدة ضرورية أو تحمل أي إصلاحات أمنية مهمة، فقد يكون من الأفضل الاستمرار في استخدام الإصدار الحالي الذي تعمل عليه لتجنب إعادة العمل أو إحداث اضطرابات كبيرة في المشروع. وأما إذا كانت التحديثات الجديدة تحمل ميزات أو تحسينات مهمة،وكانت هنالك ثغرات أمنية في الإصدار القديم، فهنا التحديث أمر مطلوب وستجد في المستندات الرسمية كل ما تحتاجه إليه في هذا السياق، وقد يتطلب هذا إعادة اختبار المشروع بشكل شامل والتحقق من عدم وجود أي مشكلات تنشأ بسبب ذلك التحديث.
  10. اليوم
  11. الامر بسيط ان شاء الله . كل ما عليك فعله هو انشاء حقل فى جدول المستخدمين لتسجيل رقم الهاتف وجعله unique بحيث لا تتكرر القيم فيه . ناتى الان للواجهة الامامية يمكنك تعديل حقل البريد الالكترونى ليقبل بريد الكترونى او رقم هاتف ويمكنك تحقيق ذلك بالتاكد من ان القيمة التى كتبها المستخدم هى رقم ام نص فاذا كان قد قام بكتابة رقم هاتف ولا توجد اى احرف فاذا ستتاكد ان هذا رقم هاتف ويمكنك تطبيق اى جزء للتحقق من صحة البيانات وهكذا بالنسبة للبريد الالكترونى . واما بالنسبة للواجهة الخلفية فايضا يمكنك التحقق من الحقل المرسل هل هو رقم ام نص فاذا كان رقم يمكنك ارسال استعلام لقاعدة البيانات للتاكد من وجود رقم الهاتف هذا بكلمة المرور و ايضا بالنسبة للبريد الالكترونى اذا كان بريد الكترونى تقوم بارسال استعلام الى قاعدة البيانات للتاكد من وجود البريد الالكترونى هذا بكلمة المرور.
  12. التطبيقات الي ذكرتها هل هي على الويب راح ننشرها
  13. لعمل ذلك أرى أنه سيتوجب عليك القيام بتعديل جدول المستخدمين لديك (users) من خلال إضافة حقل جديد لرقم الهاتف مثلا (phone_number) هذا إذا لم يكن موجودا بالفعل وجعل حقل البريد الإلكتروني مميزا أو غير مكرر لتفادي التكرار نفس الأمر بالنسبة لحقل رقم الهاتف. الأمر بسيط فهو يتطلب التعديل على منطق تسجيل الدخول ليقبل إما البريد الإلكتروني أو رقم الهاتف عن طريق البحث في جدول المستخدمين باستخدام القيمة المقدمة فواجهة تسجيل الدخول في هذه الحالة يجب أن تتضمن حقلين منفصلين للبريد الإلكتروني ورقم الهاتف. وعند تسجيل مستخدم جديد، سيطلب النظام منه إدخال البريد الإلكتروني ورقم الهاتف وسيحفظهما في جدول المستخدمين.
  14. سيتم التطرق إلى ذلك، لكن من خلال إطار لارافل، فهو الذي سيتولى الجزء الأكبر من تلك المهمة من خلال إدارة جلسات المستخدم والكوكيز. وسيتم بناء مشاريع ويب كاملة وليس تطبيقات للهاتف، حيث لا يوجد إطار جيد لبناء تطبيقات للهواتف من خلال PHP، بالرغم من وجود إطار Native PHP إلا أنه ما زال في طور التطوير بحاجة للمزيد من الوقت. والمشاريع هي: إنشاء RESTful API باستخدام Laravel بناء شبكة تواصل اجتماعي تشبه إنستغرام متجر إلكتروني لبيع الكتب تطوير نظام إدارة محتوى تطبيق لتقييم الأماكن على الخرائط تطبيق مشاركة فيدوهات تطوير موقع إعلانات مبوبة تطوير قوالب ووردبريس تطوير قالب ووردبريس أخباري تطوير متجر إلكتروني في ووردبريس عبر ووكومرس
  15. السلام عليكم و رحمه الله احتاج الى تعديل طريقه LOGEIN للمستخدمين بدلا من الايميل الى التليفون و الايميل معا بمعني اخر يمكنه الدخول بالايميل او التليفون اي منهما يصلح للدخول مع العلم ان لدي عملاء و تجار و موظفين و احاول منذ فتره ولم استطع ذلك هل من مساعدة
  16. وفيك بارك الله، بالطبع! يمكننا استخدام كلاس يسمى User لتمثيل المستخدمين في قاعدة البيانات فهناك عدة طرق لتنفيذ التحقق من وجود المستخدم في قاعدة البيانات باستخدام Python، ومن بينها استخدام ما يطلق عليه ORM (Object-Relational Mapping) مثل SQLAlchemy.
  17. طيب هل في دوره php هل راح ندرس كيف نتعامل معها وهل راح نبني تطبيقات وننشرها على الاندرويد او على الموقع
  18. ستجدي أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  19. مرحبا Ran Om فى المرات القادمة يرجى وضع التعليق أسفل الفيديو الخاص بالدرس فى خانة التعليقات فى نهاية صفحة الفيديو إذا كان يوجد تعليقات سابقة خاصة بهذا الدرس فى المكان المخصص للتعليقات ليتم مساعدتك بشكل أفضل. حيث أن هذا القسم متعلق بالأسئلة العامة التى لاتخص أى فيديو داخل الدورات. فى ملف index.html سطر 445 يتم تعديل اسم الصنف cartTob <div class="cartTob"> ^^^^^^^^^ </div> إلى cartTab <div class="cartTab"> </div> ليكون نفس اسم الصنف عند استخدامه فى ملف الstyle.css حيث أنه تستخدميه باسم cartTab. سطر 100 وليسcartTob. .cartTab .listaCart .item img بالتوفيق..
  20. اعتقد ان الخطأ هنا لقد قمت بوضع نقطة قبل كلمة img وهذا خاطئ حيث ان النقطة تدل على ان هذه الكلمة هى سمة "class" ونحن لا نريد تنفيذ على سمة بل على عنصر لذلك نحذف النقطة . والخطأ الاخر فى فى كلمة cartTap حيث تم تعريفها فى العنصر ك cartTop لذلك نقوم بتعديلها فى ملف html بالاسم الصحيح cartTap. و من فضلك يمكنك مستقبلا التعليق اسفل الدرس الذى تريد الاستفسار عنه حتى نستطيع مساعدتك بشكل افضل. ستجد صندوق التعليقات اسفل الفيديو مباشرة حيث يمكنك التعليق هناك. شكرا لك
  21. سويت نفس الي بالفديو بس حجم الصوره عندي ما يتغير ابد ليه؟
  22. مرحبا آسر يرجى وضع التعليق أسفل الفيديو الخاص بالدرس فى خانة التعليقات فى نهاية صفحة الفيديو إذا كان يوجد تعليقات سابقة خاصة بهذا الدرس فى المكان المخصص للتعليقات ليتم مساعدتك بشكل أفضل. يوجد مكان مخصص للتعليقات أسفل كل فيديو بهذا الشكل حيث أن هذا القسم متعلق بالأسئلة العامة التى لاتخص أى فيديو داخل الدورات. بالتوفيق..
  23. أهلا. يرجى طرح الأسئلة المتعلقة بدروس الدورات في قسم التعليقات الموجود أسفل الفيديو الخاص بالدرس. هذا قسم الأسئلة العامة. لذلك نحن هنا لا نعرف ما هو الدرس الذي تقصده بسؤالك. شكرا.
  24. السلام عليكم اخر مثال كتبه الاستاذ في الدقيقة 8:15 غير مفهوم
  25. لاشك أن أي مطور تطبيقات سمع بلغة البرمجة كوتلن Kotlin ولغة جافا Java فهما من لغات البرمجة القوية والمستخدمة بشكل كبير مع نظام التشغيل أندرويد، وبالرغم من أن لغة جافا قد خسرت معركة نظام أندرويد لصالح لغة كوتلن بعد أن أعلنت جوجل عام 2017 أن كوتلن هي اللغة الرسمية المعتمدة لنظام التشغيل أندرويد وأنها أكثر ملاءمةً لتطبيقات الهواتف المحمولة الجديدة، إلا أن كلا اللغتين تملكان العديد من نقاط القوة، ومن المهم للمطورين فهم الاختلافات اللغوية بينهما لتحقيق انتقال سهل من جافا إلى كوتلن. سنناقش في هذا المقال مميزات كل لغة من هاتين اللغتين، ونسلط الضوء على أبرز جوانب التشابه والاختلاف بينهما لنساعدك على تحديد اللغة الأنسب لك من بينهما والانتقال بسلاسة بينهما. هل لغة كوتلن ولغة جافا متشابهتان؟ نعم، حيث تملك هاتان اللغتان الكثير من القواسم المشتركة، فكلتاهما تعملان على آلة جافا الافتراضية JVM ولن يحتاج المطورون للقلق بشأن كتابة الأكواد البرمجية الأصلية للآلة، ويمكن للغتين أن تستدعيا أكواد بعضهما البعض بسهولة-بمعنى أن بإمكانك استدعاء أكواد جافا من داخل أكواد كوتلن- والعكس صحيح. كما يمكن استخدام لغة جافا في تطبيقات الواجهة الخلفية التي تعمل من طرف الخادم وفي تطبيقات قواعد البيانات وتطبيقات الواجهة الأمامية والأنظمة المدمجة وتطبيقات الجوال وغيرها من أنواع التطبيقات المتنوعة الأخرى، وكذلك تتميز لغة كوتلن أيضًا بأنها لغة متعددة الاستخدامات فهي تعمل على أي نظام تشغيل يدعم آلة جافا الافتراضية JVM وتعد اللغة الرسمية لتطوير تطبيقات أندرويد، ويمكن كذلك استخدامها في برمجة تطبيقات جافا سكريبت من خلال مشروع Kotlin/JS الذي يسمح بكتابة شيفرات مشتركة بين اللغتين، ولتطوير تطبيقات من طرف الخادم، وتطبيقات الويب، وتطبيقات سطح المكتب. إن لغة جافا هي لغة أقدم وأكثر نضجًا من كوتلن، فقد صدرت لأول مرة في عام 1996، بينما أُطلِق أول إصدار من كوتلن Kotlin 1.0 في عام 2016، وبالرغم من ذلك تمكنت لغة كوتلن من فرض نفسها بسرعة وأصبحت اللغة الرسمية المفضلة لتطوير نظام التشغيل أندرويد في عام 2019، ويمكن القول بأننا إذا استثنينا مجال الأندرويد، فلن يكون هناك أي مميزات ترجح كفة كوتلن على جافا. وإليك الجدول التالي الذي يوضح تطور لغتي البرمجة Java و Kotlin: السنة جافا كوتلن 1995–2006 JDK Beta, JDK 1.0, JDK 1.1, J2SE 1.2, J2SE 1.3, J2SE 1.4, J2SE 5.0, Java SE 6 لم تكن لغة كوتلن موجودة 2007 بدء العمل على مشروع Project Loom لم تكن لغة كوتلن موجودة بعد 2010 لم يطلق إصدار جديد من جافا بدء تطوير كوتلن 2011 Java SE 7 الإعلان عن مشروع كوتلن 2012 لم يطلق إصدار جديد من جافا اعتبار لغة كوتلن مفتوحة المصدر 2014 Java SE 8 (LTS) لم يطلق إصدار جديد من كوتلن 2016 لم يطلق إصدار جديد من جافا Kotlin 1.0 2017 Java SE 9 Kotlin 1.2 والإعلان عن دعم Kotlin لنظام أندرويد. 2018 Java SE 10, Java SE 11 (LTS) Kotlin 1.3 ودعم الروتينات المساعدة coroutines 2019 Java SE 12, Java SE 13 Kotlin 1.4 (توافق مع Objective-C و Swift) والإعلان عن كوتلن كلغة مفضلة للمطورين من قبل جوجل. 2020 Java SE 14, Java SE 15 لم يطلق إصدار جديد من كوتلن 2021 Java SE 16, Java SE 17 (LTS) Kotlin 1.5, Kotlin 1.6 2022 Java SE 18, JDK 19 Kotlin 1.7 (alpha version of Kotlin K2 compiler), Kotlin 1.8 2023 Java SE 20, Java SE 21, JDK 20, JDK 21 Kotlin 1.9 2024 Java SE 22 Kotlin 2.0 مقارنة بين كوتلن وجافا من ناحية الأداء واستهلاك الذاكرة قبل الخوض في تفاصيل مميزات لغتي كوتلن وجافا، لنقارن أداءهما واستهلاكما للذاكرة حيث يشكل هذان العاملان اعتبارين مهمين لكل من المطورين والمستخدمين على حد سواء. أولًا: من ناحية الأداء على الرغم من أن كوتلن و جافا ولغات البرمجة الأخرى التي تنفذ على الآلة الافتراضية JVM الأخرى مختلفة في عدة عوامل عن بعضها، إلا أنها متشابهة إلى حد ما في الأداء، لا سيما عند مقارنتها مع عائلة اللغات المعتمدة على المصرّفات والتي تنفذ على المعالج الخاص بالآلة مثل مُصرّف GCC أو Clang ، فقد صممت آلة جافا الافتراضية JVM في الأصل لاستهداف الأنظمة المدمجة محدودة الموارد التي كانت متوفرة في فترة التسعينيات، وهذا فرض قيدين أساسيين على هذه اللغات لتتمكن من العمل بكفاءة على موارد محدودة وهما: جعل شيفرة البايت لآلة جافا الافتراضية بسيطة قد المستطاع: إذ يحتوي الإصدار الحالي من آلة جافا الافتراضية JVM التي تترجم لغتي كوتلن وجافا، على 205 تعليمة فقط، في حين يمكن للمعالجات الحديثة x64 أن تدعم وتنفذ أكثر من 6000 تعليمة مشفرة اعتمادًا على طريقة العد. التحسين في وقت التشغيل Runtime: فأسلوب تعدد المنصات الذي يعتمد على كتابة الكود مرة واحدة وتشغيله في أي مكان يساعد على إجراء عمليات تحسين الأداء في وقت تشغيل الكود (وليس في وقت تصريفه compile-time)، بعبارة أخرى تقوم آلة جافا الافتراضية JVM بترجمة معظم شيفرة البايت الخاصة بها إلى تعليمات في وقت التشغيل، فعند ترجمة كود جافا أو كوتلن لا يحول هذا الكود مباشرةً إلى كود الآلة بل يحول إلى كود بايت byte code وسيط ثم تترجم الآلة الافتراضية هذا الكود الوسيط إلى تعليمات يمكن للجهاز فهمها أثناء تشغيل البرنامج، وبالتالي تؤجل بعض عمليات التحسين لحين تشغيل البرنامج بشكل فعلي. كما يمكن استخدام تطبيقات مفتوحة المصدر لآلة جافا الافتراضية JVM مثل HotSpot لتحسين الأداء إذ تقوم في هذه الحالة بتجهيز كود بايت مسبق الترجمة pre-compiles لتشغيله بشكل أسرع من خلال المفسر interpreter. فكما ترى تتبع كل من جافا وكوتلن أساليب متشابهة لترجمة وتشغيل التعليمات البرمجية لذا لا توجد سوى اختلافات طفيفة في الأداء بينهما سببها بعض الخصائص الفريدة المميزة لكل لغة، على سبيل المثال: تتجنب لغة كوتلن استدعاء الدوال باستخدام الدوال المباشرة inline functions مما يحسن أداءها، بينما تعتمد جافا على الدوال التي تتطلب تخصيص ذاكرة إضافية. تتجنب كوتلن استخدام الدوال العليا higher-order functions التي تستخدمها جافا لامدا Java lambda في الاستدعاء الديناميكي للدالة من خلال التعليمة InvokeDynamic مما يحسن الأداء. تحتوي شيفرة كود البايت bytecode التي تولدها لغة كوتلن على ميزة التحقق من القيم الفارغة عند استخدام التبعيات الخارجية، مما يبطئ أداءها مقارنةً بجافا. ثانيًا: من ناحية الذاكرة صحيح أن استخدام الكائنات للأنواع الأساسية (وهو الأسلوب المتبع في لغة كوتلن) يتطلب تخصيصًا أكثر للذاكرة مقارنة باستخدام أنواع البيانات الأولية (وهو الأسلوب المتبع في لغة جافا) من الناحية النظرية، لكن من الناحية العملية تستخدم تعليمات كود البايت في لغة جافا تقنية التغليف التلقائي autoboxing وفك التغليف unboxing للتعامل مع الكائنات والتي يمكن أن تضيف حملًا وعبئًا حسابيًا عند استخدامها بشكل مفرط. على سبيل المثال، لا تقبل الدالة String.format الخاصة بجافا سوى الكائنات كدخل لها، لذلك لذلك عند الحاجة لتنسيق عدد صحيح من نوع int في جافا، يتم تغليفه تلقائيًا في كائن من نوع Integer قبل استدعاء الدالة String.format. ويمكن القول بشكل عام، لا توجد اختلافات كبيرة بين لغتي جافا وكوتلن فيما يتعلق بالأداء والذاكرة، وبالرغم من أنك قد تجد معايير أداء مختلفة عبر الإنترنت تظهر اختلافات طفيفة في الاختبارات الدقيقة بين هاتين اللغتين، ولكن لا يمكن تعميم هذه النتائج. والجدير بالملاحظة أن الأداء واستهلاك الذاكرة لا ينبغي أن يكونا العاملين الأساسيين في اختيارك بين كوتلن أو جافا ومن الأفضل التركيز على عوامل أخرى مثل المميزات الخاصة بكل لغة. مقارنة الميزات الفريدة لكل من لغتي كوتلن وجافا تشترك لغتا كوتلن وجافا في العديد من السمات الأساسية، لكن كل لغة تقدم ميزات فريدة ومختلفة عن الأخرى، فمنذ أن أصبحت كوتلن لغة جوجل المفضلة لتطوير أندرويد، برزت ميزات مثل الدوال الإضافية وإمكانية تعيين القيم null بشكل صريح Explicit nullability بكونها الميزات الأكثر فائدة للغة، من ناحية أخرى عند استخدام كوتلن فإن أكثر الميزات التي سنفتقدها والتي كانت تتيحها لغة جافا هي الكلمة المفتاحية protected والمعامل الشرطي الثلاثي ternary operator الذي يمكننا من التعبير عن الشروط بطريقة قصيرة ومختصرة. لنقم بتحليل مفصل للمميزات المتاحة في كولن مقارنةً بجافا، يمكنك تنفيذ الأمثلة التالية المكتوبة بلغة كوتلن وجافا لفهم الفروقات بشكل عملي. إليك بعض الميزات البارزة في لغة كوتلن بالمقارنة مع لغة جافا: الخاصية كوتلن جافا الوصف الدوال الإضافية Extension functions نعم لا تسمح لك بتوسيع صنف أو واجهة بوظائف جديدة من خلال تعريف التوابع أو الخصائص الإضافية فقط دون الحاجة إلى إنشاء أصناف جديدة class Example {}<br />// extension function declaration fun Example.printHelloWorld() { println("Hello World!") }<br /><br />// extension function usage Example().printHelloWorld() التحويلات الذكية Smart casts نعم لا تتبع الشروط داخل عبارة if الشرطية، وتحويل الأنواع تلقائياً بطريقة آمنة.<br /><br /> fun example(a: Any) { if (a is String)<br /> { println(a.length) <br />// automatic cast to String } } كما توفر لغة كوتلن معاملات تحويل آمنة بين الأنواع تعيد null عند حدوث خطأ في عملية التحويل ومعاملات تحويل غير آمنة ترمي استثناء عند حدوث خطأ في التحويل // unsafe "as" cast throws exceptions val a: String = b as String // safe "as?" cast returns null on failure val ? String? = d as? String الدوال المباشرة Inline functions نعم لا تقلل من التحميل الزائد للذاكرة وتحسن سرعة الكود عن طريق تضمين رمز الدالة (نسخه إلى موقع الاستدعاء) inline fun example() دعم مدمج لمفهوم التفويض delegation نعم لا تدعم نمط التفويض بشكل مدمج باستخدام الكلمة المفتاحية by class Derived(b: Base) : Base by b كتابة أسماء مستعارة أو بديلة لأنماط البيانات نعم نعم توفر أسماء مختصرة أو مخصصة لأنماط البيانات والتوابع والأصناف لتسهيل قراءتها typealias ShortName = LongNameExistingType الحقول غير الخاصة بالصنف لا نعم توفر جافا كافة معاملات تعديل الوصول الأربعة وهي المحمي protected والافتراضي default المعروف أيضًا بمعامل الحزمة الخاص package-private بالإضافة إلى معامل الوصول العام public والخاص private. بينما تفتقد كوتلن لمعامل تعديل الوصول المحمي والافتراضي. العامل الثلاثي Ternary operator لا نعم يستبدل عبارة if/else بكود أبسط وأكثر قابلية للقراءة: if (firstExpression) { // if/else variable = secondExpression; } else { variable = thirdExpression; } // ternary operator variable = (firstExpression) ? secondExpression : thirdExpression; توسيع نطاق البيانات بصورة ضمنية لا نعم تسمح لغة جافا بالتحويل التلقائي من نوع بيانات أصغر إلى نوع بيانات أكبر مثلًا من عدد صحيح إلى عشري بصورة تلقائية في حين لا تقوم كوتلن بذلك int i = 10; long l = i; // first widening conversion: int to long float f = l; // second widening conversion: long to float الاستثناءات المتحقق منها Checked exceptions لا نعم يحتاج المصرف إلى طريقة للتعامل مع الاستثناءات التي تقع عند تنفيذ البرنامج إما باستخدام الكلمة المفتاحية throws أو من خلال كتلة تعليمات try-catch ملاحظة: تم تصميم الاستثناءات التي يجب التحقق منها لتشجيع المطورين على تصميم برمجيات قوية. ومع ذلك، يمكن أن تؤدي إلى هذه الاستثناءات لزيادة حجم الكود، وتجعل عملية إعادة التصميم صعبة، وتؤدي إلى معالجة سيئة للأخطاء عند استخدامها بطريقة غير صحيحة. لذا فإن مسألة تحديد فيما إذا كانت هذه الميزة إيجابية أم سلبية تعتمد على احتياجات المطورين. هناك موضوع واحد تم استبعاده عمدًا من هذا الجدول وهو التعامل مع القيم الفارغة null في كل من لغتي كوتلن وجافا. إذ يستحق هذا الموضوع مقارنة أكثر تفصيلاً بين اللغتين لذا سنناقشه بشكل منفصل في الفقرة التالية. الفرق بين كوتلن وجافا في التعامل مع القيم الفارغة null إن ميزة عدم قبول القيم الفارغة هي واحدة من أروع ميزات كوتلن. إذ توفر هذه الميزة الوقت على المطورين ولا تضطرهم للتعامل مع الاستثناء من نوع NullPointerExceptions (وهو أحد الاستثناءات التي تطلق في وقت التشغيل RuntimeExceptions). ففي لغة جافا يمكنك بشكل افتراضي تعيين قيمة فارغة لأي متغير على النحو التالي: String x = null; // Running this code throws a NullPointerException try { System.out.println("First character: " + x.charAt(0)); } catch (NullPointerException e) { System.out.println("NullPointerException thrown!"); } أما في لغة كوتلن فلديك خياران، إما تجعل المتغير يقبل قيم فارغة nullable أو لا يقبل قيم فارغة non-nullable كما يلي: // This line throws a compile-time error because you can't assign a null value nonNullableNumber = null var nullableNumber: Int? = 2 // This line does not throw an error since we used a nullable variable nullableNumber = null يفضل استخدام المتغيرات non-nullable بشكل افتراضي، وتجنب استخدام المتغيرات nullable للحصول على أفضل الممارسات. ملاحظة: الهدف من الأكواد المكتوبة بكوتلن ومقارنتها مع أكواد مكتوبة بلغة جافا هو توضيح الاختلافات بين اللغتين وفي حال كنت مبتدئًا في لغة كوتلن تجنب قدر المستطاع تعيين المتغيرات لتكون nullable بدون هدف أو عند تحويل كود جافا إلى كوتلن. ومع ذلك، هناك بعض الحالات التي قد تستخدم فيها المتغيرات التي تقبل القيم null في كوتلن ومن بين هذه الحالات نذكر: الحالة مثال عندما تبحث عن عنصر في قائمة غير موجود (عادةً عند التعامل مع بنية لتخزين ومعالجة البيانات). val list: List<Int> = listOf(1,2,3) val searchResultItem = list.firstOrNull { it == 0 } searchResultItem?.let { // Item found, do something } ?: run { // Item not found, do something } عندما تريد تهيئة متغير في وقت التنفيذ وليس في لحظة الإعلان عنه باستخدام lateinit. lateinit var text: String fun runtimeFunction() { // e.g., Android onCreate text = "First text set" // After this, the variable can be used } ينصح بعدم المبالغة في استخدام التعليمة lateinit التي تؤجل تهيئة المتغير حتى يتم الوصول إليه لأول مرة بشكل مفرط مع لغة كوتلن باستثناء الحالات التي لا يمكنك فيها معرفة قيمة المتغير عند إعلانه، أو عند الحاجة لربط العرض view bindings أي ربط عناصر واجهة المستخدم (مثل الأزرار والنصوص والصور وما إلى ذلك) بمتغيرات في الشيفرة البرمجية، كي تتمكن من لتحكم فيها والتفاعل معها من خلال العرض وإجراء حقن قيم للمتغيرات في وقت التشغيل variable injections في أندرويد. @Inject // With the Hilt library, this is initialized automatically lateinit var manager: SomeManager lateinit var viewBinding: ViewBinding fun onCreate() { // i.e., Android onCreate binding = ActivityMainBinding.inflate(layoutInflater, parentView, true) // ... } بشكل عام، تتعامل لغة كوتلن مع القيم الفارغة null بمرونة أكبر وتوفر تجربةً محسنةً مقارنةً بلغة جافا. الاختلافات في الميزات المشتركة بين جافا وكوتلن على الرغم من أن كل لغة لها ميزات فريدة، إلا أن كوتلن و جافا تشتركان في العديد من الميزات أيضًا، ومن الضروري فهم خصوصية كل لغة من أجل الانتقال بسلاسة بين اللغتين. لنقم بفحص أربعة مفاهيم مشتركة بين جافا وكوتلن لكنها تعمل بشكل مختلف في كل لغة: الميزة جافا كوتلن كائنات نقل البيانات بين طبقات التطبيق المختلفة DTOs توفر سجلات جافا Java records طريقة مناسبة لنقل المعلومات عن البيانات أو حالة هذه البيانات كما تتضمن التوابع المساعدة toString و equals و hashCode بشكل افتراضي وهي متاحة منذ إصدار جافا SE 15: public record Employee( int id, String firstName, String lastName ) توفر لغة كوتلن أصناف البيانات data classes وهي تعمل بشكل مشابه لسجلات جافا كما تتوفر فيها توابع مدمجة مساعدة toString و equals وcopy: data class Employee( val id: Int, val firstName: String, val lastName: String ) تعبيرات لامدا Lambda expressions تتوفر تعبيرات لامدا في جافا منذ الإصدار جافا 8 وهي تملك بنية بسيطة كالتالي parameter -> expressionوتستخدم القوسين المتعرجين لتمرير الوسطاء(parameter1, parameter2) -> { code } كما في المثال التالي الذي يستخدم تعبيرات لامدا لصباعة عناصر قائمة أعداد صححية: ArrayList ints = new ArrayList<>(); ints.add(5); ints.add(9); ints.forEach((i) -> { System.out.println(i); }); تكتب تعبيرات لامدا في كوتلن بالصيغة التالية { parameter1, parameter2 -> code } وتحيط بها دائمًا الأقواس المتعرجة على سبيل المثال يستخدم الكود التالي تعبير لامدا لتعريف دالة بسيطة تقارن طول سلسلتين نصيتين: var p: List = listOf("firstPhrase", "secondPhrase") val isShorter = { s1: String, s2: String -> s1.length < s2.length } println(isShorter(p.first(), p.last())) التزامن Concurrency توفر الخيوط threads في لغة جافا ميزة تنفيذ مهام متزامنة وتسهل الحزمة java.util.concurrency التعامل مع تعدد المهام من خلال توفير أصناف خاصة مثل Executor و ExecutorService (كما يمكن مشروع Project Loom لتحسين جافا من إنجاز التزامن بطريقة أسرع من خلال توفير خيوط خفيفة الوزن lightweight threads). تعمل الروتينات المساعدة في كوتلن التي توفرها مكتبة kotlinx.coroutines على تسهيل التزامن وتعدد المهام، كما تتضمن قسم خاص لتعدد الخيوط multithreading. ويساهم مدير الذاكرة في إصدار Kotlin 1.7.20 والإصدارات الأحدث بتقليل القيود السابقة على تنفيذ التزامن وتعدد الخيوط للمطورين الذين ينتقلون بين نظام التشغيل أندرويد Android وآي أو إس iOS. السلوك الثابت في الأصناف Static behavior in classes تسهل الأعضاء الثابتة أو الستاتيكية static members في جافا مشاركة التعليمات البرمجية بين كائنات الصنف وتضمن إنشاء نسخة واحدة فقط من العنصر. ويمكن تحقيقها من خلال كتابة الكلمة المفتاحية static قبل المتغيرات والدوال والكتل: class Example { static void f() {/…/} } تتيح الكائنات المرافقة للأصناف companion objects في كوتلن من تحقيق السلوك الثابت للأصناف ومشاركة التعليمات البرمجية بين كائنات الصنف فالأعضاء في الكائن المرافق تكون مشتركة بين جميع كائنات الصنف ولا حاجة لإنشاء كائن منه لاستخدامها، ولكن صياغتها ليست بسيطة كما هو الحال في جافا: إليك مثال على كيفية استخدام كائن مرفق في كوتلن:\ class Example { companion object { fun f() {/…/} } } بالطبع، تملك كل من لغة البرمجة كوتلن وجافا أيضًا تراكيب مختلفة في كتابة التعليمات البرمجية، ولن نناقش كل الاختلافات هنا في سياق المقال الحالي، لكننا سنكتفي بالاطلاع على طريقة كتابة الحلقات التكرارية في كل لغة وهذا سيمنحك فكرة عن الأسلوب العام لكتابة تعليمات كل لغة: نوع الحلقة جافا كوتلن حلقة for باستخدام in for (int i=0; i<=5; i++) { System.out.println("printed 6 times"); } for (i in 0..5) { println("printed 6 times") } حلقة for باستخدام until for (int i=0; i<5; i++) { System.out.println("printed 5 times"); } for (i in 0 until 5) { println("printed 5 times") } forEach List<String> list = Arrays.asList("first", "second"); for (String value: list) { System.out.println(value); } var list: List<String> = listOf("first", "second") list.forEach { println(it) } while int i = 5; while (i > 0) { System.out.println("printed 5 times"); i--; } var i = 5 while (i > 0) { println("printed 5 times") i-- } احرص على الفهم العميق لميزات لغة كوتلن فهذا سيساعدك في التحول بين كوتلن وجافا بسهولة وسلاسة هل أختار جافا أم كوتلن من أجل مشاريع أندرويد لقد ناقشنا حتى الآن العديد من العوامل المهمة التي يجب التفكير فيها عند اتخاذ القرار بين كوتلن وجافا في من وجهة نظر عامة، لكن لا تكتمل عملية المقارنة بين لغتي كوتلن وجافا إذا لم نتطرق للحديث عن نظام أندرويد. فإذا كنت تنوي تطوير تطبيق أندرويد من الصفر وتتساءل ما إذا كان يجب عليك أن تستخدم جافا أو كوتلن فينصح بأن تختار كوتلن بدون أي تردد فهي لغة الأندرويد المفضلة لدى جوجل كما ذكرنا سابقًا. ورغم ذلك، فإن الإجابة على هذا السؤال قد يخضع لاعتبارات أخرى بالنسبة لتطبيقات الأندرويد المطورة مسبقًا. إذا يجب عليك أيضًا مناقشة أمور إضافية مثل مسألة الأعباء التقنية والكلفة المرتبطة بتعديل التقنية المستخدمة في هذه التطبيقات من لغة جافا إلى كوتلن وخبرة المطور Developer Experience الذي يعرف من قبل جافا ويتوجب عليه تعلم لغة جديدة! فإذا كان لدى شركة ما تطبيق أندرويد يستخدم جافا، فمن المستبعد أن تعيد برمجته من جديد بكوتلن بل ستفضل إضافة ميزات جديدة له فقط، وهذا أمر مفهوم. فطبيعة السوق تنافسية وتتطلب دورة سريعة لتحديثات التطبيق. لكن يجب الانتباه فالعبء التقني له تأثير خفي، فهو يزيد من التكاليف مع كل تحديث لأن المهندسين يضطرون للتعامل مع الشيفرة غير المستقرة التي من الصعب إعادة تنظيمها، وقد يدخل الشركات في دورة لا نهائية من التكاليف الباهظة الناتجة عن كثرة عمليات التعديل. وقد يكون من الأجدى التوقف عن تعديل الأكواد القديمة والاستثمار في حلول طويلة الأمد، حتى لو تطلب ذلك عمليات إعادة كتابة الكود البرمجي من جديد أو تحديث كود البرنامج لاستخدام لغة حديثة مثل كوتلن. كما أن استخدام لغة برمجة جديدة من قبل المطورين أمر يستحق النقاش حيث يمكن أن يفيد المطورين باختلاف خبراتهم إذ: يستفيد المطورون المبتدئون من الموارد المناسبة. يتحسن المطورون ذوو المستوى المتوسط ويحصلون على فرص أكبر للعمل. يحتاج المطورون الكبار إلى القدرة على تصميم وتنفيذ شيفرات رائعة. ولا شك أن الاهتمام بتجربة المطورين الخبراء مهم وضروري لاسيما بأن خبرتهم تؤثر على جميع المطورين ويمكن باستخدام لغات حديثة مثل كوتلن تطوير التطبيقات بسرعة وكفاءة وسهولة وهو ما سيستغرق وقتًا أطول مع لغات أقدم مثل جافا. الخلاصة تعرفنا في مقال اليوم على أهم الفروقات بين لغتي كوتلن و جافا اللتان تعدان من لغات البرمجة القوية والفعالة، ووجدنا أنه وبالرغم من أن لغة جافا لديها مجموعة واسعة من التطبيقات، فقد استحوذت كوتلن على المكانة التي امتلكتها لغة جافا والتي كانت لغة مفضلة لتطوير تطبيقات الأندرويد فقد وجهت جوجل كل جهودها نحو تطوير ودعم كوتلن، ما جعلها تحظى بالأولوية أمام جافا. لذا ينصح أي مطور تطبيقات باعتماد لغة كوتلن في أي شيفرة جديدة يكتبها لا سيما أن بيئة تطوير تطبيقات جافا IntelliJ IDEA تأتي مع أداة تحويل تلقائي من لغة جافا إلى كوتلن. ترجمة وبتصرف للمقال Kotlin vs. Java: All-purpose Uses and Android Apps للكاتب Gabriel Gircenko اقرأ أيضًا تعرف على لغة جافا Java الدليل السريع إلى لغة البرمجة Kotlin Kotlin هو جافا الجديد كيفية كتابة برامج صحيحة باستخدام لغة جافا
  1. عرض المزيد
×
×
  • أضف...