Ruby هي لغة برمجة معروفة. تهدف إلى تحسين البساطة والإنتاجية. وهي أيضاً لغة برمجة كائنية التوجه بالكامل. بالإضافة إلى ذلك، تأتي Ruby ببنية كتابة أنيقة يسهل قراءتها وكتابتها بشكل طبيعي.
تتطلب أي برمجة إدارة أنواع مختلفة من البيانات. يصف نوع البيانات فئة معينة من البيانات. ويخبر الآلة بكيفية التعامل مع البيانات في البرنامج. تعد أنواع البيانات حاسمة لتحديد ما يمكن فعله بالبيانات (بما في ذلك العمليات التي يمكن إجراؤها). في هذا البرنامج التعليمي، سنقوم بـ التعمق في أنواع البيانات المتاحة في Ruby. سنستكشف أيضاً الكتابة الديناميكية. باستخدام هذه الميزة، يمكن لـ Ruby تحديد نوع بيانات المتغير تلقائياً دون الإعلان عنه صراحةً. فلنبدأ!
المتطلبات الأساسية
لممارسة وتطبيق الخطوات الموضحة في هذا الدليل، ستحتاج إلى المكونات التالية:
- نظام Linux مهيأ بشكل صحيح. تعرف على المزيد حول إعداد خادم Ubuntu شخصي على CloudSigma.
- بيئة تطوير Ruby مهيأة بشكل صحيح. تحقق من الوثائق الرسمية لتثبيت Ruby على Ubuntu (باستخدام APT).
أنواع البيانات في Ruby
تتميز Ruby بجميع أنواع البيانات الشائعة التي ستواجهها في أي لغة برمجة: الأعداد الصحيحة، والأعداد العشرية، والسلاسل النصية، والمصفوفات، والرموز، والهاش، وما إلى ذلك. بعد ذلك، سنقدم نظرة عامة على كيفية العمل مع أنواع البيانات المختلفة في Ruby.
الخطوة 1 – الأعداد الصحيحة
على غرار الرياضيات، الأعداد الصحيحة في برمجة الكمبيوتر هي أعداد كاملة. يمكن أن تكون القيمة موجبة أو سالبة أو 0. نطاق القيم هو كما يلي:
|
1 |
{-∞, …, -1, 0, 1, …, ∞} |
حان الوقت لتجربة الأعداد الصحيحة في Ruby. المثال الأول هو طباعة عدد صحيح بسيط على الشاشة:
|
1 2 |
print 99 print "\n" |
بعد ذلك، سنعمل مع متغير عدد صحيح. هنا، المتغير sample_int يحتوي على قيمة عدد صحيح (99) ووظيفة print تطبع قيمة المتغير على الشاشة:
|
1 2 3 |
sample_int = 99 print sample_int print "\n" |
يمكننا أيضاً إجراء عمليات حسابية باستخدام الأعداد الصحيحة. يوضح المثال التالي عملية جمع بسيطة لعددين صحيحين:
|
1 2 3 |
sample_int = 99 + 100 print sample_int print "\n" |
عندما نعمل مع أرقام كبيرة، غالباً ما نستخدم الفواصل (,) لتسهيل قراءتها. على سبيل المثال، يُكتب المليون (1000000) كـ 1,000,000 لتحسين القراءة. في حين أن استخدام الفواصل محظور، فإن Ruby تسمح باستخدام الشرطات السفلية ( _) كمحدد. ألقِ نظرة على المثال التالي:
|
1 2 3 |
sample_int = 1_000_999 print sample_int print "\n" |
يؤدي استخدام الشرطات السفلية إلى تحسين قابلية قراءة الكود، خاصة عند التعامل مع قيم الأعداد الصحيحة الكبيرة.
الخطوة 2 – الأعداد العشرية
يمثل العدد العشري (أو float باختصار) عدداً حقيقياً. على غرار التعريف الرياضي، يمكن أن تكون الأعداد الحقيقية نسبية أو غير نسبية. في Ruby، العدد العشري هو في الأساس رقم يحتوي على علامة عشرية.
فلنحاول طباعة قيمة عشرية على الشاشة:
|
1 2 |
print 55.66 print "\n" |
يوضح المثال التالي الإعلان عن متغير عشري:
|
1 2 3 |
sample_float = 55.66 print sample_float print "\n" |
يمكننا أيضاً إجراء عمليات حسابية مختلفة على القيم والمتغيرات العشرية. يوضح المثال التالي عملية جمع بسيطة لعددين عشريين:
|
1 2 3 |
sample_float = 55.66 + 99.222 print sample_float print "\n" |
ماذا لو أضفنا عدداً عشرياً وعدداً صحيحاً؟ ستكون القيمة الناتجة عشرية. في المثال التالي، على الرغم من أن 55.0 هو عدد كامل، إلا أنه يُعامل كعدد عشري:
|
1 2 3 |
sample_float = 55.0 + 10 print sample_float print "\n" |
الخطوة 3 – القيم المنطقية
القيم المنطقية تمثل قيم الحقيقة لفرع المنطق في الرياضيات. في Ruby، يتم تمثيل أنواع البيانات المنطقية بقيمتين: true و false:
-
أكبر من
-
100 > 99: true
-
99 > 100: false
-
-
أصغر من
-
500 < 999: true
-
999 < 500: false
-
-
يساوي
-
10 == 10: true
-
9 == 99: false
-
على غرار الأرقام، يمكننا أيضاً تخزين true أو false قيمة في متغير. يوضح المثال التالي هذه الميزة:
|
1 2 3 |
result = 9 == 99 print result print "\n" |
الخطوة 4 – السلاسل النصية
في البرمجة، يتم تمثيل السلسلة النصية كمجموعة متتالية من الأحرف (الحروف والأرقام والرموز). في لغة Ruby، توجد السلاسل النصية داخل علامات اقتباس مفردة ( ') أو علامات اقتباس مزدوجة ( "). لقد قمنا بالفعل بـ تغطية استخدام السلاسل النصية في Ruby بالتفصيل، لذا سيكون هذا القسم قصيرًا.
المثال التالي هو برنامج hello world بسيط في Ruby:
|
1 |
print "hello world!\n" |
يمكننا أيضاً تخزين السلاسل النصية في متغيرات. يتضمن المثال التالي أيضاً دمج السلاسل النصية:
|
1 2 |
username = "Cloudsigma" print "hello, " + username + "!\n" |
الخطوة 5 – المصفوفات
المصفوفة هي بنية بيانات يمكنها تخزين مجموعة ذات حجم ثابت من العناصر من نفس نوع البيانات. ويمكن تصورها أيضاً كمجموعة من المتغيرات من نفس نوع البيانات. إنها واحدة من أكثر بنيات البيانات أساسية في معظم لغات البرمجة الحديثة.
في لغة Ruby، يتم تعريف المصفوفة على النحو التالي:
|
1 |
[value_1, value_2, …, value_N] |
من الممكن إنشاء مصفوفة من أي أنواع بيانات أخرى ناقشناها حتى الآن (أعداد صحيحة، أعداد عشرية، وسلاسل نصية). إليك بعض الأمثلة:
-
أعداد صحيحة: [-5, 0, 5]
-
أعداد عشرية: [-9.99, -6.99, -3.99, 0, 3.99]
-
سلاسل نصية: [“the”, “quick”, “brown”, “fox”]
يطبق المثال التالي كل هذه الأنواع من المصفوفات:
|
1 2 3 4 5 6 |
print [-5, 0, 5] print "\n" print [-9.99, -6.99, -3.99, 0, 3.99] print "\n" print ["the", "quick", "brown", "fox"] print "\n" |
لاحظ أنه عندما تواجه دالة الطباعة (print) مصفوفة، فإنها تطبع المصفوفة بأكملها على الشاشة. لمزيد من السهولة، ستتعامل غالباً مع المصفوفات كمتغيرات. لنقم بتحديث الكود:
|
1 2 3 4 5 6 7 8 9 10 |
array_int = [-5, 0, 5] print array_int print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string print "\n" |
الآن، يمكننا العمل مع العناصر الفردية للمصفوفات:
|
1 2 3 4 5 6 7 8 9 |
array_int = [-5, 0, 5] print array_int[2] print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float[1] print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string[3] print "\n" |
لاحظ أنه في لغة Ruby، يبدأ فهرس المصفوفات بـ 0.
للتسهيل، تأتي المصفوفات في Ruby مع التابعين .first و .last اللذين يطبعان العنصرين الأول والأخير:
|
1 2 3 4 |
array_float = [-9.99, -6.99, -3.99, 0, 3.99] puts array_float.first puts array_float.last print "\n" |
في لغة Ruby، تتمتع المصفوفات بميزة أخرى مثيرة للاهتمام. حيث يمكنها الاحتفاظ بأنواع مختلفة من البيانات في نفس الوقت. على سبيل المثال، يمكنك تخزين سلاسل نصية، ورموز (symbols)، وحتى مصفوفات أخرى:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mixed_array = [ "hello", 99.99, "world", [ "the", "quick", "brown", "fox" ] ] print mixed_array print "\n" print mixed_array[3] print "\n" |
الخطوة 6 – الرموز
في لغة Ruby، الـ رمز هو نوع بيانات خاص يعمل كعلامة أو معرف. الرموز غير قابلة للتغيير، مما يعني أنه لا يمكن تغييرها. تظهر الرموز كما لو كانت تعلن عن متغيرات بدون أي قيمة.
إليك مثال على الرمز:
|
1 |
:time_zone |
بشكل عام، تُستخدم الرموز لتحديد شيء مهم. ومع ذلك، في الحالات الأخرى، تكون السلاسل النصية كافية وزيادة.
تتعامل لغة Ruby، لكونها لغة كائنية التوجه، مع كل شيء ككائن (بما في ذلك السلاسل النصية) بموقع ذاكرة فريد خاص به، حتى لو كانت السلاسل النصية متطابقة. ومع ذلك، عندما تشير إلى رمز، فإنه يكون نفس الكائن في كل مكان في البرنامج، ونفس موقع الذاكرة.
الخطوة 7 – جداول التجزئة (Hashes)
جدول التجزئة (hash) هو مجموعة تشبه القاموس من المفاتيح والقيم. غالبًا ما تُستخدم جداول التجزئة لتخزين البيانات ذات الصلة، على سبيل المثال، معلومات حول مستخدم.
إليك مثال سريع على جدول التجزئة. لقد أنشأنا جدول تجزئة user_info يحتوي على اسم المستخدم وكلمة المرور للمستخدم:
|
1 2 3 4 5 6 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info print "\n" |
لاسترداد قيم زوج المفتاح والقيمة، يجب علينا استخدام المفتاح. يوضح المثال التالي هذه العملية:
|
1 2 3 4 5 6 7 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info["username"] print "\n" |
تسمح Ruby أيضًا بتعريف جدول التجزئة باستخدام صيغ مختلفة قليلاً ( : بدلاً من =>):
|
1 2 3 4 5 6 |
user_info = { username: "HelloWorld999", password: "password123" } print user_info[:password] print "\n" |
بنية الصيغة هذه مشابهة للصيغة المستخدمة في لغات أخرى، على سبيل المثال، JavaScript. في بنية الصيغة هذه، يتم تعريف المفاتيح كرموز. لهذا السبب بدلاً من استخدام "username"، فإننا نستخدم: username للوصول إلى القيمة.
الكتابة الديناميكية (Dynamic Typing)
ربما لاحظت بالفعل أنه عند الإعلان عن متغير، لا يتعين علينا تعيين نوع بيانات بشكل صريح. بدلاً من ذلك، تحدد قيمة المتغير نوع البيانات. تستخدم Ruby الكتابة الديناميكية (dynamic typing) حيث يتم التحقق من النوع في وقت التشغيل. في المقابل، يتم تحديد أنواع البيانات أثناء الترجمة في لغات البرمجة ذات الكتابة الاستاتيكية (static typing) (مثل C/C++، على سبيل المثال).
في المثال التالي، جميع القيم المسندة إلى المتغير dyn_var صالحة:
|
1 2 3 4 5 |
dyn_var = 123 dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" dyn_var |
في اللغات ذات الكتابة الديناميكية، نحن أحرار في إعادة استخدام متغير موجود لتخزين أنواع بيانات مختلفة. هنا، تم تحديث المثال السابق لتوضيح هذه الظاهرة:
|
1 2 3 4 5 6 7 |
dyn_var = 123 puts dyn_var dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" puts dyn_var dyn_var |
كما يوضح هذا المثال، في كل مرة يتم فيها تعيين قيمة جديدة، يتغير نوع بيانات dyn_var أثناء التشغيل. هذا مفيد عند تحويل نوع بيانات إلى آخر. يوضح المثال التالي ذلك:
|
1 2 3 4 |
print "enter length: " length = gets.chop length = length.to_f puts length |
هنا،
-
نظرًا لأن مدخلات لوحة المفاتيح هي سلاسل نصية، فإن length تكون سلسلة نصية في البداية.
-
بما أن القيمة المطلوبة هي عدد عشري (float)، فإننا نقوم بتحويل قيمة السلسلة النصية إلى عدد عشري باستخدام دالة to_f .
-
بسبب تغيير القيمة، يتم تعيين نوع البيانات العشري (float) لـ length. هذا هو ما نراه عند طباعة قيمته على الشاشة.
ماذا سيحدث إذا حاولنا خلط نوعين مختلفين من البيانات معًا؟ ستعرض Ruby خطأً. ألقِ نظرة:
|
1 |
print 9 + "77" |
تحديد نوع البيانات
في Ruby، يتم التعامل مع كل شيء ككائن. كل كائن في Ruby يأتي مع الطريقة class. عند استدعائها، تخبرنا هذه الطريقة بنوع البيانات الخاص بالمصدر. إليك بعض الأمثلة على استخدام class طريقة:
|
1 2 3 4 |
puts 55.class puts (55.55).class puts true.class puts nil.class |
طريقة أخرى لمعرفة نوع البيانات هي استخدام kind_of? طريقة. تقوم بالتحقق من نوع بيانات الكائن مقابل نوع البيانات المطلوب وتُرجع قيمة منطقية. تحقق من ذلك في المثال التالي:
|
1 2 |
puts 55.kind_of?(Float) puts 55.kind_of?(Integer) |
وبالمثل، هناك طريقة أخرى is_a? تقارن نوع البيانات وتُرجع قيمة منطقية. الفرق الوحيد هو تسمية الطريقة. ومع ذلك، قد تكون مفضلة لأنها أسهل قليلاً على المطورين لقراءتها وفهمها. قم بتحديث المثال السابق بـ is_a?:
|
1 2 |
puts 55.is_a?(Float) puts 55.is_a?(Integer) |
أفكار نهائية
يتطلب العمل مع أي لغة برمجة فهمًا جيدًا لأنواع البيانات التي تدعمها. في هذا الدليل، استكشفنا أنواع البيانات الأكثر شيوعًا المستخدمة في برمجة Ruby. لقد ناقشنا وعرضنا الأعداد الصحيحة، والأعداد العشرية، والسلاسل النصية، والرموز، والقيم المنطقية، وجداول الهاش (مع أمثلة).
ألقِ نظرة على المزيد من البرامج التعليمية من مدونتنا والتي ستساعدك على استكشاف Ruby:
- تثبيت Ruby on Rails باستخدام RVM على Ubuntu 20.04
- إعداد Ruby on Rails مع PostgreSQL
- استخدام MySQL مع تطبيق Ruby on Rails على Ubuntu 21.04
- استكشاف CloudSigma PaaS: كيف تستفيد من خدمات استضافة Ruby PaaS؟
حوسبة سعيدة!




































التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.