تعلم أساسيات البرمجة بلغة روبي – ثوابت، متغيرات، وأنواع بيانات

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

بالإضافة إلى هذه التدوينة، تتكون السلسلة من التدوينات التالية:

  1. تعلم أساسيات البرمجة بلغة روبي – مُقدِّمة
  2. تعلم أساسيات البرمجة بلغة روبي – أهلاً بالعالم!
  3. تعلم أساسيات البرمجة بلغة روبي – بنى البيانات، بعض التكرار، وقليل من المنطق
  4. تعلم أساسيات البرمجة بلغة روبي – البرمجة غرضية التوجه
  5. تعلم أساسيات البرمجة بلغة روبي – إرشادات لما بعد اﻷساسيات

أولا: الثوابت والمتغيرات

يتم تعريف الثابت (constant) في لغة روبي بإعطائه اسماً يبدأ بحرف كبير (upper case). من المهم معرفة أن المفسّر، وعلى عكس لغات أخرى، يسمح بتغيير قيمة الثابت بعد تعريفه، لكنه سيقوم بإصدار تحذير عند حدوث ذلك. لنجرب المثال التالي في irb:

irb(main):001:0> My_constant = "Don't change me!"
=> "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)، أي أن التحقق من نوع البيانات يتم وقت التشغيل. هذا يعني أمرين:

  1. لا حاجة للإعلان عن نوع المتغير عند تعريفه، حيث ينظر المفسّر إلى القيمة التي تحاول إسنادها إلى المتغير ويستنتج نوعه بشكل ديناميكي.
  2. بمجرد تعريف المتغير، يمكنك تغيير نوعه في وقت لاحق وبشكل ديناميكي.

البعض يطلق على هذا السلوك duck typing: إذا كانت تمشي كبطّة، تسبح كبطّة، وتصدر صوتاً كبطّة، فأغلب الظن أنها بطّة! لنجرب المثال التالي في irb:

irb(main):003:0> swiss_army_knife = 0
=> 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.

بالإمكان إجراء العمليات الحسابية المعتادة على هذه الأعداد: الجمع، الطرح، الضرب، القسمة، الرفع إلى قوة (**)، وحساب الباقي (%). هناك أيضاً عوامل الإسناد المختصرة الموجودة في كثير من اللغات الأخرى.

irb(main):006:0> x = 1049
=> 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 الذي رأيناه في الجزء السابق، وفي أمثلة هذا الجزء أيضاً. أسهل طريقة لإنشاء سلسلة نصية هي إحاطتها بعلامات اقتباس. السلاسل النصية هي كائنات بالطبع، وتمتلك الكثير من الطرق التي يمكننا أن نستدعيها.

irb(main):013:0> first = 'Tech'
=> "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:

irb(main):020:0> puts 'What you see\nis what you get!'
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:

irb(main):022:0> 13.class
=> Fixnum
irb(main):023:0> 1.618.class
=> Float

الصياغة الغريبة بعض الشيء أعلاه هي جزء من حقيقة مهمة تعطي لغة روبي معظم رونقها: في روبي، كل شيء عبارة عن كائن. هذا يعني أنه إذا كان لدينا عدد ما مثلا، فهنالك العديد من الطرق التي يمكن أن نستدعيها.

irb(main):024:0> 3.14.round
=> 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

  1. O-sama SAUDI ARABIA Windows XP Mozilla Firefox 3.0.7
    Posted الخميس 9 أبريل 2009 at 9:15 م | Permalink

    أتساءل كيف يمكنني تحويل رقم ما إلى سلسلة نصية، والعكس؟

  2. Posted الجمعة 10 أبريل 2009 at 3:25 م | Permalink

    التحويل إلى سلسلة نصية يتم باستخدام طريقة to_s

    3.14.class # => Float
    3.14.to_s # => "3.14"

    التحويل إلى عدد صحيح يتم باستخدام طريقة to_i

    "31".class # => String
    "31".to_i # => "31"
    "31".to_i.class # => Fixnum

    التحويل إلى عدد فاصلة عائمة يتم باستخدام طريقة to_f

    "1.618".class # => String
    "1.618".to_f # => "1.618"
    "1.618".to_f.class # => Float
  3. Posted الخميس 16 أبريل 2009 at 1:16 م | Permalink

    شكراً لكم على الدروس

  4. Posted الأحد 3 مايو 2009 at 9:18 م | Permalink

    روبي مع أنها لغه حديثه ألا أنها تصارع الكبار

    واصل بالله عليلك

  5. afi SYRIAN ARAB REPUBLIC Windows XP Internet Explorer 6.0
    Posted الجمعة 8 مايو 2009 at 12:14 ص | Permalink

    السلام عليكم
    بصراحة انا معجب بموقعك وبحييك عليه
    بس انو حقك علينا انو الواحد بيقرا بدون ما يكتب شي رد بس صدقني دوم بقول الله يعطيك العافية
    حابب اطلب مشورتك بموضوع بعد اذنك
    انا مهتم كبير بامن المعلومات والشبكات وعم افكر اتعلم لغة الروبي او البايثون
    وانا عندي خبرة جيدة بالبرمجة
    بدي تنصحني واذا سؤالي مو واضح فيا ريت اتقلي اوضح اكتر
    يعني الروبي مناسبة لتطبيقات الشبكة والامن الرقمي ولا غيرها افضل
    ع كل حال الله يعطيك العافية ويقويك
    السلام

  6. Posted الأحد 17 مايو 2009 at 12:27 م | Permalink

    @afi
    كل الشكر لك على كلماتك المشجعة. في الحقيقة، لا داعي لإظهار الامتنان عن طريق ترك رد من نوع “مشكور”، فيكفينا متابعتكم واستفادتكم مما يطرح في أبجدية التقنية. لكن يسعدنا بالطبع التحاور معكم والإجابة على أسئلتكم قدر المستطاع.

    بالنسبة لسؤالك، فلا أعتقد بوجود “اللغة المُثلى” لتطبيقات الشبكة والأمن الرقمي، فكثير من لغات البرمجة تحتوي مكتبات مخصصة لكتابة هذا النوع من التطبيقات، وهذا يشمل روبي بالطبع.

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

    إذا أردت المزيد من المعلومات عن كتابة تطبيقات الشبكة والأمن الرقمي في روبي، فبإمكانك الاطلاع على المصادر التالية:
    Sockets programming in Ruby – ملف PDF
    Socket Programming and Threads
    Crypt: pure-ruby cryptographic cyphers

تعقيب واحد

  1. [...] [...]

أضف تعليقاً

بريدك الالكتروني لن يعرض للآخرين. * حقول مطلوبة

*
*