المعاملات البرمجية Operators تمثل الرموز التي تعلمناها في الرياضيات للقيام بالعمليات الحسابية مثل الجمع (+) والطرح (-) والضرب (*) والقسمة (/) والمقارنة (>) ويساوي (=) التي تعني في البرمجة تعيين قيمة. 

في لغة البرمجة تستخدم هذه الرموز لمنح القيم او التحقق منها او تعديلها او دمجها او مقارنتها. وسأذكر أمثله على كل حالة واستخدام خلال هذا الموضوع.

منح القيم 

كما عرفنا في الدرس الماضي للمتغيرات والثوابت فإن كل البرمجة تدور حول تخزين البيانات في الذاكرة والتعامل معها لاحقاً. وشرحنا ان لتخزين البيانات نقوم باستخدام المتغيرات مثلاً كحاوية لحفظ البيانات كقيمة ممنوحة لها. ولمنح القيم ببساطة نستخدم رمز = ونضع القيمة على يمينة واسم المتغير على يساره.

var name = "robot" 

ايضاً سنستخدم الرمز = اذا اردنا تغيير قيمة اي متغير ادخلناه وحفظناه مسبقاً

var age = 29 // القيمة الاساسية للمتغير حينما قمنا بتعريفه  age = 25 // هنا تم تغيير قيمة المتغير السابق  age = 22 // يمكن اعادة تغيير القيمة مجدداً ودائماً كما تريد

العمليات الحسابية

باستخدام الرموز الحسابية + - * / يمكنك اجراء لعمليات الحسابية بين القيم. كما يمكنك ايضاً اجرائها بين المتغيرات. ساضع الكثير من الامثلة مع تعليقات تشرحها حتى توضح كل الخيارات المتاحة امامك مع هذه العمليات في لغة البرمجة. وكل الامثله للتوضيح فقط يعني استخدم مخيلتك في ابتكار اي عمليات على المتغيرات او القيم التي ستنشأها اثناء تعلمك واستخدامك لـ playground. 

var a = 5 * 8 // هنا نقول لسويفت ان تاخذ نتيجة عملية الضرب وتضعها كنتيجة للمتغير الجديد a  a = a + 5  // هنا حدثنا قيمة المتغير السابق الى نفس القيمة السابقة ولكن مضاف عليها 3  a += 5  // هنا قمنا بنفس الفكرة التي في المثال السباق بحيث اضفنا 5 الى قيمة المتغير السابق ويمكن استخدام هذا الاسلوب مع كافة الرموز الحسابية  a -= 5  // ننقص 5 من قيمة المتغير ونحفظ النتيجة كقيمته الجديدة  a *= 5  // نضرب قيمة المتغير في 5 ونحفظ النتيجة كقيمته الجديدة  a /= 5  // نقسم قيمة المتغير على 5 ونحفظ النتيجة كقيمته الجديدة  var b = a / 2 // هنا نأخذ قيمة المتغير a ونقسمها على 2 ثم نضع النتيجة كقيمة للمتغير الجديد b  var c += b // هنا علامة += تعني ان تاخذ قيمة b وتضعها كقيمة للمتغير الجديد c  var d = c + b // هنا ننشئ متغير جديد يسمى d ونضع فيه مجموع المتغيرين السابقين c و b لتصبح قيمة للمتغير الجديد

ايضاً يكنك استخدام الرمز + مع النصوص Strings لدمجها كما في المثال التالي:

var title = "Hello world!" var author = "iOS Apps Robot" var category = "Swift"  var postDetails = title + " by: " author + " in: " + category  print(postDetails)  /* هذا الكود سيطبع النص التالي: Hello world! by: iOS Apps Robot in: Swift */ 

طباعة المتغيرات مع Strings

ولاننا نتحدث الان عن دمج النصوص والمتغيرات فيمكن استخدام طريقة افضل في سويفت للقيام بهذا الامر وهي String interpolation والتي تعني ببساطة اتاحة استخدام المتغيرات والثوابت حتى الرقمية مثل Int او Double داخل العبارات النصية Strings.

الطريقة ببساطة ان تدخل المتغير في النص بداخل قوسين تبدأ بخط مائل \ كما في المثال التالي:

var name = "iOS Apps Robot" var age = 29 var country = "Saudi Arabia"   print("My name is \(name), I'm \(age) years old and I'm from \(country).")  /* هذا الكود سيطبع النص التالي: My name is iOS Apps Robot, I'm 29 years old and I'm from Saudi Arabia. */

معامل % Modulus

احد المعاملات المفيدة لك كمبرمج هو معامل حساب modulu الذي يرمز له بالرمز (%) والذي يمكن وصفه باختصار بانه معامل يعطيك المتبقي من نتيجة قسمة رقمين على بعض. مثلاً حينما تقسم 9 على 3 فإن المتبقي سيكون 0 ولكن حينما تقسم 10 على 3 فإن المتبقي 1 لان 10 حينما تقسمها على 3 مرات ستكون 3-3-3 وسيتبقى 1 فقط هو نتيجة معامل modulu. مثال اخر هو 14%5 سيكون المود 4 لان 14 حينما تقسمها على 5 سيكون لديك 5-5 ويتبقى 4 فقط. يوجد طرق اخرى اسهل لحساب ال modulu يدوياً ولكن الاهم هو ان تعرف استخدامها في سويفت لانها ستريحك من الحساب اليدوي. 

44 % 3   // هذا الكود سيعطي نتيجة 2

ترتيب العمليات

ترتيب العمليات الحسابية في علوم الرياضيات وبرمجة الحاسوب هي قاعدة تستعمل لتوضيح أي العمليات الحسابية يجب تنفيذها أولا في جملة حسابية معينة.

مثلاً اذا كتبت كود يتضمن قسمة / و ضرب * وزائد + فإن سويفت كأي لغة برمجية اخرى ستستخدم الترتيب الافتراضي المعروف في علم الرياضيات بأن الضرب والقسمة تملك اولوية اعلى على الجمع والطرح. والاقواس تملك اولوية اعلى من الجميع بالتالي استخدامها سيجعل سويفت تقوم بالعملية الحسابية التي تريدها تماماً. راجع معي الترتيب بصورة اخرى للعمليات الشائعة والأساسية كالتالي:

  1. العمليات داخل الأقواس
  2. الضرب والقسمة
  3. الجمع والطرح

بإمكانك زيادة هذه الصفحة ورؤية جدول الترتيب الذي يتضمن كل العمليات.

لنطبق القاعدة في المثال التالي:

var x = 2 var y = 3 var z = 5  x + y * z // هذا الكود سينتج لنا 17 لأن الضرب اقوى من الجمع بالتالي سويفت قامت اولاً بضرب y في z ثم اضافة النتيجة الى x   (x + y) * z // هذا الكود سينتج لنا 25 لأن الأقواس تملك الاولوية الاعلى بالتالي سويفت تقوم بالجمع أولاً ثم تأخذ النتيجة لتضربها في z

تحويل البيانات الرقمية

في سويفت لا يمكن دمج متغيران يملكان نوعين مختلفان من البيانات كان تمدج Int مع Double. المثالي التالي سيظهر لك خطأ في Xcode:

let a = 5 let b = 2.5 let c = a + b

الحل يكون بأن تطلب من سويفت ان تنشئ متغير جديد يتضمن طلبك بتحويل قيمة a الى Double وبالتالي يمكن دمجها مع قيمة b. ستخبر سويفت بذلك من خلال اضافة المتغير المراد تحويل بداخل قوسين تبدأ بنوع البيانات الذي تريد التحويل اليه. Double(a) في هذه الحالة. شاهد المثال لتتضح العملية:

let a = 5 let b = 2.5 let c = Double(a) + b


مقارنة البيانات

في سويفت يمكن مقارنة البيانات ببعضها البعض من خلال استخدام رموز المقارنة المعروفة في الرياضيات أكبر من > او اصغر من < وأكبر من او يساوي >=. اضافة الى رمز == الذي يقوم بالتحقق هل القيمة تساوي او لا تساوي. ودائماً النتائج في عملية المقارنة ستكون اما true او false وهذا يجعل رمز المقارنات اساسية وهامة في العمليات الشريطة التي سنشرحها في الدرس القادم.

الان شاهد الامثلة التالية على كل حالات المقارنات:

var a = 1.1 var b = 2.2 var c = a + b // قيمة c هي مجموع a و b يعني 3.3  c > 3 // النتيجة ستكون true لان c اكبر من 3  c >= 3 // النتيجة ستكون true لان c اكبر من 3  c > 4 // النتيجة ستكون false لان c أصغر من 4 وليست اكبر  c < 4 // النتيجة true لان c بالفعل اصغر من 4  c == a + b // النتيجة true لان c بالفعل تساوي مجموع a و b  c != a + b // هنا النتيجة ستكون false لان اضافة علامة التعجب قبل علامة يساوي سيجعل الملية عبارة عن تحقق بالنفي، أي كأنك تسأل سويفت هل c لا تساوي مجموع a و b وهنا الاجابة خطأ لانها تساوي ذلك.  var name = "Robot" name == "Robot" name != "Robot" // يمكنك ايضاً مقارنة النصوص ولكن يجب الانتباه الى حساسية حالة الاحرف لانها ستكون مهمة والمسافات ايضاً.

تقريباً هذا كل شيئ ينبغي عليك معرفته على المعاملات البرمجية. الى اللقاء في الدرس القادم.



---------------------------------

# تحديث1: أحاول في مجموعة سلاك اعداد تمارين تفاعلية من اعدادي واضيف عليها تمارين كتاب Apple التعليمي حتى ترسخ الفهم للمبتدئين تماماً وسأضع هنا التمارين الخاصة بهذا المقال. بإمكانك ارسال الحل لنا في مجموعة سلاك اطلب دعوة من حسابي في تويتر.


التمرين الاول:  في playground قم بإنشاء 2 متغيرات جديدة كالتالي: - number1 بقيمة 4 - number2 بقيمة 6 ثم قم بطباعة 3 عبارات هي كالتالي: العبارة الاولى تتضمن مجموع المتغيرين السابقين معاً العبارة الثانية تتضمن نتيجة ضرب المتغيرين السابقين معاً العبارة الثالثة تتضمن modulu من قسمة المتغيرين السابقين معاً   --------------------  التمرين الثاني:  قم بتعريف ثلاثة متغيرات جديدة كالتالي: - firstName ويحمل القيمة Ahmed - lastName ويحمل القيمة Khaled - age ويحمل القيمة 20  الان قم بطباعة عبارة نصيبة تتضمن كل هذه المعلومات بداخلها وعلى سطر واحد.   -------------   اسئلة اضافية  // ماهي قيمة myNumber بنهاية هذا الكود  let x = 2 let y = 4  let z = 6 let myNumber = x + y + z    // ماهي قيمة myNumber بنهاية هذا الكود  let x = 2 let y = 4  let z = 6 let myNumber = x + y * z    // ماهي قيمة myNumber بنهاية هذا الكود  let x = 2 let y = 4  let z = 6 let myNumber = x * y - z    // ماهي قيمة myNumber بنهاية هذا الكود  let x = 2 let y = 4  let z = 6 let myNumber = (x + y) + z   // ماهو الخطأ في الكود التالي  let x = 14 let y = 2.5  let result = x * y   // كم ستكون نتيجة المتغير myScore بنهاية الكود التالي  var myScore = 36 myScore += 100