نعرف الكتير من المعاملات الحسابية من التعليم الأساسي في المدارس مثل عامل الإضافة ‘+’ , والضرب ‘*’ والطرح ‘-’ وخلافه
في هذا الفصل سنبدأ بالعاملات الحسابية البسيطة ثم سنركز على النواحي المحددة بالنسبة للغة جافا سكريبت والتي لم يتم تغطيتها برياضيات الحساب في المدرسة
مصطلحات: أحادي، ثنائي ، ومعامل
قبل ما ان نكمل، فلنفهم جيدا بعض المصطلحات
-
*معامل * – هو ما يتم تطبيق العاملات الحسابية عليه. على سبيل المثال، عند ضرب 2 * 5 يوجد معاملات اثنان: المعامل الأيسر “5” والمعامل الأيمن “2” . أحيانا الناس يسمونها "عوامل متغيرة " بدلا من "معاملات "
-
العامل الحسابي يكون أحاديا إذا كان لديه معامل واحد فقط. على سبيل المثال عامل الطرح الأحادي ‘-’ يعكس إشارة الرقم:
let x = 1; x = -x; alert( x ); // -1, unary negation was appliedالعامل الحسابي يكون ثنائيا إذا كان لديه معاملين حسابيين اثنين. نفس الشيء بالنسبة لعامل الطرح الحسابي أيضا:
let x = 1, y = 3; alert( y - x ); // 2, binary minus subtracts valuesبشكل رسمي، في الأمثلة السابقة كان لدينا عاملين حسابيين مختلفين يشتركان في نفس الرمز: عامل النفي يعكس إلإشارة وعامل الطرح , عامل ثنائي يقوم يطرح رقم من آخر
#الرياضيات
العمليات الحسابية التالية مدعومة:
- الإضافة “+”
- الطرح “-”
- الضرب “*”
- القسمة “/”
- باقي القسمة “%”
- الضرب الأسي “**”
العوامل الحسابية الأربع الأوئل واضحين بينما باقي القسمة “%” والضرب الأسي “**” بحاجة إلى بعض الإيضاح حولهم
بافي القسمة %
عامل باقي القسمة “%” بالرغم من شكله إلا أنه لا صلة له بالنسبة المئوية
ناتج a % b هو [باقي قسمة] الرقم “a” على الرقم “b” (https://en.wikipedia.org/wiki/Remainder)
على سبيل المثال:
alert( 5 % 2 ); // 1, a remainder of 5 divided by 2
alert( 8 % 3 ); // 2, a remainder of 8 divided by 3
الضرب الأسي **
عامل الضرب الأسي a ** b يقوم بضرب الرقم a في نفسه عدد b من المرات
على سبيل المثال:
alert( 2 ** 2 ); // 4 (2 multiplied by itself 2 times)
alert( 2 ** 3 ); // 8 (2 * 2 * 2, 3 times)
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2, 4 times)
من الناحية الرياضياتية الضرب الأسي يستخدم أيضا مع الأرقام غير الصحيحة. على سبيل المثال الجذر التربيعي هو ضرب أسي بقيمة
1/2:
alert( 4 ** (1/2) ); // 2 (power of 1/2 is the same as a square root)
alert( 8 ** (1/3) ); // 2 (power of 1/3 is the same as a cubic root)
إضافة الكلمات وسلاسل الحروف بعامل الإضافة +
هيا نتعرف على مميزات عوامل اللغة جافا سكريبت والتي تتجاوز الحساب المدرسي
عادة، عامل الإضافة “+” يقوم بجمع الأرقام
لكن لو العامل الحسابي الثنائي “+” تم تطبيقه على الكلمات فإنه يقوم بدمجهم معا:
let s = "my" + "string";
alert(s); // mystring
لاحظ أنه إذا كان أي من المعاملات عبارة عن كلمة فإنه يتم تحويل الآخر إلى كلمة أيضا
على سبيل المثال:
alert( '1' + 2 ); // "12"
alert( 2 + '1' ); // "21"
أرأيت، لا يهم إذا كان المعامل الأول أو الثاني عبارة عن كلمة
مثال آخر أكثر تعقيدا:
alert(2 + 2 + '1' ); // "41" and not "221"
هنا العوامل الحسابية تعمل بعد الأخرى. عامل الإضافة الأول + يقوم بجمع الرقمين فيصبح ناتجهمها 4 ثم يقوم عامل الإضافة الثاني + بدمج 4 و 1 في كلمة واحدة فتصبح الناتج النهائي مثل 4 + '1' = 41.
alert('1' + 2 + 2); // "122" and not "14"
هنا, المعامل الأول هو نص, يعامل المترجم المعاملين الآخرين كنصوص أيضًا. 2 يتم دمجها مع '1', مثل ذلك '1' + 2 = "12" و "12" + 2 = "122".
عامل الإضافة الثنائي “+” هو العامل الوحيد الذي يدعم الكلمات بهذه الطريقة العوامل الحسابية الأخرى تعمل فقط مع الأرقام ودائما ما تحول المعاملات إلى أرقام
هنا شرح مبسط لعملية الطرح والقسمة:
alert( 6 - '2' ); // 4, converts '2' to a number
alert( '6' / '2' ); // 3, converts both operands to numbers
التحويل العددي ، الأحادي +
إشارة الجمع “+” توجد في شكلين ، الشكل الثنائي كما تم استخدامه من قبل والشكل الأحادي
عامل الإضافة الأحادي أو بكلمات أخرى عامل الزائد “+” الذي يتم تطبيقه على قيمة واحدة لا يؤثر على الأرقام لكن إذا كان المعامل ليس رقما فإن عامل الإضافة الأحادي يحولها إلى رقم
على سبيل المثال:
// No effect on numbers
let x = 1;
alert( +x ); // 1
let y = -2;
alert( +y ); // -2
// Converts non-numbers
alert( +true ); // 1
alert( +"" ); // 0
فهو بالفعل يقوم بنفس عمل دالة Number(...) ولكنه أقصر
فعادة ما يكون هناك حاجة لتحويل الكلمات إلى أرقام على سبيل المثال ، إذا كنا نحصل من خلال استمارة HTML على قيم ،فإنها عادة ما تكون على شكل كلمات ماذا لو أردنا جمعهم سويا ؟
معامل الزائد الثنائي سيقوم بجمعهم ودمجهم ككلمات:
let apples = "2";
let oranges = "3";
alert( apples + oranges ); // "23", the binary plus concatenates strings
فإذا أردنا جمعهم كأرقام ، فإننا بحاجة إلى تحويلهم ثم جمعهم:
let apples = "2";
let oranges = "3";
// both values converted to numbers before the binary plus
alert( +apples + +oranges ); // 5
// the longer variant
// alert( Number(apples) + Number(oranges) ); // 5
من وجهة نظر حسابية أو رياضياتية ، قد تبدو كثرة الزوائد شيئا غريبا لكن بالنسبة للمبرمج فلا يوجد شيء غريب : فالزوائد الأحادية تحول الكلمات إلى أرقام أولا ثم الزائد الثنائية تجمعهم معا
لماذا يتم تطبيق الزوائد الأحادية على القيم قبل الزوائد الثنائية ؟ كما سنرى فإن ذلك بسبب الأسبقية الأعلى
##أسبقية العوامل
إذا كان التعبير يحتوي على أكثر من عامل واحد ، فسيتم تحديد أمر التنفيذ من خلال * أسبقيته * ، أو بعبارة أخرى ، ترتيب الأولوية الافتراضي للعوامل.
من المدرسة ، نعلم جميعًا أنه يجب حساب الضرب في التعبير 1 + 2 * 2 قبل الإضافة. هذا هو بالضبط الأسبقية. ويقال أن الضرب له * أسبقية أعلى من الإضافة.
تلغي الأقواس أي أسبقية ، لذلك إذا لم نكن راضيين عن الترتيب الافتراضي ، فيمكننا استخدامها لتغييره. على سبيل المثال ، اكتب (1 + 2) * 2.
هناك العديد من العوامل في JavaScript. لكل عامل رقم أسبقية مطابق. يتم تنفيذ واحد مع العدد الأكبر أولاً. إذا كانت الأسبقية هي نفسها ، فسيكون أمر التنفيذ من اليسار إلى اليمين.
إليك مقتطف من [جدول الأسبقية] (https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (لست بحاجة إلى تذكر ذلك ، ولكن لاحظ أن عوامل التشغيل الأحادية أعلى من الخيارات الثنائية المقابلة) منها):
| الأسبقية | الاسم | تسجيل |
|---|---|---|
| … | … | … |