الفصل الثاني: أهلا بالعالم
برنامجك الأول مع Ruby سيكون Hello, World وهى عادة في أي دورة أن يتبدأ به
افتح محررك واحفظ الملف باسم hi.rb ، لاحظ إن rb هو إمتداد سكربتات ruby ، واكتب:
احفظ التعديل
وشغل الملف كالتالي:
ruby hi.rb
C:\Documents and Settings\StrikerX>ruby hi.rb
Hi Ruby!
C:\Documents and Settings\StrikerX>hi.rb
Hi Ruby!
ماذا تعني puts ؟
puts هى دالة تستخدم فى طباعة ال strings -سلاسل نصية-
ملاحظة: إذا لم يتعرف نظامك على ruby فكل ما عليك فعله هو إخباره بالمسار الصحيح عندك كالتال:
set path=%path%;RUBY_PATH\bin
حيث RUBY_PATH هو المسار الذي ثبت فيه Ruby
أو كالتالي:
1)انقر بالمين على My Computer ثم Properties
2) اختر Advanced Tab
3)ثم Environment Variables
4)في Variables لـ (UserName) : على PATH ثم اختر Edit
5)أضف RUBY_PATH;
لا تنس إضافة الفاصلة المنقوطة (

سنتعامل فى معظم الوقت مع Ruby بطريقة التفاعلية، بمعنى أن السطر الذي ستكتبه سينفذ في وقته، مثال ذلك:
C:\Documents and Settings\StrikerX>ruby -e "puts 'Hello!'"
Hello!
لاحظ إن ال e هى switch معناها execute وهى بتنفذ العبارة التي بعدها ولكنه أسلوب شاق قليلا، لذا سنستخدم irb script أو تقدر تستخدم المتوفرة فى الfxri
فى ال cmd اكتب
irb -v
C:\Documents and Settings\StrikerX>irb -v
irb 0.9.5(05/04/13)
إذا لم يكن موجودا عندك فثبته باستخدام yum او apt-get حسب توزيعتك
yum install irb
sudo apt-get install irb
irb(main):001:0> puts "Hello, RUBY!"
Hello, RUBY!
=> nil#
لاحظ كلمة nil وهى تعي أن تعبيرك لم يرجع أي قيمة .. ستتعرف عليه اكثر لاحقا
nil = null = None
روبي كحاسبة
تستطيع إستخدام روبي كحاسبة، وتنفيذ عمليات حسابية
irb(main):002:0> 1+2
=> 3
irb(main):003:0> 8*9
=> 72
irb(main):004:0> 10/2
=> 5
irb(main):005:0> 6-9
=> -3
مرحبا روبي بشكل أفضل!
أي سكربت لما تكتبه فى روبي أو أي لغة نصية مثل بايثون و بيرل ، يفترض أن يكون السطر الأول هو مسار المفسر الخاص باللغة.
كيف ستعرف المسار ؟
بإستخدام which
%>which ruby
/usr/bin/ruby
افتح محررك المفضل واكتب
#!usr/bin/ruby
puts “Hi, Ruby!”
احفظ الملف ك hi2.rb
وشغله كالتالى
سيظهر لك الرسالة التالي: Permission denied
فواضح أنه بحاجة لصلاحيات التنفيذ استخدام chmod لإعطاه الصلاحيات اللازمة:
%> chmod 755 hi2.rb
%> ./hi2.rb
Hi,Ruby!
التعليقات
تخيل أنك كتبت برنامجا مثلا 2000 سطر وجئت لتراجعه بعد سنة واكتشفت إنك نسيت لماذا استخدمته، ولماذا عملت كذا فى الكود ؟ إذا كنت أنت صاحب الكود الأصلي هكذا، فمابالك بشخص يطالع مصدر برنامجك ؟
بكل بساطة التعليقات هي فن التوضيح لمصدر برنامجك، بإن تضيف تلميحات وتوضيحات على الجزئيات التى تتوقع أنها غامضة في برنامجك، ولاحظ أن المفسر أو المترجم سيتجاهل التعليقات هذه، ولن ينفذها لأنه يفهم أن هذه التعليقات للمبرمج وللشخص الذي سيقرأ المصدر ولكن ليس له هو.
مرحبا روبي بشكل أفضل!
افتح محررك المفضل واكتب:
#!usr/bin/ruby
puts “Hi, Ruby!” #printing 'Hi, Ruby' on the screen!
لاحظ أن معظم اللغات النصية أو المفسرة تستخدم العلامة: # فى كتابة التعليقات، وهذا الأسلوب أفضله شخصيا مع أنه توجد لغات تقدم أساليب مختلفة إضافة لـ # ولكني أستخدم العلامة # دائما.
تستطيع أن تجعل التعليق يمتد على كذا سطر .. اذا كنت من مستخدمى C مثلا فستجده مشابها لـ /* */ وفى ruby ويكون هكذا:
مثال:
#!usr/bin/ruby
=begin
Author : ahmed youssef
Language: Ruby
Purpose : printing Hello, World!
=end
puts “Hello, World!”
المتغيرات
من الاسم معناها متغيرات أي أنها بتتغير قيمتها خلال برنامجك
على سبيل المثال متغير بإسم String سيشير لـ "Hello, World”
لاحظ أن string التي تحمل اسم Hello, World مخزنة فى مكان معين فى الذاكرة .. ولكي نستدعيها داخل برنامجنا يجب أن نعمل لها اسم مستعار لمكانها حتى نقدر نصل للبيانات المخزنة فيها .. لذا نحن لما أردنا استخدام Hello, World أعطيناها اسم String ، وكلما نستخدم كلمة String خلال برنامجنا سيستدعى Hello, World مباشرة !!
لاحظ المثال التالي:
irb(main):004:0> name="Ahmed"
=> "Ahmed"#
irb(main):007:0> puts name
Ahmed
=> nil
لاحظ الفرق بين name و "name"
الأولى هى متغير والثانية هى سلسلة نصية:
irb(main):008:0> puts name
Ahmed
=> nil
irb(main):009:0> puts "name"
name
=> nil##
لاحظ الأمثلة التالية
name=”Ahmed Youssef”
city=”Cairo”
lang=”Ruby”
site=”P.F”
age=66
أنشأنا متغيرات بإسمname, city, lang, site, age وأعطينها قيم مناسبة لها
تستطيع أن تعرفهم على سطر واحد كالتالي:
ملحوظة: لاتسمى متغيراتك بكلمات محجوزة باللغة
كيفية الحصول على نوع المتغير ؟
بكل بساطة Ruby مثلما قلنا سابقا كل شيء فيها عبارة عن Object أو كائن وتوجد أشياء أساسية فى كل كائن منها الطريقة class وهذه ترجع لنا نوع الكائن نفسه .. لاحظ التالي:
irb(main):020:0> name="Ahmed"
=> "Ahmed"
irb(main):021:0> name.class
=> String
irb(main):022:0> x=10
=> 10
irb(main):023:0> x.class
=> Fixnum##
وهكذا ..
كيفية التحويل من int إلى float
بيتم باستخدام الطريقة to_f وهى إختصار ل to float
irb(main):024:0> x=10
=> 10
irb(main):025:0> f=x.to_f
=> 10.0###
الطريقةto_s
وهي طريقة تحول الكائن إلى string (سلسلة نصية)، مثلا لو يوجد كائن كالتالي:
الكائن هذا عبارة عن عدد صحيح int عادى ، ولكن نحن نريد تحويله إلى سلسلة نصية ؟ فسنستخدم الطريقة to_s كالتالي:
irb(main):026:0> x=5555
=> 5555
irb(main):027:0> s=x.to_s
=> "5555"
irb(main):028:0> x.class
=> Fixnum
irb(main):029:0> s.class
=> String
لاحظ بمناسبة التحويل انك إذا مررت المعامل 2 لـ int التي تريد تحويلها ستتحول إلى صيغة الثنائية وإذا مررت المعامل ١٦ ستتحول إلى الصيغة الست عشرية كالتالي:
irb(main):030:0> 14.to_s(2) #binary
=> "1110"
irb(main):031:0> 14.to_s(16) #hex
=> "e"
الثوابت
هى عبارة عن ثوابت لا تتغير قيمتها طوال برنامجك .. أشهر مثال عليها هو PI = 3.1459
يفضل أن تتبع الإسلوب القياسى فى الكتابة بإن تجعل حروف الثوابت حروف كبيرة.
صفوف الأعداد
Ruby فيها العديد من الصفوف المستخدمة فى التعبير عن الأرقام مثل: Integer و Fixnumو Float و Bignum و Rational لكن نحن لا يهمنا غير ال Integer وال Fixnum و تستطيع أن تطلع على الباقى في التوثيق.
كيف يتم التحويل القسري ؟
على فرض اعندنا float على الشكل هذا 10.8
ونريد أن نحوله إلى integer ، فكل الذي عليك هو تمرر الرقم للصف Integer كالتالي:
irb(main):035:0> floatVar=10.8
=> 10.8
irb(main):036:0> intVar=Integer(floatVar)
=> 10
لاحظ إن ال int لا يتعامل مع الفاصلة العائمة فيتجاهلها وتبقى القيمة الصحيحة من ال float هى 10
إذا string يمكن أن يكون Integer، على سبيل المثال
“56” نقدر أن نحوله لرقم كالتالى 56
irb(main):037:0> Integer("56")
=> 56
لكن إذا كان على الشكل التالي مثلا "abc” فلن ينفع، لأن محتوياته ليس أرقام ، بل حروف.
التحويل من Binary
rb(main):042:0> Integer (00001110)
=> 584
i
وهكذا ..
succ, next
هى طرق تعيد القيمة التالية للرقم، على الشكل التالي:
puts 1.succ #returns 2
puts 5.next #returns 6