Ordaz
06-07-2008, 04:47 PM
السلام عليكم ورحمة الله وبركاته.
من عنوان الدرس: تعليم RGSS2 ومبادئها الأساسية. إن شاء الله هذا الدرس بادئة سلسلة دروس تعليم RGSS2.
تحذير: هذا الدرس طويل وهو جزئين. والراغبين في التعلم فقط هم من ينهونه دون ترك سطر منه. لذا الرجاء الخروج اذا لم تكن لك نية للتعلم.
ملاحظة مهمة جداً: RGSS2 هي فرع من لغة Ruby، ولكن Ruby نفسها ليست RGSS. شي يخربط شوي بس سهلة مع شوية تركيز.
عودة لموضوعنا:
أولاً: RGSS2 مثل أي لغة تتكون من مجموعة تعابير وقواعد ثابتة
وتبدأ اللائحة بـ:
نص الـComment/التعليق
وهذا يبدأ بـ#. ويهمل قارئ السكربت التعليقات، إذ هي مجرد ملاحظات تكتبها لنفسك ومستعملي السكربت لتفهيم عمله.مثال:
This is a comment#
المعرفات Identifiers:
مثال عليها:
hello
my_name_is_talal
المعرف في Ruby هو مايبدأ بحرف صغير lowercase او underscore ( _ ). وليس هناك حدود لطول المعرف.
الكلمات المحجوزة Reserved words
وهي 38 كلمة:
BEGIN class ensure nil self when
END def false not super while
alias defined? for or then yield
and do if redo true
begin else in rescue undef
break elsif module retry unless
case end next return until
ولايمكن اطلاقاً استعمال هذه الكلمات لأسماء صفوف classes. ولكن اذا سبقت بـ@ أو $، يمكن استعمالها كمتغير (أنظر ادناه).
مثال:
we can NOT use class nil
BUT we can use $nil = 10
and we can use def nil
التعابير Expressions
مثال:
true
(1+2)*3
if test then ok else ng end
يطلق مصطلح "تعبير" على كل مايوجد في روبي. وان مجموعة تعابير معينة تُخلِّق برمجية ruby
وتفصل عن بعضها البعض باستخدام الفاصلة المنقوطة ( ; )
ثانياً: الثوابت والمتغيرات
لابد من اي لغة برمجة ان تحتوي على هاتين الاثنتين، بدونهما لايمكننا ابداً ان نجري عمليات حسابية مما يحيل حياتنا جحيماً! ولغة ruby تحتوي الآتي:-
1)متغيرات محلية Local Variables
2)متغيرات محدودة Instance variables
3)متغيرات الصفوف class variables
4)متغيرات عامة/عالمية Global variables
5)الثوابت Constants
وسنذكر كل واحد بالتفصيل:
المتغيرات المحلية: مثال عليها
ruby
يذكركم هذا بشيء؟:33: ... انها نفسها المعرفات. وتحتاج الى اعلان declaration قبل استعمالها.
المتغيرات المحدودة: مثال عليها
@myname
المتغيرات المبدوءة بـ’@’ تعد متغيرات محدودة، وهي تعود الى اماكن معينة من السكربت، وهذه المتغيرات يمكن أن ترجع من أي صنف او فئة فرعية في السكربت نفسه.
متغيرات الصفوف: مثال عليها
class A
@@A = 1
def B
puts @@AA
end
end
المتغيرات المبدوءة بـ"@@" تسمى متغيرات الصفوف، ويتم تعريفها في صف ما ويمكن الرجوع اليها في نفس الصف.
المتغيرات العامة/ العالمية: مثال عليها
$name
المتغيرات المبدوءة بـ$ تسمى متغيرات عامة. ويمكن الرجوع اليها من اي مكان في البرنامج (إذن يستحسن الحذر عند الإستعمال). ولا تحتاج الى اعلان، وقيمة اي متغير غير مشغل = nil.
الثوابت: مثال عليها:
RUBY = 'ruby'
انتبه!! هذا لايعد معرفاً. لأنه لايبدأ بحروف صغيرة lowercase.
ولكن الثوابت لديها نظام مختلف عن المتغيرات في الرجوع.
class Identity
NAME = 'SOMEBODY'
end
class Checkin < Identity
p NAME # Gives us "SOMEBODY"
end
p Identity::NAME # Gives us "SOMEBODY"
والآن انظر هنا.
المتغير NAME موجود فقط في صف Identity. لكن من الممكن الرجوع الى الصف باستخدام < التي تعني أن صف Checkin يتَّبِع صف Identity ويرجع الى ثوابته ومتغيراته.
أي ان Identity = Checkin Superclass
نسينا شيئاً! لقد تكلمت قبل قليل عن nil. فهل عرفنا ماهي؟
انها تعد متغيراً كاذباً Pseudo variable.
وأمثلة آخرى: self, true, false. وهذه تعمل على صفوف خاصة بها في Ruby. مثل
NilClass.
ثالثاً: الحرفيات Literals.
القيم التي تصرّف فوراً في Ruby مثل رقم 1 او القيمة "Hello" تعد من الحرفيات.
وهي 7 انواع:
1) الحرفيات الرقمية Numerical Literals
مثل 1,2,3 أو 0xffff.
يمكن ان تحتوي الحرفيات الرقمية على Underscore. فمترجم الـRuby يتجاهلها ولا يترجمها بشكل خاص. مثل:
03_10_1987 # => 03101987
29_03_1928 # => 29031928
2)مدخلات حرفية String Literals
مثال عليها:
"this is a string expression\n"
'this is a string expression'
الحرفيات المحاطة بـ"-" أو '-' تسمى strings.
ملاحظة: الحرفيات المفصولة بمسافة فارغة تدمج اوتوماتيكياً
p"mon" "tada" # montada
الفروق بين " " و ' '
ان التنقيط المزدوج = \\ ويسمح ببديل التعبير (#{}) مثل:
class RGSS2
"NAME = "Tutorial$
"p" This is a #{$NAME} related to RGSS2
في حين عند عمل الآتي:
class RGSS2
"NAME = "Tutorial$
'p' This is a #{$NAME} related to RGSS2
سوف يصبح لدينا This is a #{$NAME} related to RGSS2 لكن " " ابطأ نوعاً من
' ' لأنها تستهلك CPU اعلى :D
3)التعابير المنتظمة Regular Expression
مثل:
/^Ruby the OOPL/
/Ruby/i
/my name is #{myname}/
يبدو هذا شائقاً! لم أفهم :boggled:.
حسناً، هذه التعابير المنتظمة هي ماحددت بـBackslash او ( \ ).
الحروف التي تتبع الـSlash النهائي فوراً تدل على خيار التعبير المنتظم:
i
وتعني مقارنة التعبير المنتظم غير حساسة لحالة الأحرف.
m
وتعني ان السطور الجديدة تعني انها تعد حروفاً طبيعية (مقارنةً مثلاً بـالنقطة "." )
4)تعابير الصف Array Expression: مثال:
[1, 2, 3]
تعيد تعابير الصف نتيجة كل تعبير. والـArray محدود للصف Array في RGSS2
5)الـHash Expressions: مثال عليها:
{1=>2, 2=>4, 3=>6}
تعيد علامة رقم Hash تخطيط قيمة ناتجة إلى مفتاح (Key). علامات الأرقام محدودة للصف Hash.
وعلامة الرقم ويمكن تسميتها بـAssociative array يمكنها ربط جسمين Objects مع بعضها البعض.
6)تعابير المدى Range Expressions: مثال:
1 .. 20
إذا ظهر هذا في أي مكان عدا التعبير الشرطي، يعيد المدى الإحتمالات من تعبير 1 الى تعبير 2.
والـ( .. ) تظهر الأرقام بين الرقمين التي هي بينهما. مثلا المثال، النقطتين تعني 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20. للإختصار نقوم بوضع هاتين النقطتين.
7) الرموز Symbols: مثل
:class
:lvar
:method
:$gvar
:@ivar
:+
رموز عائدات التي لها اتصال بين اثنين مراسلة بالـStrings.
والرموز اجسام Objects فريدة تعطي نفس الـجسم عند التقييم Evaluation
---------------------------------يتبع (يعني لسه ماخلصنا درس1)---------------------------------
من عنوان الدرس: تعليم RGSS2 ومبادئها الأساسية. إن شاء الله هذا الدرس بادئة سلسلة دروس تعليم RGSS2.
تحذير: هذا الدرس طويل وهو جزئين. والراغبين في التعلم فقط هم من ينهونه دون ترك سطر منه. لذا الرجاء الخروج اذا لم تكن لك نية للتعلم.
ملاحظة مهمة جداً: RGSS2 هي فرع من لغة Ruby، ولكن Ruby نفسها ليست RGSS. شي يخربط شوي بس سهلة مع شوية تركيز.
عودة لموضوعنا:
أولاً: RGSS2 مثل أي لغة تتكون من مجموعة تعابير وقواعد ثابتة
وتبدأ اللائحة بـ:
نص الـComment/التعليق
وهذا يبدأ بـ#. ويهمل قارئ السكربت التعليقات، إذ هي مجرد ملاحظات تكتبها لنفسك ومستعملي السكربت لتفهيم عمله.مثال:
This is a comment#
المعرفات Identifiers:
مثال عليها:
hello
my_name_is_talal
المعرف في Ruby هو مايبدأ بحرف صغير lowercase او underscore ( _ ). وليس هناك حدود لطول المعرف.
الكلمات المحجوزة Reserved words
وهي 38 كلمة:
BEGIN class ensure nil self when
END def false not super while
alias defined? for or then yield
and do if redo true
begin else in rescue undef
break elsif module retry unless
case end next return until
ولايمكن اطلاقاً استعمال هذه الكلمات لأسماء صفوف classes. ولكن اذا سبقت بـ@ أو $، يمكن استعمالها كمتغير (أنظر ادناه).
مثال:
we can NOT use class nil
BUT we can use $nil = 10
and we can use def nil
التعابير Expressions
مثال:
true
(1+2)*3
if test then ok else ng end
يطلق مصطلح "تعبير" على كل مايوجد في روبي. وان مجموعة تعابير معينة تُخلِّق برمجية ruby
وتفصل عن بعضها البعض باستخدام الفاصلة المنقوطة ( ; )
ثانياً: الثوابت والمتغيرات
لابد من اي لغة برمجة ان تحتوي على هاتين الاثنتين، بدونهما لايمكننا ابداً ان نجري عمليات حسابية مما يحيل حياتنا جحيماً! ولغة ruby تحتوي الآتي:-
1)متغيرات محلية Local Variables
2)متغيرات محدودة Instance variables
3)متغيرات الصفوف class variables
4)متغيرات عامة/عالمية Global variables
5)الثوابت Constants
وسنذكر كل واحد بالتفصيل:
المتغيرات المحلية: مثال عليها
ruby
يذكركم هذا بشيء؟:33: ... انها نفسها المعرفات. وتحتاج الى اعلان declaration قبل استعمالها.
المتغيرات المحدودة: مثال عليها
@myname
المتغيرات المبدوءة بـ’@’ تعد متغيرات محدودة، وهي تعود الى اماكن معينة من السكربت، وهذه المتغيرات يمكن أن ترجع من أي صنف او فئة فرعية في السكربت نفسه.
متغيرات الصفوف: مثال عليها
class A
@@A = 1
def B
puts @@AA
end
end
المتغيرات المبدوءة بـ"@@" تسمى متغيرات الصفوف، ويتم تعريفها في صف ما ويمكن الرجوع اليها في نفس الصف.
المتغيرات العامة/ العالمية: مثال عليها
$name
المتغيرات المبدوءة بـ$ تسمى متغيرات عامة. ويمكن الرجوع اليها من اي مكان في البرنامج (إذن يستحسن الحذر عند الإستعمال). ولا تحتاج الى اعلان، وقيمة اي متغير غير مشغل = nil.
الثوابت: مثال عليها:
RUBY = 'ruby'
انتبه!! هذا لايعد معرفاً. لأنه لايبدأ بحروف صغيرة lowercase.
ولكن الثوابت لديها نظام مختلف عن المتغيرات في الرجوع.
class Identity
NAME = 'SOMEBODY'
end
class Checkin < Identity
p NAME # Gives us "SOMEBODY"
end
p Identity::NAME # Gives us "SOMEBODY"
والآن انظر هنا.
المتغير NAME موجود فقط في صف Identity. لكن من الممكن الرجوع الى الصف باستخدام < التي تعني أن صف Checkin يتَّبِع صف Identity ويرجع الى ثوابته ومتغيراته.
أي ان Identity = Checkin Superclass
نسينا شيئاً! لقد تكلمت قبل قليل عن nil. فهل عرفنا ماهي؟
انها تعد متغيراً كاذباً Pseudo variable.
وأمثلة آخرى: self, true, false. وهذه تعمل على صفوف خاصة بها في Ruby. مثل
NilClass.
ثالثاً: الحرفيات Literals.
القيم التي تصرّف فوراً في Ruby مثل رقم 1 او القيمة "Hello" تعد من الحرفيات.
وهي 7 انواع:
1) الحرفيات الرقمية Numerical Literals
مثل 1,2,3 أو 0xffff.
يمكن ان تحتوي الحرفيات الرقمية على Underscore. فمترجم الـRuby يتجاهلها ولا يترجمها بشكل خاص. مثل:
03_10_1987 # => 03101987
29_03_1928 # => 29031928
2)مدخلات حرفية String Literals
مثال عليها:
"this is a string expression\n"
'this is a string expression'
الحرفيات المحاطة بـ"-" أو '-' تسمى strings.
ملاحظة: الحرفيات المفصولة بمسافة فارغة تدمج اوتوماتيكياً
p"mon" "tada" # montada
الفروق بين " " و ' '
ان التنقيط المزدوج = \\ ويسمح ببديل التعبير (#{}) مثل:
class RGSS2
"NAME = "Tutorial$
"p" This is a #{$NAME} related to RGSS2
في حين عند عمل الآتي:
class RGSS2
"NAME = "Tutorial$
'p' This is a #{$NAME} related to RGSS2
سوف يصبح لدينا This is a #{$NAME} related to RGSS2 لكن " " ابطأ نوعاً من
' ' لأنها تستهلك CPU اعلى :D
3)التعابير المنتظمة Regular Expression
مثل:
/^Ruby the OOPL/
/Ruby/i
/my name is #{myname}/
يبدو هذا شائقاً! لم أفهم :boggled:.
حسناً، هذه التعابير المنتظمة هي ماحددت بـBackslash او ( \ ).
الحروف التي تتبع الـSlash النهائي فوراً تدل على خيار التعبير المنتظم:
i
وتعني مقارنة التعبير المنتظم غير حساسة لحالة الأحرف.
m
وتعني ان السطور الجديدة تعني انها تعد حروفاً طبيعية (مقارنةً مثلاً بـالنقطة "." )
4)تعابير الصف Array Expression: مثال:
[1, 2, 3]
تعيد تعابير الصف نتيجة كل تعبير. والـArray محدود للصف Array في RGSS2
5)الـHash Expressions: مثال عليها:
{1=>2, 2=>4, 3=>6}
تعيد علامة رقم Hash تخطيط قيمة ناتجة إلى مفتاح (Key). علامات الأرقام محدودة للصف Hash.
وعلامة الرقم ويمكن تسميتها بـAssociative array يمكنها ربط جسمين Objects مع بعضها البعض.
6)تعابير المدى Range Expressions: مثال:
1 .. 20
إذا ظهر هذا في أي مكان عدا التعبير الشرطي، يعيد المدى الإحتمالات من تعبير 1 الى تعبير 2.
والـ( .. ) تظهر الأرقام بين الرقمين التي هي بينهما. مثلا المثال، النقطتين تعني 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20. للإختصار نقوم بوضع هاتين النقطتين.
7) الرموز Symbols: مثل
:class
:lvar
:method
:$gvar
:@ivar
:+
رموز عائدات التي لها اتصال بين اثنين مراسلة بالـStrings.
والرموز اجسام Objects فريدة تعطي نفس الـجسم عند التقييم Evaluation
---------------------------------يتبع (يعني لسه ماخلصنا درس1)---------------------------------