تعلّم البرمجة بلغة كوتلن (12): أنواع البيانات Data Types

استمع إلى المقال
|
اطلعنا في الدرس السابق، على المتغيرات وأهميتها وقواعدها وكيفية إعلانها في لغة كوتلن. وقلنا أنه لدينا العديد من أنواع البيانات التي يمكننا إسنادها للمتغير في كوتلن. في هذا الدرس سنستعرض بعض أشهر هذه الأنواع وأكثرها استخدامًا، تفصيليًا.
في حياتنا اليومية، نستخدم العديد من هذه الأنواع، مثل: النصوص والأعداد والحروف. الأعداد نفسها تنقسم إلى أنواع عديدة، منها عدد صحيح Integer number، ومنها عدد كسري Fraction Number وغيرها.
ونحن نعلم أيضًا أن الأعداد والنصوص مثلًا، نوعان مختلفان تمامًا. كيف لنا أن نعرف هذا؟ حسنًا، يمكننا إجراء عمليات حسابية (مثل الضرب والطرح والجمع) على الأعداد ولكن ليس على النصوص. كأن نجمع عدد كسري مع رقم صحيح:
9 + 3.5
وبالطبع لا يمكننا القيام بالعمليات الحسابية بين نص وعدد أو رقم، كالتالي:
3.5 + “Kotlin”
تتعامل كوتلن مع البيانات، بطريقة مشابهة لتعاملنا معها في حياتنا اليومية. هذا هو السبب في أن كل متغير في لغة كوتلن، له نوع يحدد العمليات المحتملة التي يمكننا إجراؤها على هذا المتغير والقيم التي يمكننا تخزينها فيه.
تنقسم أنواع البيانات الأساسية في كوتلن، إلى عدة مجموعات حسب مضمونها. تعمل الأنواع من نفس المجموعة بشكل مشابه، ولكن لها أحجام مختلفة، وتمثل نطاقات مختلفة من القيم.
يوجد عدة أنواع من الأعداد الصحيحة Integers والكسرية Fractional في كوتلن.
تمثل الأعداد الصحيحة، بأربعة أنواع من أكبر عدد إلى أصغر عدد: نوع Long، نوع Int، نوع Short، نوع Byte. هذه الأنواع الأربعة للأعداد الصحيحة، لديها أحجام ونطاقات مختلفة للأعداد.
يتم حساب نطاقات هذه الأنواع الأربعة بالمعادلة:
من العدد (2n-1)- إلى العدد 1-(2n-1)
المقصود بـ n عدد البتات bits. النطاق يشمل الصفر لذا يتم إنقاص واحد في آخر النطاق. وعند تطبيق المعادلة على الأنواع الأربعة، سنجد أنها تمثل النطاقات التالية:
-(28-1) = -(27) = -128
(28-1)-1 = (27)-1 = 127
بالتالي، إذا عرّفنا متغير من نوع Byte، علينا أن نضع به الأعداد التي يشملها هذا النطاق فقط. أقل عدد ممكن هو -128 وأكبر عدد ممكن هو 127. مثل: 127-، 126- … 0 … 125، 126، 127. أي عدد خارج هذا النطاق لا يستطيع البايت أن يمثله. الأعداد مثل: 129-، -130، أو 128، 129 … الخ، نضعها في متغير من نوع Short لأنها خارج نطاق الـ Byte.
عمليًا، النوعين الأخيرين Int و Long، هما أكثر الأنواع استخدامًا. قد يكفي استخدام الـ Int، لأنه يمكننا من أن نضع عدد هائل من الأعداد يكون كافيًا في أغلب الاستعمالات. ولكن بالطبع يمكننا استخدام الـ Long والذي يمكنه تمثيل أعداد أكبر حتى من الـ Int.
لن نواجه مشكلة عند إسناد الأرقام الصغيرة للمتغيرات من نوع Byte و Short. ولكن عند محاولة إسناد أرقام كبيرة لهذين النوعين، حدثت المشكلة. كما نرى في الصورة التالية، أن برنامج IntelliJ احتج على إسناد الرقم مليون (يمكن كتابته 000_1000 هكذا في كوتلن) إلى هذين النوعين بوضع خط أحمر تحت الرقم. وبالطبع يمكن إسناد هذا الرقم إلى متغير من نوع Int أو Long بدون أية مشكلة.
ملاحظة أخرى من الصورة أعلاه، وهي أن كلمة Int هي الوحيدة بين باقي الأنواع التي تظهر باللون الرمادي. هذا لأنه عند إسناد رقم ما إلى متغير، فسيكون نوعه افتراضيًا Int، ما لم نكتب صراحة نوع آخر. ويظهر باللون الرمادي، ليخبرنا البرنامج بأنه لا داعي لكتابته.
تُمثل الأعداد الأرقام العشرية decimal digits بنوعين في كوتلن، نوع Float، ونوع Double. هذين النوعين، يختلفان في الحجم، وأيضًا في عدد الأرقام بعد الفاصلة العشرية.
عند إسناد أي عدد بأرقام عشرية إلى متغير، ستعتبر كوتلن تلقائيًا أن نوعه هو Double. للإعلان عن متغير من نوع Float، يجب علينا كتابة حرف F أو f بعد الرقم الأخير من العدد، كما يظهر في الصورة التالية:
يمكننا استخدام كوتلن نفسها لمعرفة أقل عدد وأكبر عدد يمكن للأنواع أعلاه تمثيله، بكتابة اسم النوع ثم نقطة بعدها MIN_VALUE لأقل عدد، و MAX_VALUE لأكبر عدد، ثم طباعة الناتج باستخدام وظيفة ()println
، كالتالي:
يمكننا اتباع نفس الطريقة مع باقي الأنواع، فقط نقوم بتغيير اسم النوع.
لطباعة حجم النوع، نكتب اسم النوع ثم نقطة بعدها SIZE_BYTES لمعرفة حجمه بالبايت، أو SIZE_BITS لمعرفة حجمه بالبت، كالتالي:
وبالطبع يمكن اتباع نفس الطريقة مع باقي الأنواع.
تمتلك كوتلن من ضمن أنواع البيانات الأساسية، النوع Char. إذا وضعنا حرف أو رقم أو حتى رمز بين علامتي تنصيص مفردة (‘ ‘)، ستعتبره كوتلن من النوع Char. حجم هذا النوع مشابه لحجم نوع الـ Short ويساوي 2 بايت Byte، أو 16 بت Bit. مع العلم، أنه يمكننا وضع حرف أو رقم أو رمز واحد فقط، بين علامتي التنصيص المفردة، كالتالي:
كل المتغيرات في الشفرة أعلاه، تعتبر من نوع Char. حتى الرقم والذي لا يمكننا إعتباره رقم في هذه الحالة، بل حرف. والمسافة أيضًا إذا تم وضعها بين العلامتين.
نوع البيانات هذا، يمثل قيمتين متعاكستين. صح true أو خطأ false. نعلن عن متغير من هذا النوع لاستخدامه لاحقًا داخل شفرتنا. حجم هذا النوع غير محدد بدقة.
مثال على متغيرات من هذا النوع:
سيتضح هذا النوع أكثر عند استخدامه في الشروط وغيرها، في دروس لاحقة.
من أكثر أنواع البيانات الأساسية التي سنستخدمها بكثرة في شفراتنا بلغة كوتلن. هذا النوع يتكون من سلسلة من المحارف قد تمثل كلمات أو جمل أو أرقام أو رموز داخل علامتي تنصيص مزدوجة (” “)، بخلاف نوع الـ Char.
مثال على متغيرات من هذا النوع:
عند الإعلان عن متغير ما في كوتلن، وإسناد قيمة له، ستستنتج كوتلن نوع هذا المتغير حسب نوع القيمة المسندة إليه. فمثلاً، لو كان لدينا متغيرين، نسند لأحدهما جملة نصية ونسند للآخر عدد، كالتالي:
وبعدها وضعنا المتغيرين في برنامج كوتلن، وأردنا تنفيذ بعض العمليات عليهما، وطباعة نتائج العملية، كالتالي:
هذا البرنامج لن يتم تجميعه حتى ولن يتنفذ. والسبب أننا نحاول جمع متغيرين من نوعين لا يمكن جمعهما. لأن كوتلن تعرفت تلقائيًا على أن المتغير text نوعه نصي String، والمتغير number نوعه عدد صحيح Int (اختصارًا لـ Integer)، في سطر الإعلان عنهما. فيما يعرف بعملية الاستدلال على النوع type inference، والتي تتميز بها كوتلن.
ستستنتج كوتلن نوع المتغير، إذا اتبعنا طريقة الإعلان عن المتغيرات ، والتي ذكرناها في الدرس السابق، كالتالي:
var/val identifier = initialization
هناك طريقة أخرى يمكننا استخدامها، وهي كتابة نوع المتغير صراحة، كالتالي:
var/val identifier: Type = initialization
في هذه الطريقة، نضع نقطتين ( : ) ثم النوع Type بعد اسم المتغير. نلاحظ أيضًا، أن النوع Type، يبدأ بحرف كبير uppercase. يمكننا إعادة كتابة المتغيرات أعلاه، كالتالي:
وبالرغم من أننا كتبنا نوع كل متغير بأنفسنا، ولكن كوتلن تعرف أيضًا نوع كل متغير ولن تسمح لنا بفعل التالي:
هذا الأمر سيوقف تنفيذ البرنامج، وينتج لنا الخطأ التالي في برنامج IntelliJ:
Type mismatch: inferred type is Int but String was expected
الخطأ يقول بكل وضوح، أن نوع المتغير المعلن String غير متطابق مع القيمة التي نحاول إسنادها إليه، والتي تعرفت عليها كوتلن على أنها قيمة من نوع Int. لأن نوع البيانات النصي String في كوتلن، لا بد أن يكون بين علامتي تنصيص ( ” ” ). ستقبل كوتلن الإسناد أعلاه إذا وضعنا العدد بين علامتي تنصيص:
ففي هذه الحالة لم يعد عدد صحيح من نوع Int، بل نوع نصي String، لوجوده بين علامتي تنصيص.
هذا الدرس هو جزء من سلسلة تعليم مبادئ البرمجة بلغة كوتلن. لمُتابعة الدروس منذ البداية ومُشاهدة فهرس المحتويات يمكنك الانتقال إلى الدرس الأول من هنا.
هل أعجبك المحتوى وتريد المزيد منه يصل إلى صندوق بريدك الإلكتروني بشكلٍ دوري؟
انضم إلى قائمة من يقدّرون محتوى إكسڤار واشترك بنشرتنا البريدية.