ملخص
يختم هذا الدرس الوحدة الثالثة من الدورة، المخصّصة للتعابير وعواملها. ويعيد بناء سلسلة المفاهيم التي تمتدّ من العامل الحسابي إلى دالة المكتبة، مرورًا بشجرة التعبير ونوع كل عقدة، والشروط وجبرها، والحساب المختصر، والأثر الجانبي وترتيب الحساب، والبتات؛ ويفصل ما يصحّ من ذلك في أي لغة عمّا هو خاص بـ C++؛ ويجمع السلوك غير المعرَّف في الوحدة، مع ما يكشفه المترجم، وما يكشفه الكاشف، وما لا يكشفه أحد؛ ويعيد في تقييم الخروج مهارات تقييم الدخول؛ وينتهي بستة تحدّيات تجمع الوحدة كلها.
أهداف التعلم
- توقّع قيمة أي تعبير في الدورة ونوعه وأثره، انطلاقًا من شجرته ومن التحويلات في كل عقدة.
- كتابة الشروط المركّبة ونفيها، واستعمال الحساب المختصر لحماية عملية كانت ستفتقر إلى المعنى لولا ذلك.
- التعرّف على التعابير التي تفتقر إلى المعنى (فهرس السلوك غير المعرَّف في الوحدة)، وبيان الأداة التي تكشف كلًّا منها، وإعادة كتابتها من دونه.
- الاختيار بين الحساب والعوامل البتّية والمكتبة الرياضية لإجراء حساب معيّن، وتعليل الاختيار.
- الفصل، فيما تعلّمناه في الوحدة، بين ما يصحّ في أي لغة وما هو خاص بـ C++.
ما حقّقته الوحدة
وضعت الوحدة لنفسها غاية أن تعلّم بناء تعابير يمكن توقّع قيمتها بيقين: أي عملية تُجرى أولًا، وما نوع النتيجة، وما آثارها الجانبية، وأي التعابير لا معنى لها. وقد تحقّقت الغاية استنادًا فقط إلى ما أعلنته المقدمة معلومًا: أنواع الوحدة 2، ومدى قيمها، وتحويلاتها. والبرنامج ذو الأسئلة الستة الذي طرحت به المقدمة المسألة يمكن الآن قراءته كما يقرؤه المترجم، وتصحيحه تعبيرًا تعبيرًا.
العمليات الحسابية
حدّد درس العمليات الحسابية السلوك الدقيق للعوامل الحسابية الخمسة. فالقسمة الصحيحة تبتر نحو الصفر وتحقّق المتطابقة (a / b) * b + a % b == a كلما كان لخارج القسمة معنى، فيحمل الباقي، حين لا يكون صفرًا، إشارة المقسوم؛ ومن هنا كانت قيمة -7 / 2 هي وقيمة -7 % 2 هي ، ويُسأل عن الفردية بـ n % 2 != 0. وربط ذلك بالباقي الإقليدي، ((a % b) + b) % b عندما ، واستعمل كليهما لتفكيك الكمّيات. وعلّم رسم شجرة التعبير بحسب الأسبقية والتجميعية، وتحديد النوع في كل عقدة بالتحويلات الحسابية المعتادة. وختم بخوارج القسمة التي لا معنى لها (القسمة الصحيحة على الصفر، وقسمة أصغر عدد صحيح على ) وبفيضان نتيجة وسيطة، الذي يكفي للسلوك غير المعرَّف وإن اتّسع النوع للنتيجة النهائية.
العلاقات والمنطق
علّم درس العلاقات والمنطق أن الشرط تعبير من النوع bool، له موضعه في الشجرة: فعوامل المقارنة أضعف ارتباطًا من الحساب، و&& أقوى من ||، و! أقوى منها جميعًا. وعلّم ترجمة العبارات إلى شروط والتعرّف على الشروط التي تُترجَم بمعنى آخر، مثل 1 < x < 5 وday == 6 || 7. وبيّن أن && و|| لا يحسبان معامَلهما الثاني إلا إذا لم يحسم الأول الأمر، وأن هذا الحساب المختصر يتيح حماية عملية بحارس على يسارها. وانتهى بقوانين دي مورغان، التي تنفي شرطًا مركّبًا، وبحدّها: مع قيمة ليست عددًا، لا يكافئ !(a < b) الشرطَ a >= b.
الإسناد والآثار الجانبية والسلوك غير المعرّف
ميّز درس الإسناد والآثار الجانبية والسلوك غير المعرّف قيمة التعبير من أثره: فالإسناد تعبير قيمته ما أُسند ويغيّر متغيرًا، وx++ قيمته القيمة القديمة بينما ++x قيمته الجديدة. وبيّن أن شجرة التعبير لا تحدّد الترتيب الذي تُحسب به فروعها، فإذا وقع أثران على المتغير نفسه، أو أثر وقراءة، دون ترتيب بينهما، صار التعبير بلا معنى، ووضّح ما رتّبه C++17 وما تركه غير محدَّد. وجمع فهرس الدرجات الأربع (المعرَّف، والمعرَّف من قِبل التنفيذ، وغير المحدَّد، وغير المعرَّف)، وشرح أن المترجم يستدلّ مفترضًا أن البرنامج خالٍ من السلوك غير المعرَّف، وذكر لكل حالة من الفهرس الأداة التي تكشفها.
البتات والمكتبة الرياضية
علّم درس البتات والمكتبة الرياضية أن العدد الصحيح هو أيضًا متتالية من البتات: فـ & و| و^ تطبّق رابطًا منطقيًا على كل عمود، و~ يقلب جميع البتات، والإزاحات تضرب في قوى 2 وتقسم عليها، بشرط ألا يكون مقدار الإزاحة سالبًا ولا بالغًا عرض النوع. وبها بنى الأقنعة التي تستعلم عن بتّ وتشغّله وتطفئه وتقلبه. ونبّه إلى أن هذه العوامل أضعف ارتباطًا من عوامل المقارنة، فلا يسأل x & 1 == 0 عمّا يبدو أنه يسأل عنه، وإلى أن ^ ليس الأسّ. وختم بالمكتبة: فـ <cmath> و<numbers> و<numeric> و<bit> تقدّم حسابات صحيحة ومجرَّبة، بشروطها المسبقة الخاصة، كشرط القيمة المطلقة، التي لا وجود لها لأصغر عدد صحيح.
جارٍ تحميل المحتوى…