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

لوحة المتصدرين

  1. Hafsa Aly

    Hafsa Aly

    الأعضاء


    • نقاط

      6

    • المساهمات

      340


  2. Abdulraheem Barghouthi

    Abdulraheem Barghouthi

    الأعضاء


    • نقاط

      5

    • المساهمات

      182


  3. بلال زيادة

    بلال زيادة

    الأعضاء


    • نقاط

      5

    • المساهمات

      4376


  4. سامح أشرف

    سامح أشرف

    الأعضاء


    • نقاط

      3

    • المساهمات

      2934


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 02/14/21 في كل الموقع

  1. لدي تطبيق بسيط جداً يحتوي على Column يضم عنصرين Text يحملان قيمة عشوائية من 0 لـ 100 ويوجد أيضاً Button عند الضغط عليها من المفترض تبديل أماكن العناصر في القائمة. لا يوجد أي أخطاء أو تحذيرات ! لكن عند الضغط على الButton لا يتم تبديل العناصر كما يجب أن يحدث. هذا هو الكود الخاص بالتطبيق: import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; void main() => runApp(new MaterialApp(home: HomePage())); class HomePage extends StatefulWidget { @override State<StatefulWidget> createState() => HomePageState(); } class HomePageState extends State<HomePage> { List<Widget> tiles = [ MyRandomWidget(), MyRandomWidget(), ]; @override Widget build(BuildContext context) { return Scaffold( body: Center(child: Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: tiles )), floatingActionButton: FloatingActionButton( child: Icon(Icons.sentiment_very_satisfied), onPressed: swap), ); } swap() { setState(() { tiles.insert(1, tiles.removeAt(0)); }); } } class MyRandomWidget extends StatefulWidget { @override ColorfulTileState createState() => ColorfulTileState(); } class ColorfulTileState extends State<MyRandomWidget> { int myNo; @override void initState() { super.initState(); myNo = Random().nextInt(100); } @override Widget build(BuildContext context) { return Text(myNo.toString()); } }
    2 نقاط
  2. السلام عليكم لدي فورم بسيط يحوي ادخال الاسم والموبايل والايميل كيف يمكن عدم ادخال الا الحروف فى حقل الاسم وارقام فقط فى حقل الفون وعدم ادخال اي صيغة اخرى غير الايميل فى خانة الايميل ولكم جزيل الشكر <?PHP $name = $_POST['name']; $phone = $_POST['phone']; $email = $_POST['email']; $db = mysql_connect('localhost', 'root', '', 'info'); $query = "insert into user values('".$name."','".$phone."','".$email."')"; $insert =$db->query($query); ?> <form method="post" action=""> <p><input name="name" type="text"></p> <p><input name="phone" type="text"></p> <p><input name="email" type="text"></p> <p><input type="submit"></p> </form>
    2 نقاط
  3. لفهم الفرق بين أنواع الـwidgets علينا أولاً فهم ماهيتها ومكوناتها. كل عنصر يظهر للمستخدم هو عبارة عن widget مثل نص، صورة، حقل إدخال...الخ. حيث يصف الـwidget سلوك وشكل العنصر في الشاشة، على سبيل المثال عند إضافة نص ومحاذاته في المنتصف نستخدم الـtext widget و الـcenter widget كالتالي: Center(// widget1 child: Text('hello',style:TextStyle(color:Colors.black)), // widget2 ) لاحظ أن الـ widget هو object يصف ويحدد شكل العنصر في الشاشة. بعد فهم ماهية الـwidget سنفرق بين الـstateless widget والـstateful widget. stateful widget: هو عبارة عن عنصر يحتوي على حالة أي يمكن حفظ بيانات فيه ويمكنه تغييرها وإعادة بناء/رسم نفسه أثناء التشغيل عن طريق الدالة setState. مثال عليه: class FavoriteWidget extends StatefulWidget { //القسم الأول الخاص بالعنصر @override _FavoriteWidgetState createState() => _FavoriteWidgetState(); } class _FavoriteWidgetState extends State<FavoriteWidget> { // القسم الثاني الخاص بحالة العنصر String msg = “hello”; // يمكن تعريف متغيرات وتغيير قيمتها أثناء تشغيل التطبيق @override Widget build(BuildContext context) { // الدالة الخاصة ببناء شكل العنصر return Text(‘$msg’); // نرجع نصاً يحمل قيمة المتغير المعرف مسبقاً } } stateless widget: هو عنصر ليس لديه حالة ولا يمكن تغيير بياناته أثناء تشغيل التطبيق إلا عن طريق إعادة تعريفه مرة أُخرى ببيانات مختلفة. مثال عليه: class MyWidget extends StatelessWidget { // يتكون من قسم واحد فقط خاص بالعنصر وليس له حالة final String msg = “hello”; // لاحظ تعريف المتغير يجب أن يكون نهائي ولا يمكن تغييره أثناء التشغيل @override Widget build(BuildContext context) { // دالة بناء شكل العنصر return Text(‘$msg’); } } إذاً نستخدم stateful مع العناصر التي تعتمد على بيانات متغيرة وتحتاج لإعادة رسم نفسها على الشاشة أثناء التشغيل. ونستخدم stateless في العناصر الثابتة التي لا نحتاج لتغييرها أو التعديل عليها أثناء التشغيل.
    2 نقاط
  4. $users = User::select('name', 'image', 'age')->where('age', '>=', 18)->limit(100)->get(); يمكنك جلب عدة حقول باستخدام دالة select كما في المثال إعلاه, اسماء الحقول داخل دالة select هي اسماء الحقول كما في الجدول في قاعدة البيانات. أما لو كنتي تقصدين كيف يتم ارجاع الحقول جميعها $users = User::where('age', '>=', 18)->limit(100)->get(); $users = User::whereIn('id', [6, 7, 9])->get(); هذه الاستعلامات ترجع جميع الحقول الموجودة لكل سجل وما قمنا بتحديده في دالة where أو whereIn هو الشرط الذي الذي يعود بالنتائج بناء عليه.
    2 نقاط
  5. التابع first() يقوم بجلب أول سجل يجده فقط، بينما التابع get() يجلب صنف collection، ويمكن تخيل هذا الصنف على أنه مصفوفة array من السجلات يمكن إستخدامها في حلقات التكرار مثل for loop أو while loop. بالنسبة لجلب عدد محدد من السجلات فيمكن إستخدام التابع limit(num) والذي يقبل عدد يتم تمريره إليه يعبر عن عدد السجلات المراد جلبها. $user = User::limit(2)->get(); بالنسبة لجلب السجلات بطريقة عشوائية in random order فيمكن إستخدام التابع ()inRandomOrder ليجلب كل السجلات في ترتيب عشوائي. $users = User::inRandomOrder()->get();
    2 نقاط
  6. 2 نقاط
  7. تُعدّ الأصناف (classes) اللَبِنة الأساسية عالية المستوى (high-level) بالبرنامج، حيث تُستخدَم لتمثيل الأفكار والكيانات المُعقدة ضِمْن البرنامج وما يَرتبِط بها من بيانات (data) وسلوكيات (behavior). يَدفَع ذلك البعض إلى وَضْع الأصناف بمكانة خاصة، فيُحاولون تَجنُّب كتابة الأصناف الصغيرة جدًا والموجودة فقط لتجميع مجموعة من البيانات معًا، ويَرَونَها تافهة مع أنها قد تَكُون مفيدة أحيانًا أو حتى ضرورية في بعض الأحيان الآخرى. لحسن الحظ، تَرفَع الجافا هذا الحرج؛ حيث تَسمَح بكتابة تعريف صَنْف (class definition) ضِمْن تعريف صَنْف آخر، وبذلك لَمْ تَعُدْ تلك الأصناف الصغيرة جدًا موجودة بمُفردها، وإنما أَصبحَت جُزءًا من أصناف أكبر ذات هيبة. إلى جانب ذلك، هنالك العديد من الأسباب الآخرى التي قد تَدفَعك لتَضْمِين تعريف صنف (class definition) داخل صنف آخر. الصَنْف المُتداخِل (nested class) هو ببساطة أيّ صنف يَقَع تعريفه (definition) داخل تعريف صنف آخر. وفي الواقع، يُمكِن حتى كتابة تعريف صَنْف داخل تابع (method) والذي بدوره يَقَع ضِمْن صنف. الأصناف المُتداخِلة إِما أن تَكُون مُسمَاة (named) أو مجهولة الاسم (anonymous). سنعود لاحقًا إلى الأصناف مجهولة الاسم (anonymous classes) أما بالنسبة للأصناف المُتداخِلة المُسمَاة (named nested class)، فيُمكِنها أن تَكُون ساكنة (static) أو غَيْر ساكنة (non-static) وذلك كأي شيء مُعرَّف ضِمْن صَنْف. بالمثل من الأصناف، يُمكِن للواجهات (interfaces) أيضًا أن تَقَع ضِمْن تعريفات الأصناف (class definitions) وقد تَكُون ساكنة (static) أو غَيْر ساكنة (non-static)، كما قد تَحتوِي تعريفات الواجهات (interface definitions) على أصناف مُتداخِلة ساكنة (static nested classes) أو واجهات آخرى، ولكننا لن نَتَعرَّض لذلك. الأصناف المتداخلة (nested) الساكنة تُعرَّف الأصناف المُتداخِلة (nested class) الساكنة كأي تعريف لصَنْف عادي باستثناء أمرين: أولهما وقوع التعريف ضِمْن صنف آخر، والآخر اِستخدَام المُبدِّل static ضِمْن التّصْريح. يُعدّ أي صنف مُتداخِل ساكن جزءًا من البنية الساكنة (static) للصَنْف الحاضن له والذي قد يَستخدِمه لإنشاء كائنات بالطريقة العادية. في المقابل، يُمكِن اِستخدَامه أيضًا خارج صَنْفه الحاضن، ولكن ينبغي أن يُشير اسمه في تلك الحالة إلى كَوْنه عضوًا بصَنْفه الحاضن، أي ينبغي أن يُستخدَم الاسم الكامل للصنف والذي يَتَكوَّن من اسم صَنْفه الحاضن متبوعًا بنقطة ثم باسمه. كأيّ مُكوِّن ساكن آخر ضِمْن صَنْف، تُعدّ الأصناف المُتداخِلة (nested class) الساكنة جزءًا من الصَنْف ذاته بنفس الطريقة التي يُعدّ بها أي مُتْغيِّر عضو (member variable) ساكن جزءًا من الصَنْف ذاته. لنَفْترِض مثلًا وجود صَنْف، اسمه WireFrameModel يُمثِل مجموعة من الخطوط بفضاء ثلاثي الأبعاد. يَحتوِي ذلك الصنف على صَنْف مُتداخِل ساكن Line يُمثِل خطًا واحدًا. يُمكِننا الآن كتابة تعريف الصنف WireFrameModel والصنف المُتداخِل Line كالتالي: public class WireFrameModel { . . . // أعضاء آخرى ضمن الصنف static public class Line { // ‫يمثل خطًا من النقطة (x1,y1,z1) إلى النقطة (x2,y2,z2) بفضاء // ثلاثي الأبعاد double x1, y1, z1; double x2, y2, z2; } // ‫نهاية الصنف Line . . . // أعضاء آخرى ضمن الصنف } // ‫نهاية الصنف WireFrameModel لاحِظ أن الاسم الكامل للصَنْف المُتداخِل هو WireFrameModel.Line ويُمكِنك اِستخدَامه للتّصْريح عن مُتْغيِّر مثلًا. تستطيع تَحْديدًا إنشاء كائن من الصَنْف Line باِستخدَام البَانِي new Line()‎ من داخل الصَنْف WireFrameModel، بينما قد تَستخدِم التعبير new WireFrameModel.Line()‎ لإنشائه من خارج الصَنْف. يستطيع أي صَنْف مُتداخِل (nested) ساكن الوصول إلى أي عُضو ساكن (static members) مُعرَّف بالصنف الحاضن له حتى وإن كان عضوًا خاصًا (private). بالمثل، يستطيع الصَنْف الحاضن لصَنْف مُتداخِل (nested) ساكن الوصول إلى أعضاء ذلك الصنف المُتداخِل (nested) حتى وإن كانت خاصة (private). يُمثِل ذلك دافعًا قويًا لاِستخدَام الأصناف المُتداخِلة (nested)؛ نظرًا لأنها تَسمَح لصَنْف معين بالوصول إلى الأعضاء الخاصة (private) المُعرَّفة بصَنْف آخر دون الحاجة إلى إِتاحة تلك الأعضاء بصورة أعم لجميع الأصناف الآخرى. وأخيرًا، يُمكِن لأي صَنْف مُتداخِل (nested) أن يَكُون خاصًا (private) وعندها يُمكِن اِستخدَامه من داخل الصَنْف الحاضن له فقط. على الرغم من أن تعريف الصَنْف Line يَقَع ضِمْن الصَنْف WireFrameModel، ستُخزَّن النسخة المُصرَّفة (compiled) من الصَنْف Line بملف مُنفصل، اسمه هو WireFrameModel$Line.class، أي أنه عند تصريف تعريف الصَنْف (class definition) -بالأعلى-، سيُنشِئ المُصرِّف ملفًا منفصلًا لكل صَنْف. الأصناف الداخلية (inner) يُطلَق على الأصناف المُتداخِلة (nested) غَيْر الساكنة (non-static) اسم "الأصناف الداخلية (inner classes)". من الناحية العملية، هي لا تَختلِف كثيرًا عن الأصناف المُتداخِلة الساكنة (static)، مع أنها تُعدّ جزءًا من كائنات الأصَنْاف الحاضنة لها لا الأصناف ذاتها. لا تُعدّ الأعضاء غَيْر الساكنة (non-static) المُعرَّفة بأي صنف جزءًا فعليًا من الصنف ذاته على الرغم من أن شيفرتها مُتضمَّنة بتعريف ذلك الصنف (class definition)، وهو ما يَنطبِق على الأصناف الداخلية (inner classes). تُحدِّد تلك الأعضاء ما ستَحتوِيه كائنات ذلك الصنف عند إنشائها، وهو ما يَنطبِق أيضًا على الأصناف الداخلية على الأقل منطقيًا أي كما لو كان كل كائن من الصنف الحاضن يَتَضمَّن نسخة خاصة من الصَنْف المُتداخِل (nested) -لا تَأخُذ ذلك بالمعنى الحرفي-. بإمكان تلك النُسخة الوصول لجميع توابع النُسخ (instance methods) ومُتْغيَّرات النُسخ (instance variables) المُعرَّفة بالكائن حتى وإن كانت خاصة (private). مثلًا، إذا كان لدينا كائنين من صَنْف يَتَضمَّن صنفًا داخليًا (inner class)، فإن نُسختي الصَنْف الداخلي بهذين الكائنين مختلفتان؛ لأنهما يُشيران إلى مُتْغيَّرات نُسخ وتوابع نُسخ تَقَع ضِمْن كائنات مختلفة. كيف تُقرِّر ما إذا كان ينبغي لصنف مُتداخِل (nested) معين أن يَكُون ساكنًا أو غَيْر ساكن؟ الأمر بسيط للغاية: إذا اِستخدَم الصنف المُتداخِل مُتْغيِّر نسخة (instance variable) أو تابع نسخة (instance method) من الصَنْف الحاضن، فلابُدّ أن يَكُون غَيْر ساكن (non-static)، أما إن لم يَستخدِم أيًا منها، فيُمكِنه أن يَكُون ساكنًا (static). يُستخدَم الصنف الداخلي (inner class) في غالبية الأحوال ضِمْن الصَنْف الحاضن له فقط. وفي تلك الحالة، لا يَختلِف اِستخدَامه كثيرًا عن اِستخدَام أيّ صنف آخر؛ فيُمكِنك أن تُصرِّح عن مُتْغيِّر أو أن تُنشِئ كائنًًا باِستخدَام الاسم البسيط للصَنْف الداخلي، ولكن فقط ضِمْن الأجزاء غَيْر الساكنة (non-static) من الصَنْف. أما إذا أردت اِستخدَامه من خارج صَنْفه الحاضن له، فلابُدّ من الإشارة إليه باِستخدَام اسمه الكامل والذي يُكْتَب بالصياغة .، حيث أن هو مُتْغيِّر يُشير إلى كائن مُتضمِّن لصَنْف داخلي (inner class). لاحِظ أنه لكي تَتَمكَّن من إنشاء كائن ينتمي لصَنْف داخلي، لابُدّ أولًا أن تُنشِئ كائنًا من صَنْفه الحاضن. لنَفْترِض أننا نريد كتابة صنف يُمثِل مباراة بوكر، بحيث يَتَضمَّن صنفًا داخليًا يُمثِل لاعبي المباراة. يُمكِننا كتابة تعريف الصنف PokerGame كالتالي: public class PokerGame { // يمثل مباراة بوكر class Player { // يمثل أحد لاعبي المباراة . . . } // ‫نهاية الصنف Player private Deck deck; // مجموعة ورق اللعب private int pot; // قيمة الرهان . . . } // ‫نهاية الصنف PokerGame إذا كان game مُتْغيِّرًا من النوع PokerGame، فإنه سيَتَضمَّن نسخة خاصة به من الصَنْف Player على نحو منطقي. كأي صَنْف عادي آخر، تستطيع اِستخدَام التعبير new Player()‎ لإنشاء كائن جديد من الصَنْف Player بشَّرْط أن يَقَع ذلك داخل تابع نسخة (instance method) بكائن الصَنْف PokerGame. في المقابل، تستطيع اِستخدَام تعبير مثل game.new Player()‎ لإنشاء كائن من الصَنْف Player من خارج الصَنْف PokerGame، ولكنه في الواقع أمر نادر الحدوث. يستطيع أي كائن من الصَنْف Player الوصول إلى مُتْغيِّرات النُسخ deck و pot المُعرَّفة بكائن الصَنْف PokerGame. من الجهة الأخرى، يَمتلك أي كائن من الصَنْف PokerGame نسخة خاصة به من كُلًا من deck و pot و Players. فمثلًا، يَستخدِم لاعبو مباراة بوكر معينة المُتْغيِّرين deck و pot الخاصين بتلك المباراة تَحْديدًا، بينما يَستخدِم لاعبو مباراة بوكر آخرى المُتْغيِّرين deck و pot الخاصين بتلك المباراة الآخرى. ذلك بالتحديد هو تأثير كَوْن الصَنْف Player غير ساكن، وهو في الواقع الطريقة الطبيعية التي ينبغي للاعبين التصرُّف على أساسها. يُمثِل كل كائن من الصَنْف Player لاعبًا ضِمْن مباراة بوكر مُحدَّدة، أما إذا كان الصَنْف Player صَنْْفًا مُستقلًا أو صنفًا مُتداخِلًا (nested) ساكنًا، فسيُمثِل عندها الفكرة العامة للاعب البوكر بصورة مُستقلة عن أي مباراة بوكر مُحدَّدة. الأصناف الداخلية مجهولة الاسم (anonymous) قد تُعرِّف صنفًا داخليًا (inner class)، ثم تَجِد نفسك تَستخدِمه بسطر وحيد بالبرنامج، فهل ينبغي حقًا في تلك الحالة تعريف مثل ذلك الصنف؟ ربما، ولكن قد تُفضِّل أيضًا أن تَستخدِم صنفًا داخليًا مجهول الاسم (anonymous) في مثل هذه الحالات. يُكْتَب أي صَنْف داخلي مجهول الاسم بالصيغة التالية: new <superclass-or-interface> ( <parameter-list> ) { <methods-and-variables> } يُعرِّف الباني -بالأعلى- صَنْفًا جديدًا بدون أن يُعطيه أي اسم، ويُنشِئ كائنًا يَنتمِي إلى ذلك الَصَنْف عند تَشْغِيل البرنامج. في العموم، يُنشِئ هذا الشكل من العَامِل new -والذي تستطيع اِستخدَامه أينما استطعت اِستخدَام العامل new العادي- كائنًا جديدًا ينتمي لصَنْف مجهول الاسم يُشبه الصَنْف أو الواجهة ، والتي تَعمَل كأساس لصنف ذلك الكائن مع إضافة المُتْغيرِّات والتوابع المُعرَّفة، أي أنه يُنشِئ كائنًا فريدًا. الأهم من ذلك هو أنه يُنشئِه فقط بذلك الجزء من البرنامج حيث تحتاج إليه. لا يُشترَط أن يَكُون ذلك الأساس صنفًا، فيُمكِن أن يَكُون واجهة (interface) أيضًا، ولكن في تلك الحالة -أي اِستخدَام واجهة كأساس-، يَكُون الصَنْف مجهول الاسم مُلزَمًا بتّنْفيذ (implement) الواجهة، أي بتعريف (define) جميع التوابع المُصرَّح (declare) عنها ضِمْن تلك الواجهة كما أن قائمة المُعامِلات لابُدّ أن تَكُون فارغة. في المقابل، إذا اِستخدَمت صنفًا كأساس، فبإمكانك تمرير مُعامِلات (parameters) بحيث يَستقبِلها أحد البواني (constructor) المُعرَّفة بالصَنْف الأعلى . إذا كان لدينا الواجهة Drawable المُعرَّفة كالتالي: public interface Drawable { public void draw(GraphicsContext g); } لنَفْترِض الآن أننا نحتاج إلى كائن من النوع Drawable لكي يَرسِم مربعًا أحمر اللون طوله يُساوِي ١٠٠ بكسل. قد تختار أن تُعرِّف صنفًا جديدًا يُنفِّذ الواجهة Drawable، ثم تُنشِئ كائنًا منه. في المقابل، قد تَستخدِم صنفًا مجهول الاسم (anonymous class) لإنشاء الكائن بتَعْليمَة واحدة فقط، كالتالي: Drawable redSquare = new Drawable() { public void draw(GraphicsContext g) { g.setFill(Color.RED); g.fillRect(10,10,100,100); } }; يُشير redSquare -بالأعلى- إلى كائن يُنفِّذ الواجهة Drawable، ويَرسِم مربعًا أحمر اللون عند استدعاء تابعه draw()‎. لاحِظ أن الفاصلة المنقوطة بنهاية التَعْليمَة ليست جزءًا من تعريف الصنف (class definition)، وإنما هي تلك التي تُوجد بنهاية أي تَعْليمَة تّصْريح (declaration). يَشيع تمرير الأصناف مجهولة الاسم (anonymous class) كمُعامِلات فعليّة (actual parameters) للتوابع. فمثلًا، يَستقبِل التابع التالي كائنًا من النوع Drawable، ثم يَرسمه بسياقين رُسوميين (graphics contexts) مختلفين: void drawTwice( GraphicsContext g1, GraphicsContext g2, Drawable figure ) { figure.draw(g1); figure.draw(g2); } عندما تَستدعِي ذلك التابع، يُمكِنك أن تُمرِّر صنفًا داخليًا (inner class) مجهول الاسم (anonymous) كقيمة للمُعامِل (parameter) الثالث، كالتالي: drawTwice( firstG, secondG, new Drawable() { void draw(GraphicsContext g) { g.fillOval(10,10,100,100); } } ); يُنشِئ المُصرِّف ملف صنف ‎.class منفصل لكل صنف مُتداخِل (nested) مجهول الاسم ضِمْن الصَنْف. إذا كان اسم الصنف الأساسي هو MainClass، فإن أسماء ملفات الأصناف المتداخلة مجهولة الاسم تكون كالتالي: MainClass$1.class و MainClass$2.class و MainClass$3.class وهكذا. تُمثِل الواجهة Drawable المُعرَّفة بالأعلى واجهة نوع دالة (functional interface)، وبالتالي نستطيع في هذه الحالة اِستخدَام تعبيرات لامدا (lambda expressions) بدلًا من الأصناف مجهولة الاسم. يُمكِن إعادة كتابة المثال الأخير كالتالي: drawTwice( firstG, secondG, g -> g.fillOval(10,10,100,100) ); كما يُمكِن إعادة تعريف المُتْغيِّر redSquare كالتالي: Drawable redSquare = g -> { g.setFill(Color.RED); g.fillRect(10,10,100,100); }; لا يُنشِئ المُصرِّف أي ملفات جديدة لتعبيرات لامدا (lambda expressions) وهو ما يُحسَب لها، ولكن لاحِظ أنها تُستخدَم فقط مع واجهات نوع الدالة (functional interfaces). في المقابل، تستطيع اِستخدَام الأصناف مجهولة الاسم (anonymous classes) مع أي واجهة أو صنف. قبل الإصدار ٨ من الجافا، كانت الأصناف مجهولة الاسم تُستخدَم لمعالجة الأحداث (events) ببرامج واجهات المُستخدِم الرُسومية (GUI)، ولكن مع الإصدار ٨ ومنصة جافا إف إكس (JavaFX)، أصبحت تعبيرات لامدا مُستخدَمة بكثرة ضِمْن هذا السياق بدلًا من الأصناف مجهولة الاسم. الأصناف المحلية (local) وتعبيرات لامدا تستطيع أن تُعرِّف صنفًا ضِمْن تعريف برنامج فرعي (subroutine definition). تُعرَف تلك النوعية من الأصناف باسم "الأصناف المحلية (local classes)". يَقْتصِر اِستخدَام أي صنف محلي على البرنامج الفرعي (subroutine) المُعرَّف بداخله، ولكن يُمكِن لكائنات ذلك الصنف أن تُستخدَم خارج البرنامج الفرعي، فمثلًا، قد يُعاد كائن ينتمي لصنف محلي من برنامج فرعي أو قد يُمرَّر كمُعامِل (parameter) لبرنامج فرعي آخر. هذا ممكن لأننا نستطيع عمومًا إِسْناد كائن ينتمي لصنف معين B إلى مُتْغيِّر من النوع A طالما كان B صنفًا فرعيًا من A في حالة كان A عبارة عن صنف، أما إذا كان واجهة فطالما كان B يُنفِّذ A. لنَفْترِض مثلًا أن لدينا برنامج فرعي (subroutine) يَستقبِل مُعامِلًا من النوع Drawable -الواجهة المُعرَّفة بالأعلى-، فنستطيع ببساطة أن نُمرِّر إليه أي كائن طالما كان يُنفِّذ (implements) تلك الواجهة، وعليه، قد ينتمي الكائن لصنف محلي (local class) يُنفِّذ تلك الواجهة. بمثال سابق بهذا القسم، مَرَّرنا كائنًا من النوع Drawable إلى التابع drawTwice()‎، والذي يَستقبِل مُعاملًا (parameter) من النوع Drawable. في ذلك المثال، كان الصنف المُمرَّر صنفًا داخليًا مجهول الاسم (anonymous inner class). لاحِظ أن الأصناف المحلية عادة ما تَكُون مجهولة الاسم (anonymous) والعكس، لكنه مع ذلك ليس أمرًا ضروريًا. فمثلًا، قد تَستخدِم صنفًا مجهول الاسم لتعريف القيمة المبدئية لمُتْغيِّر عام (global variable). في تلك الحالة، لا يَقع الصَنْف ضِمْن أي برنامج فرعي (subroutine)، وبالتالي لا يُعدّ محليًا (local). يُمكِن لأي صَنْف محلي (local class) أن يُشير إلى أي مُتْغيِّر محلي (local variables) ضِمْن برنامجه الفرعي أو إلى أي من مُعامِلاته (parameters) المُمرَّرة، ولكن وفقًا لعدة شروط: لابُدّ أن يُصرَّح عن ذلك المُتْغيِّر المحلي (local variable) أو المُعامِل (parameter) باستخدام المُبدِّل final أو أن يَكُون على الأقل "نهائيًا على نحو فعال". يُعدّ المُعامِل (parameter) "نهائيًا على نحو فعال" إذا لم تَتغيّر قيمته داخل البرنامج الفرعي (subroutine) بما في ذلك أصنافه المحلية (local class) التي أشارت إلى ذلك المُعامِل (parameter) بينما يُعدّ المُتْغيِّر المحلي (local variable) "نهائيًا على نحو فعال" إذا لم تَتغيّر قيمته أبدًا بعد التهيئة المبدئية (initialize). في المقابل، تستطيع الأصناف المحلية الإشارة إلى أي مُتْغيِّر عام (global variables) ودون أي شروط. تَنطبِق نفس شروط اِستخدَام المُتْغيِّرات المحلية (local variables) على تعبيرات لامدا (lambda expressions)، والتي هي كثيرة الشبه بالأصناف مجهولة الاسم (anonymous classes). تَستعرِض الشيفرة التالية برنامجًا فرعيًا يَستخدِم كُلًا من واجهة برمجة التطبيقات stream والواجهة Runnable -ناقشناها بالقسم ٤.٥-؛ لطباعة الأعداد من ١ إلى ١٠ بترتيب غير مُحدَّد يَعتمِد على مجرى مُتوازي (parallel stream): static void print1to10() { ArrayList<Runnable> printers = new ArrayList<>(); for (int i = 1; i <= 10; i++) { int x = i; printers.add( () -> System.out.println(x) ); } printers.parallelStream().forEach( r -> r.run() ); } لمّا كان المُتْغيِّر المحلي x "نهائيًا على نحو فعال"، تَمكَّنا من اِستخدَامه ضِمْن تعبير لامدا (lambda expression). في المقابل، لا يُمكِن اِستخدَام المُتْغيِّر i ضِمْن تعبير لامدا؛ لأنه غَيْر نهائي حيث تَتغيّر قيمته عند تّنْفيذ التعبير i++‎. ترجمة -بتصرّف- للقسم Section 8: Nested Classes من فصل Chapter 5: Programming in the Large II: Objects and Classes من كتاب Introduction to Programming Using Java.
    1 نقطة
  8. السلام عليكم .. الحين أنا كنت بدي اربط حسابي على github مع برنامج VSC عن طريق GitLens Extension لكن طلعتلي هادي الرسالة وما ظبط يربط مع الحساب فشو السبب ؟
    1 نقطة
  9. مرحبا ما هي افضل طريقة لسحب رصيد من مستقل الى سوريا علما ان paypal محظور. ارجو نصيحة من لديه تجربة
    1 نقطة
  10. السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع يا اخوان انا احاول اعمل مشروعي من نوع فلاتر نسخة APK ولكن كل ما احاول اعمل BUILD تجيني المشكله التاليه : C:\src\flutter\bin\flutter.bat --no-color build apk You are building a fat APK that includes binaries for android-arm, android-arm64, android-x64. If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size. To generate an app bundle, run: flutter build appbundle --target-platform android-arm,android-arm64,android-x64 Learn more on: https://developer.android.com/guide/app-bundle To split the APKs per ABI, run: flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi Learn more on: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split Running Gradle task 'assembleRelease'... Plugin project :firebase_core_web not found. Please update settings.gradle. Note: C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\cloud_firestore-0.12.11\android\src\main\java\io\flutter\plugins\firebase\cloudfirestore\CloudFirestorePlugin.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: C:\src\flutter\.pub-cache\hosted\pub.dartlang.org\cloud_firestore-0.12.11\android\src\main\java\io\flutter\plugins\firebase\cloudfirestore\CloudFirestorePlugin.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. Removed unused resources: Binary resource data reduced from 235KB to 212KB: Removed 9% FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':path_provider:verifyReleaseResources'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > Android resource linking failed C:\Users\*****\.gradle\caches\transforms-2\files-2.1\733257008ca62c5b6ddfd0e885c42d88\core-1.1.0\res\values\values.xml:142:5-173:25: AAPT: error: resource android:attr/fontVariationSettings not found. C:\Users\*****\.gradle\caches\transforms-2\files-2.1\733257008ca62c5b6ddfd0e885c42d88\core-1.1.0\res\values\values.xml:142:5-173:25: AAPT: error: resource android:attr/ttcIndex not found. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 1m 19s Running Gradle task 'assembleRelease'... 80.8s The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility. Building plugin cloud_firestore... Running Gradle task 'assembleAarRelease'... The plugin cloud_firestore could not be built due to the issue above. Process finished with exit code 1 في احد يعرف سبب المشكله هذا او كيف يمكن حلها؟
    1 نقطة
  11. لو وضعت stateless widgets في الـList واعطيتهم أرقام مباشرة كالتالي: List<Widget> myList = [ Text(‘1’), Text(‘2’) ]; لسار كل شيء كما تريد لكنك قمت بإستخدام stateful widgets بدون تعيين key لها وبالتالي لن يتم التعرف على التغيير الحاصل في الـList الخاصة بك. لكن لماذا تم التعرف على هذا التغير عندما تم إستخدام عناصر من نوع stateless ؟ لأن القيمة النصية للعنصر مرتبطة بالعنصر نفسه أي لا يوجد لها حالة كما هو الحال في stateful widgets الذي تحتفظ بالقيمة النصية في الحالة الخاصة بها. إذاً لحل المشكلة يجب إضافة key فريد لكل العناصر المراد التبديل بينها بحيث يتم التفريق بين تلك العناصر حسب الـkey. يجب أولا أن نهيئ الـ constructor الخاص بـ MyRandomWidget ليستقبل key ويقوم بتمريره للـsuper: class MyRandomWidget extends StatefulWidget { MyRandomWidget({Key key}) : super(key: key); //….باقي الكود } بعد تهيئة الـconstructor نقوم بتمرير UniqueKey (مفتاح فريد يتم توليده عشوائياً ) عند تعريف العناصر في داخل الـList ليصبح الكود كالتالي: List<Widget> tiles = [ MyRandomWidget(key: UniqueKey()), //إضافة معرف فريد للعنصر MyRandomWidget(key: UniqueKey()),//إضافة معرف فريد للعنصر ]; الآن وبعد إسناد معرف فريد لكل عنصر سيعمل كل شيء على يرام. مرفق الملف بعد التعديل. main.dart
    1 نقطة
  12. هل التابع first() نفس دور get() ام انه لجلب المستخدم الاول واذا كان لدي مثلا في جدول البيانات ثلاثة مواضيع واريد عرض اول وثاني موضوع فقط ومرة اخرى عرض موضوعين فقط ولكن بطريقه عشوائيه
    1 نقطة
  13. كيف احفظ صفحه الاجابات ع سؤالي هذه بحيث استطيع ان اراها بسهوله مرة اخرى
    1 نقطة
  14. يمكنك الوصول إلى الـenvironment variables الضغط على This PC أو my computer بزر الفأرة الأيسر ومن ثم إختيار properties كما هو موضح في الصورة التالية: نقوم بعدها بالضغط على advanced system settings: بعد ذلك نقوم بالدخول على system environment variables كما هو موضح: بعد وصولنا لهذه الشاشة نتابع الخطوات في التعليق السابق لإضافة الـgit إلى الـenvironment variables.
    1 نقطة
  15. فهمت عليك لكن المشكلة ان لما كتبت في البحث environment variables ما ظهر اشي ؟
    1 نقطة
  16. عدم إدخال إلا الحروف : يمكنك القيام بذلك من خلال الجافا سكربت باختبار الزر الذي يتم الضغط عليه عند الكتابة داخل الinput كالاتي: <input type="text" onkeydown="return checkValue(event)"> وفي الدالة checkValue سيتم اختبار قيمة الادخال والتأكد من أنها تتكون من حروف فقط كما يلي: function checkValue(event) { let key = event.keyCode;//للحصول على الكود الخاص بالزر المضغوظ return ((key >= 65 && key <= 90) || (key >= 95 && key <= 122));//هنا يتم اختبار الكود الخاص بالزر ما إذا كان الحرف كبير ويقع بين القيمتين الA-Z (95-120) او حرف صغير a-z (65-90) } ادخال ارقام فقط: <input type="number"> ادخال البريد الإلكتروني فقط: <input type="email">
    1 نقطة
  17. على أي أساس يتم إستخدام stateful أو stateless ؟ وما هو الفرق بينهما ؟
    1 نقطة
  18. رسالة الخطأ تقول أنه لا يمكن العثور على git في جهازك، إذا كان الـgit غير منصب فيجب تحميله وتنصيبه ومن ثم متابعة الشرح التالي. أما كان الـgit منصباً يجب عليك إضافته في الـenvironment variables لكي يعثر عليه الـVS Code، تابعي الخطوات التالية: نضغط على قائمة إبدأ ونكتب في حقل البحث " environment variables " ثم نضغط عليها كما هو موضح في الصورة التالية نقوم بالضغط على زر environment variables تحت قسم user variables نضغط على Path نقوم بإضافة المسار الخاص ببرنامج git المنصب على جهازك " C:\Program Files\Git\bin " نضغط ok لحفظ التعديلات ومن ثم نعيد تشغيل الـVS Code.
    1 نقطة
  19. أول شيء إصدارات PHP أوقفت التعامل مع mysql و استبدلتها ب mysqli أو PDO. هناك عدة دوال لحماية المدخلات ومنها mysql_real_escape_string: تقوم بحماية المدخلات المضافة إلى قاعدة البيانات. strip_tags: تمنع إضافة أكواد HTML , PHP داخل قاعدة البيانات. htmlspecialchars: يمكنك مراجعة توثيق موسوعة حسوب بالدالة لفهمها أكثر من هنا $name = strip_tags($_POST['name']); $name = htmlspecialchars($_POST['name']); $name = mysql_real_escape_string($_POST['name']); ويمكن صنع دالة حماية واستخدامها مع كل مدخل مثل function filterThis($string) { return mysql_real_escape_string($string); } function filterThis($string) { return strip_tags($string); } function filterThis($string) { return htmlspecialchars($string); } فلو أردنا تطبيق هذه الدوال على الكود الخاص بك يصبح هكذا <?PHP $name = strip_tags($_POST['name']); $phone = strip_tags($_POST['phone']); $email = strip_tags($_POST['email']); $db = mysql_connect('localhost', 'root', '', 'info'); $query = "insert into user values('".$name."','".$phone."','".$email."')"; $insert =$db->query($query); ?> <form method="post" action=""> <p><input name="name" type="text"></p> <p><input name="phone" type="text"></p> <p><input name="email" type="text"></p> <p><input type="submit"></p> </form>
    1 نقطة
  20. قد تلاحظين أن في laravel هناك عدة طرق للوصول إلى ما نريد، لذلك في هذه الحالة لا يوجد فرق، whereIn تُستخدم لإنشاء الإستعلام الذي نريده و get هي التي تقوم بتطبيق الإستعلام و إرجاع النتائج، بعكس find التي تقوم بالإثنين معاً، أحياناً قد لا نريد جلب السجلات بل نريد حذفها مثلاً او إجراء عملية أخرى و في هذه الحالة لن تُساعدنا find، يُمكن إستخدامها لكن سنقوم في هذه الحالة بإجراء إستعلامات زائدة لا داعي لها. فإذا كنا نريد الحذف لماذا نجلب البيانات ما دُمنا نستطيع حذفها مُباشرة: Model::whereIn('id', [1, 2])->delete();
    1 نقطة
  21. لجلب سجلات مُحددة عن طريق id النموذج مثلاً 1، 4، و 9 نقوم بإستعمال التابع find على الmodel و تمرير مصفوفة تضم المُعرفات التي نريد جلب سجلاتها: Model::find([1, 4, 9]); أي أننا إن أردنا جلب المُستخدم الأول و الثاني يُمكننا إستخدام: User::find([1, 2]); أما إن كنا نريد جلب سجلين عشوائيين يُمكن إستخدام هذه الطريق: Model::inRandomOrder()->limit(2)->get(); الفرق بين first و get أن first يجلب أول سجل يُطابق الإستعلام، أما get تجلب كل السجلات التي تُطابق الإستعلام على شكل collection، مجموعة سجلات
    1 نقطة
  22. هل كتابة الكود هذه صحيحه لكي اجلب السجلات من اخر الجدول الى اولها User::orderByDesc('title')->first(); اسفه اقصد التابع orderAsce () بدل من orderDesc()
    1 نقطة
  23. نعم هي بداخل class بالفعل اذا اردت ان اعرض من اخر السجلات الى اولها فكيف؟
    1 نقطة
  24. ممتاز جدا يمكنك التحقق أكثر عندما تطبعي البيانات في ملف view.
    1 نقطة
  25. namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Slide; use App\About; public function homepage(){ $slides = Slide::all(); $about = About::whereIn('id', [1,2])->get(); return view ('front.homepage', compact('slides','about')); } هل هذا الكود صحيح
    1 نقطة
  26. first تستخدم لجلب صف واحد ( سجل واحد ) من الجدول داخل قاعدة البيانات. $user = User::where('id', 1)->first(); ويتم جلب هذا الاستعلام داخل ملف view فمثلاً <p>{{ $user->name }}</p> أما get تستخدم لجلب عدة سجلات على شكل مصفوفة كما في المثال التالي $posts = Post::where('user_id', 1)->get(); ويتم جلب هذا الاستعلام داخل ملف view فمثلاً <table class="table table-bordered table-hover"> <thead> <tr> <th>ID</th> <th>Phone</th> <th>ORDER</th> <th>DATE</th> </tr> </thead> <tbody> @foreach($posts as $post) <tr> <td>{{ $post->id ?? '' }}</td> <td>{{ $post->title ?? '' }}</td> <td>{{ $post->desc ?? '' }}</td> <td>{{ $post->created_at ?? '' }}</td> </tr> @endforeach </tbody> </table> ويمكن استخدام أي دالة loop مثل while , for, foreach لجلب عناصر المصفوفة العائدة من الاستعلام
    1 نقطة
  27. يمكن إستخدام التابع whereIn والذي يقبل اسم عمود ومصفوفة من القيم $users = User::whereIn('id', [6, 7, 9])->get(); في الكود أعلاه سيتم جلب السجلات التي تحمل معرف 6 و 7 و 9 فقط. هنا مثال آخر لجلب كل السجلات الخاصة بالمستخدمين الذين لديهم عمر أكبر من 18 ووضع حد لعدد السجلات التي يتم جلبها وهو 100 سجل فقط $users = User::where('age', '>=', 18)->limit(100)->get();
    1 نقطة
  28. ولكن التابع limit سيجلب لي او سجلين يراهم اما اذا اردي سجلين مثلا السادس والسابع فماذا استخدم
    1 نقطة
  29. السلام عليكم أنا جديد في البرمجة كائنية الوجه وواجهتني مشكلة جعل المتغير $conn متغير global داخل الكلاس حينما أريد جعل المتغير global داخل function أقوم بكتابة الكود التالي global $conn; فعندما كتبته داخل class بدل من function واجهتني مشكلة ذات خطأ: Parse error: syntax error, unexpected token "global", expecting "function" or "const" in C:\xampp\htdocs\private\teachers.php on line 10 فما الحل؟ الكود المستخدم
    1 نقطة
  30. مرحباً صالح : مستقل لا يدعم السحب إلا عن طريق paypal يمكنك أن تتواصل مع مركز المساعدة وفتح تذكرة أما عن اقتراحي الشخصي من الممكن أن يستلم الحوالة أحد من اقاربك أو أصدقائك الموثوقين الموجودين خارج سوريا ويرسل لك الأموال عن طريق حوالة بنكية.
    1 نقطة
  31. السلام عليكم, هل هناك دورات مختصة وشاملة ل WordPress؟
    1 نقطة
  32. ليست هناك دورة كاملة ومختصة بال wordpress ولكن المسار الموجود في دورة تطوير تطبيقات الويب بإستخدام لغة php جيد جداً وسيعطيك الأساسيات التي تحتاجها حيث لن تحتاج إلى دورة أخرى في ال WordPress إنما ما تحتاج إليه بعد تعلم ذلك هو التطبيق أكثر وتجربة الإضافات المشهورة والتعديل علي القوالب المختلفة أي بمعنى الممارسة وبناء المشاريع
    1 نقطة
  33. تغطي شهادة Linux+ المهام الشائعة في التوزيعات الرئيسية لنظام linux، بما في ذلك سطر الأوامر Linux Command Line والصيانة الأساسية وتثبيت محطات العمل وتكوينها وتكوين الشبكات أيضاً. وسأقوم بكتابة أبرز المتطلبات التي تغطيها الشهادة: تثبيت وتكوين نظام التشغيل Linux تنفيذ العمليات الأساسية على سطر الأوامر command line operations إنشاء وإدارة وتهيئة المستخدمين والمجموعات ضمن النظام. إدارة نظام الملفات والتنقل بين الملفات وإجراء العمليات الأساسية عليها بما فيها تعديل محتويات الملفات النصية. إنشاء الملفات وتحريرها وتحديد موقعها والعمليات الأساسية عليها (نسخ،نقل،حذف،...) ونسخها احتياطاً واستعادتها. تكوين الطابعات ووظائف الطباعة والتعامل معها عن بعد. معرفة كيفية استخدام الأوامر الرئيسية في SQL والبرامج النصية لمعالجة البيانات وكيفية الولوج إليها. فهم بروتوكولات الشبكات الأساسية والتكوينات لها. أداء مهام الأمان مثل إعطاء وتغيير الصلاحيات والتحكم بها وتغيير كلمات المرور وتشفير البيانات. ويكون فحص الشهادة مقسّم كالتالي حسب المحاور: Hardware and System Configuration 21% Systems Operation and Maintenance 26% Security 19% Linux Troubleshooting and Diagnostics 20% Automation and Scripting 14% كما يمكنك الاطلاع على أسئلة سنوات سابقة لأخذ فكرة عن نوعية الأسئلة وتوزيعها والتدرّب عليها.
    1 نقطة
  34. اهلا بك مرحبا سؤالك مهم لكي تكون نجم في عالم التسويق الالكتروني هناك بعض المهارات التى يجب عليك ان تتقنها واهمها دراسة كورس في علم النفس الرقمي ، التحليل الالكتروني والمحتوى. البداية هي الاساس والبداية هي المحفز الاكبر والدافع الاعظم في اي شئ تم انجازة على هذه الكون . ومن هنا يواجهة الكثير من الشباب والشبات مشكلة عدم وجود بوصلة تحدد المسار الذى يمكن ان يتم المضى فيه لكي يصلون الى هدفهم . وعلى هذا الاساس يسالني الكثير من الاخوة والاخوات الكثير من الاسئلة منها: – كيف ابدا التسويق الالكتروني ؟ – ماهو مفهوم التسويق الالكتروني؟ – كيف اطور مهارتي في التسويق الالكتروني ؟ – ماهي اهم كورسات التسويق الالكتروني المعتمدة ؟ سوف تجد اجابة على هذه الاسئلة عن طريق الدورات المجانية التالية والتى ركزت في مجملها على مساعدتك في رفع قدراتك في مجال التسويق الرقمي بالاضافة الى انها تعتبر اللبنه الاولي في طريقك لتعلم مبادئ التسويق عن طريق الانترنت او بالانجليزيةbasics of digital marketing . أساسيات التسويق الألكتروني من google تعلم اساسيات التسويق الرقمي مع مشروع حي
    1 نقطة
×
×
  • أضف...