2 تعليقات / 12 مايو 2008
من هي روبي؟
اعرف اني تأخرت كثيراً، و لكن اعادة كتابة هذه التدوينة من جديد اخذت وقت لا بأس به، كما انني مشغول للغاية في العمل على إنهاء تصميم جديد لمشروع اعمل عليه، الأيام الماضية كانت صعبة للغاية، بالإضافة لإصابتي بنزلة برد جاءت في وقت غير مناسب ابداً، اشعر ان هذه المدونة يتملكها بعض النحس، احس بأني آخذ وقت كبير جداً لكتابة اي تدوينة، و لا استطيع الإلتزام بالمواعيد التي اقطعها على نفسي، شعور سيء للغاية، على العموم ليس المكان هنا مخصص للتذمر و النفور من عدم تنظيمي للوقت.
هل اخبرتكم اني كتبت تدوينة في مدونة محمود المسعودي؟، لا لم افعل، حسناً الآن عرفتم ذلك، التدوينة تطرح 20 طريقة لزيادة شهرة مدونتك، يوجد طرق اكثر من ذلك بكثير و لكن العشرون طريقة اغلبهم قمت بتجربتهم، و بعضهم بالفعل افادني كثيراً، اضغط هنا للإطلاع على التدوينة.
نرجع لموضوعنا، عنوان تدوينة اليوم جذاب للبعض، أليس كذلك؟ هو ايضاً غير صحيح لغوياً؟ اعرف ذلك، فلغة البرمجة روبي غير عاقل و كونها غير عاقل يعني انني يجب ان استخدم أداة الإستفهام ما فهي لغير العاقل، و أداة الإستفهام من للعاقل بالطبع، لذا اريحوا انفسكم من العناء، لقد قصدت كتابة العنوان بهذا الشكل.
حسناً، من هي روبي بالفعل؟

روبي هي لغة برمجة ديناميكية، بسيطة، مفتوحة المصدر (Open Source) و كائنية التوجه (Object Oriented) و سنشرح خلال لحظات ماذا نقصد بأنها مفتوحة المصدر و كائنية التوجه، تمت برمجة هذه اللغة بإستخدام لغة البرمجة سي C، و قام ببرمجتها مبرمج ياباني يدعى يوكيهيرو ماتسوموتو (Yukihiro Matsumoto) و يعرف ايضاً بالإسم المستعار ماتز (Matz) و الذي سنستخدمه للإشارة إليه في بقية التدوينة.
حسناً، مفتوحة المصدر بمعنى ان مصدر اللغة (الشفرة المصدرية) مفتوح و متاح لأي شخص ليستطيع رؤيته و حتى التعديل عليه، لن نتكلم بالتفصيل عن المصادر المفتوحة، و لكن يكفي أن تعرف انك حر في التعامل مع روبي كيفما تشاء طالما انك تملك خبرة كافية في لغة البرمجة C:
- يمكنك الإطلاع على الشفرة المصدرية بكل حرية.
- يمكنك تعديل الشفرة المصدرية بكل حرية.
- يمكنك نسخ الشفرة المصدرية بكل حرية.
- يمكنك إعادة توزيع الشفرة المصدرية مجدداً بكل حرية.
اما عن البرمجة الكائنية التوجه فهو نمط متقدم من أنماط البرمجة فيه تستخدم الكائنات (Objects) لبناء برامج و تطبيقات الحاسب، و يمتلك هذا النمط عدة خصائص مثل الوراثة، التغليف، تعدد الأوجه، تمرير الرسائل و سوف نشرح بعض مصطلحات البرمجة الكائنية التوجه بالتفصيل لأنها ستفيدنا في فهم هذا النوع من أنواع البرمجة بشكل كبير:
- الطبقات (Classes): الطبقة هي ما يحدد خصائص شيء ما (الكائن)، و تتضمن هذه الخصائص (صفات الكائن، قدرات الكائن) و تتضمن ايضاً سلوكياته (الأشياء التي يستطيع فعلها) و لتوضيح الأمر لنفرض لدينا طبقة تدعى Dog، هذه الطبقة تتضمن سلوكيات و خصائص تتميز بها جميع الكلاب، مثل الفرو الذي يحيط بجسد الكلاب (خصائص) و قدرة الكلب على الجلوس او النباح (سلوكيات).
- الكائنات (Objects): الكائن هو عبارة عن كائن ما، و سنكمل بالمثال السابق، فرضنا ان لدينا طبقة تدعى Dog هذه الطبقة تتضمن جميع السلوكيات و الخصائص التي تتميز بها جميع الكلاب و سنفرض ان الكائن Shepherd احد انواع الكلاب لذا يتفرع من الطبقة Dog، اذاً Shepherd عبارة عن كلب و يمتلك السلوكيات و الخصائص التي يمتلكها جميع الكلاب من الطبقة Dog، قلنا ان الطبقة Dog احدى خصائصها وجود فرو يحيط بجسد الكلب، اذاً Shepherd يمتلك فرو، و لنفرض وجود نوع آخر من الكلاب Bulldog ينتمى إلى نفسة الطبقة Dog، اذاً يمتلك هو ايضاً فرو، لكن من الممكن ان يكون لون الفرو مختلف في هذا النوع عن النوع الآخر.
- الطرق (Methods): يمكننا القول بأن الطرق هي قدرات الكائن، اي انها الأفعال التي يمكنه عملها، لو طبقنا ذلك على مثالنا السابق، بسبب كون الكائن Bulldog احدى انواع الكلاب يمكن ان يكون للكائن Bulldog فعل او طريقة تدعى eat (بمعنى الاكل)، يمكن ايضاً ان يكون للكائن Bulldog طريقة اخرى تدعى bark (بمعنى النباح)، اذاً bark او eat هي بعض الطرق او الأفعال الخاصة بالكائن Bulldog.
الامثلة و الشرح في الفقرة السابقة منقولة بتصرف من الصفحة الخاصة بالبرمجة الكائنية التوجه في ويكيبيديا باللغة الإنجليزية، لمزيد من المعلومات عن البرمجة الكائنية التوجه بشكل عام يمكنك قراءة الصفحة المذكورة بالضغط هنا او حتى قراءة الترجمة العربية لها بالضغط هنا، كذلك يمكنك البحث على الإنترنت و استكشاف المزيد عن هذا الموضوع.
فهمت، حدثني اكثر عن روبي:
سميت روبي على اسم احدى الأحجار الكريمة (الزمردة الحمراء)، و السبب في اختيار الاسم يرجع لأن ماتز كان يمزح في بداية العمل على روبي مع احدى اصدقائه حول تسمية لغة البرمجة Perl، فاقترح الصديق تسمية هذه اللغة باسم احد الأحجار الكريمة ايضاً مثل بيرل، و كان روبي هو الخيار الذي وقع عليه اختيار الصديق، ثم اعجب ماتز بالفكرة و من هنا جاء الاسم.
بدء ماتز العمل على روبي في نهاية عام 1993 و اطلق اول نسخة للعامة في عام 1995، لم تنتشر اللغة بشكل كبير في العالم قبل عام 2000 تقريباً و ذلك لعدم توافر توثيق (documentation) لها باللغة الإنجليزية و بالتالي عدم توافر مجتمع قوي من المبرمجين و المطورين، على العكس من ذلك في اليابان حيث انتشرت روبي بها بشكل كبير منذ ظهورها.
روبي لديها العديد من المميزات، على سبيل المثال:
- كل شيء هو كائن: تتعامل لغة البرمجة روبي مع كل الأشياء داخلها (القيم و المتغيرات و الأوامر و الطرق) على أنها كائنات (Objects)، مصنفة داخل طبقات (Classes) و هذه الطبقات هي ايضاً كائنات، و هذا لأن روبي صممت لتكون لغة برمجة كائنية التوجه من البداية، كمثال على ذلك، الرقم (1) يعتبر كائن، ينتمى لطبقة (Class) الاعداد الصحيحة و التي تدعى (Fixnum).
- البساطة: روبي تتميز بانها تمتلك اوامر او اكواد بسيطة، يمكن قرائتها و فهمها ببساطة، لأنها في الأغلب كلمات انجليزية بسيطة مثل create, new و كذلك لأنها الأسطر البرمجية الخاصة بها لا تتطلب وجود العديد من الرموز مثل بقية لغات البرمجة (مثل الفاصلة المنقوطة ;)، مما يسهل قراءة الشفرة المصدرية للبرنامج بشكل اكبر.
- القدرة على العمل على العديد من نظم التشغيل المختلفة: روبي تتميز بأنها تعمل على العديد من نظم التشغيل، يمكنها العمل على ويندوز ، على ماكنتوش (تأتي متضمنة مع ماكنتوش Leopard)، يمكنها العمل على العديد من توزيعات نظام التشغيل لينكس و العديد من نظم التشغيل الأخرى.
- الطبقات (Classes) قابلة للتعديل: روبي تتيح لك التعديل على كل الطبقات و إضافة طرق (Methods) جديدة لها، حتى الطبقات الرئيسية مثل طبقة (Fixnum) و طبقة Object (الطبقة الأم لكل الكائنات في اللغة).
- لغة نصية (Scripting Language): للأسف فإن المصطلح السابق لا توجد له ترجمة مناسبة، لذلك سنكتفي بهذه الترجمة الرديئة، المقصود بلغة البرمجة النصية هي اللغة التي تتيح لك تطوير البرامج بسرعة، لأنك لا تحتاج إلى ترجمة البرنامج إلى ملف تنفيذي في كل مرة تقوم بتطوير البرنامج، اي يمكنك كتابة البرنامج ثم تنفيذه ثم التعديل عليه ثم مواصلة التنفيذ، كذلك فإن هذه اللغة تتيح لك تطوير البرامج في وقت قصير و بسهولة، لأنها تجبرك على كتابة اوامر أقل، لأنك لا تحتاج إلى تضمين العديد من الملفات و الطبقات (Classes) لتبدأ في العمل في برنامج صغير (كما في لغة Java مثلاً)، امثلة على لغات البرمجة النصية Python, Perl, Ruby.
- لغة مفسرة (Interpreted Language): للأسف هذا المصطلح لا توجد له ترجمة مناسبة ايضاً، لذلك سنكتفى بهذه الترجمة الرديئة، المقصود بلغة البرمجة المفسرة هي اللغة التي لا تحتاج إلى ترجمة البرنامج إلى ملف تنفيذي حتى تعمل، ببساطة تقوم انت بكتابة الشفرة المصدرية، ثم تقوم بتنفيذها من خلال استخدام المفسر (Interpreter)، اي انك تقوم بكتابة برنامج، تفسره بإستخدام المفسر (تقوم بتنفيذه)، ثم تطور على البرنامج، ثم تفسره مجدداً بإستخدام المفسر، كل هذا بدون الحاجة لترجمة البرنامج إلى ملف تنفيذي و إعادة ترجمته كلما قمت بالتطوير عليه قليلاً، امثلة على لغات البرمجة المفسرة Smalltalk, Ruby.
- الديناميكية: روبي تتميز بأنها لغة برمجة ديناميكية و المقصود بأنها لغة برمجة ديناميكية انها من لغات البرمجة التي تعتمد على نظام ديناميكية النوع (Dynamic Type)، و لغات البرمجة التي تعتمد على ديناميكية النوع هي لغات البرمجة التي تقوم بالتأكد من نوع القيم و المتغيرات التي تتعامل معها اثناء تشغيل البرنامج (Run Time) على العكس من لغات البرمجة التي تعتمد على نظام ثبات النوع و هي لغات البرمجة التي تقوم بالتأكد من نوع القيم و المتغيرات التي تتعامل معها اثناء ترجمة البرنامج (Compile-Time).
حسناً، هذه بعض مميزات روبي، قصدت في هذه التدوينة ألا نبدأ في التعامل مع اكواد روبي (رغم ان رؤيتهم ستعطيك دفعة كبيرة و رغبة اكبر في تعلم روبي)، لا تقلق اذا كان بعض هذه المميزات او بعض مما ذكر في التدوينة جديد عليك، في الوقت المناسب سنشرح كل شيء بالتفصيل، اليوم الإثنين، و سأتحدث عن خدمة ويب 2.0 عربية جديدة، انتظروني.
إلى اللقاء.
2 تعليقات, يمكنك التعليق على هذه التدوينة أو ترك تنبيه عن هذه التدوينة.
سلافة12 مايو 2008
الاخ أحمد
السلام عليكم
من الواضح أنك تملك ذكاء القلم و تعرف كيف تجذب القراء، فها انا ذا أعلق على كتابتك للمرة الثانية بعد أن التقيت بقلمك لأول مرة في مدونة الأخ محمود…
و لو أنني تجاهلت هذه التدوينة في البدء فقط بسبب كلمة روبي فقد أصابني تسمم فكري من كثرة ال gossip حول هذا الاسم… إلا انني عدت بعد إلقاء نظرة سريعة على بقية تدويناتك و فطنت إلى أنّ روبي لن تكون الروبي إياهها سامحها الله.
تدوينة شيقة و تشوق للمزيد عن هذه الروبي … سأحرص على أن أكون قاعدة معرفة عنها أكثر بل و لربما احاول التحصل عليها و تجربتها فقد كنت دائما أتمنى تجربة لغة ال smalltalk حيث كل شئ كائن مثل روبي… أضف إلى أنها مفتوحة المصدر و هذا شئ مغري.
لن أطيل أكثر … وفقك الله
احمد حازم13 مايو 2008
و عليكم السلام
الأخت العزيزة سلافة
لا تعرفين كم اسعدني تعليقك، و لا كم تأثرت بكلماتك الجميلة، و الحمد لله انك عرفتي بأني لن اتحدث هنا ابداً عن روبي الأخرى.
شيء رائع للغاية وجود اهتمام لديك تجاه لغة روبي، و اتمنى ان تتابعي معي الدروس القادمة و التي سنتحدث فيها بشكل اكبر عن لغة روبي من قرب.
و بخصوص لغة Smalltalk فأنا معجب ايضاً بها للغاية و اتمنى تجربتها في يوم من الأيام، لكنها للأسف تفتقر إلى بعض المميزات المهمة الموجودة في روبي (كل شيء له مميزات و عيوب!)
التعليق على 'من هي روبي؟'
برجاء عدم التعليق بإستخدام اللهجات العامية.