في هذا الجزء، سنكمل مشوارنا في طريق تعلم أساسيات البرمجة بلغة روبي، حيث سنتعرف على الثوابت والمتغيرات وكيفية تعريفها، وسنتعرف على عدد من أنواع البيانات الأساسية.
بالإضافة إلى هذه التدوينة، تتكون السلسلة من التدوينات التالية:
- تعلم أساسيات البرمجة بلغة روبي – مُقدِّمة
- تعلم أساسيات البرمجة بلغة روبي – أهلاً بالعالم!
- تعلم أساسيات البرمجة بلغة روبي – بنى البيانات، بعض التكرار، وقليل من المنطق
- تعلم أساسيات البرمجة بلغة روبي – البرمجة غرضية التوجه
- تعلم أساسيات البرمجة بلغة روبي – إرشادات لما بعد اﻷساسيات
أولا: الثوابت والمتغيرات
يتم تعريف الثابت (constant) في لغة روبي بإعطائه اسماً يبدأ بحرف كبير (upper case). من المهم معرفة أن المفسّر، وعلى عكس لغات أخرى، يسمح بتغيير قيمة الثابت بعد تعريفه، لكنه سيقوم بإصدار تحذير عند حدوث ذلك. لنجرب المثال التالي في irb:
=> "Don't change me!"
irb(main):002:0> My_constant = "I said don't change me!"
(irb):2: warning: already initialized constant My_constant
=> "I said don't change me!"
بالنسبة للمتغيرات، فعلينا أن نتذكر أن روبي لغة ديناميكية (dynamically typed language)، أي أن التحقق من نوع البيانات يتم وقت التشغيل. هذا يعني أمرين:
- لا حاجة للإعلان عن نوع المتغير عند تعريفه، حيث ينظر المفسّر إلى القيمة التي تحاول إسنادها إلى المتغير ويستنتج نوعه بشكل ديناميكي.
- بمجرد تعريف المتغير، يمكنك تغيير نوعه في وقت لاحق وبشكل ديناميكي.
البعض يطلق على هذا السلوك duck typing: إذا كانت تمشي كبطّة، تسبح كبطّة، وتصدر صوتاً كبطّة، فأغلب الظن أنها بطّة! لنجرب المثال التالي في irb:
=> 0
irb(main):004:0> swiss_army_knife = 3.14
=> 3.14
irb(main):005:0> swiss_army_knife = "A duck!"
=> "A duck!"
ثانيا: أنواع البيانات الأساسية
هناك العديد من أنواع البيانات الأساسية التي من المهم معرفتها. سنتناول في هذا الجزء نوعان.
الأعداد
يتوقع من أي لغة برمجة أن تدعم العمليات الحسابية على الأعداد، ولغة روبي ليست استثناءً بالطبع. هناك نوعان أساسيان من الأعداد:
- الأعداد الصحيحة: مثل -273، 0، 22، وهي من نوع Fixnum. هناك أيضا الأعداد الكبيرة مثل 1234567890 وهي من نوع Bignum، لكن لا داعي للقلق بشأن هذا الفرق لأن التحويل بين النوعين يتم بسلاسلة.
- أعداد الفاصلة العائمة: مثل 1.618، وهي من نوع Float.
بالإمكان إجراء العمليات الحسابية المعتادة على هذه الأعداد: الجمع، الطرح، الضرب، القسمة، الرفع إلى قوة (**)، وحساب الباقي (%). هناك أيضاً عوامل الإسناد المختصرة الموجودة في كثير من اللغات الأخرى.
=> 1049
irb(main):007:0> x += 1
=> 1050
irb(main):008:0> x -= 2
=> 1048
irb(main):009:0> x *= 2
=> 2096
irb(main):010:0> x /= 2
=> 1048
ملاحظة: عاملا الزيادة (++) والتناقص (–) غير موجودان في روبي.
السلاسل النصية (Strings)
تتكون أي سلسلة نصية من سلسلة من الأحرف، الأرقام، و/أو محارف أخرى. كنا قد تعاملنا مع السلاسل النصية في برنامج Hello World الذي رأيناه في الجزء السابق، وفي أمثلة هذا الجزء أيضاً. أسهل طريقة لإنشاء سلسلة نصية هي إحاطتها بعلامات اقتباس. السلاسل النصية هي كائنات بالطبع، وتمتلك الكثير من الطرق التي يمكننا أن نستدعيها.
=> "Tech"
irb(main):014:0> second = 'ABC'
=> "ABC"
irb(main):015:0> blog_name = first + second
=> "TechABC"
irb(main):016:0> blog_name.length
=> 7
irb(main):017:0> blog_name.upcase
=> "TECHABC"
irb(main):018:0> blog_name.capitalize
=> "Techabc"
irb(main):019:0> blog_name.swapcase
=> "tECHabc"
ملاحظة: عند استخدام علامات الاقتباس المفردة، لن يتم تفسير واستبدال بعض السلاسل الخاصة (مثل t\ وn\)، بل ستبقى جزءاً من السلسلة النصية كما هي. لنشاهد هذا الفرق في irb:
What you see\nis what you get!
=> nil
irb(main):021:0> puts "What you see\nis what you get!"
What you see
is what you get!
=> nil
فائدة: لا لأنواع البيانات البدائية!
من المهم معرفة أنه لا توجد أنواع بيانات بدائية في روبي، حتى تلك التي تبدو كذلك. لنثبت هذا، دعونا نجرب التالي في irb:
=> Fixnum
irb(main):023:0> 1.618.class
=> Float
الصياغة الغريبة بعض الشيء أعلاه هي جزء من حقيقة مهمة تعطي لغة روبي معظم رونقها: في روبي، كل شيء عبارة عن كائن. هذا يعني أنه إذا كان لدينا عدد ما مثلا، فهنالك العديد من الطرق التي يمكن أن نستدعيها.
=> 3
irb(main):025:0> 1.618.round
=> 2
irb(main):026:0> 3.14.truncate
=> 3
irb(main):027:0> 1.618.truncate
=> 1
irb(main):028:0> -273.abs
=> 273
irb(main):029:0> 13.succ
=> 14
هذه الحقيقة هي السر الذي يفسر كيف يمكن التحويل بين Fixnum وBignum بدون مجهود.
في الجزء التالي، سنتعرف على المزيد من أنواع البيانات الضرورية (مثل المصفوفات والرموز)، بالإضافة إلى الجمل الشرطية والحلقات.


عدد التعليقات 6
أتساءل كيف يمكنني تحويل رقم ما إلى سلسلة نصية، والعكس؟
التحويل إلى سلسلة نصية يتم باستخدام طريقة to_s
3.14.to_s # => "3.14"
التحويل إلى عدد صحيح يتم باستخدام طريقة to_i
"31".to_i # => "31"
"31".to_i.class # => Fixnum
التحويل إلى عدد فاصلة عائمة يتم باستخدام طريقة to_f
"1.618".to_f # => "1.618"
"1.618".to_f.class # => Float
شكراً لكم على الدروس
روبي مع أنها لغه حديثه ألا أنها تصارع الكبار
واصل بالله عليلك
السلام عليكم
بصراحة انا معجب بموقعك وبحييك عليه
بس انو حقك علينا انو الواحد بيقرا بدون ما يكتب شي رد بس صدقني دوم بقول الله يعطيك العافية
حابب اطلب مشورتك بموضوع بعد اذنك
انا مهتم كبير بامن المعلومات والشبكات وعم افكر اتعلم لغة الروبي او البايثون
وانا عندي خبرة جيدة بالبرمجة
بدي تنصحني واذا سؤالي مو واضح فيا ريت اتقلي اوضح اكتر
يعني الروبي مناسبة لتطبيقات الشبكة والامن الرقمي ولا غيرها افضل
ع كل حال الله يعطيك العافية ويقويك
السلام
@afi
كل الشكر لك على كلماتك المشجعة. في الحقيقة، لا داعي لإظهار الامتنان عن طريق ترك رد من نوع “مشكور”، فيكفينا متابعتكم واستفادتكم مما يطرح في أبجدية التقنية. لكن يسعدنا بالطبع التحاور معكم والإجابة على أسئلتكم قدر المستطاع.
بالنسبة لسؤالك، فلا أعتقد بوجود “اللغة المُثلى” لتطبيقات الشبكة والأمن الرقمي، فكثير من لغات البرمجة تحتوي مكتبات مخصصة لكتابة هذا النوع من التطبيقات، وهذا يشمل روبي بالطبع.
شخصياً، لا أرى فرقاً كبيراً بين روبي وبايثون في هذا المجال، كما أن الانتقال بينهما سهل نسبيا، خصوصاً عند وجود خبرة بالبرمجة. المهم في نظري أن تأخذ الوقت الكافي لاتقان اللغة التي تختارها، حتى تستطيع التركيز على تطبيق مبادئ الشبكات والتشفير لاحقاً.
إذا أردت المزيد من المعلومات عن كتابة تطبيقات الشبكة والأمن الرقمي في روبي، فبإمكانك الاطلاع على المصادر التالية:
Sockets programming in Ruby – ملف PDF
Socket Programming and Threads
Crypt: pure-ruby cryptographic cyphers
تعقيب واحد
[...] [...]