Home Previous Up Next6.1 لغات البرمجة
حول
المحتويات
مشاريع
ثواب
مقالات
تنزيل
English

6.1 لغات البرمجة

مقدمة

هناك العديد من لغات البرمجة منها ما يمكن للمستخدم العادي الكتابة بها ومنها ما يقتصر على المحترفين ولتسهيل اختيار اللغة يمكنك قراءة هذا الملخص، لغات المستوى الراقي منها اللغات التفسيرية وهي التي لا يقوم برنامج اللغة بتحويل النص من هذه اللغة إلى لغة الألة وإنما يبقى النص بصيغتيه النصية ويسمى script وعند تشغيل هذا النص يقوم برنامج المفسر بإعراب هذا النص أمراً أمراً، وتنفيذة واحداً تلو واحد وفي كل مرة تنفذه فيها تعاد هذه العملية أو وفي أحسن الأحوال ينقل إلى صيغة مكثفة compiled script تختزل بعض عمليات الإعراب ولكن لا يتحول النص إلى لغة الآلة بل إلى ملف ثنائي يسمى byte code وهو عبارة عن سلسلة من تعليمات بلغة الآلة الإفتراضية (آلة وهمية) VM ويكون هناك مفسر يسمى الآلة الإفتراضية يتم استدعاؤه في كل مرة يتم تنفيذ البرنامج فيها حيث يقوم بالتحويل من الآلة الفتراضية إلى الحقيقية. ويكون تنفيذ هذا byte code أسرع من النص script ويعتبر تتبع الأخطاء في اللغات التفسيرية أمرا سهلا لأنها تنفذ سطرا فسطر. من الأمثلة على هذه اللغات bash و perl و python و php التي تتداول برامجها على شكل نصي script وهناك نوع من هذه اللغات python مثلاً يحول يمكنه تحويل النص إلى لغة آلة وهمية افتراضية لكسب المزيد من السرعة ولكن أشهر تلك التي تتداول بشكل ثنائي غير نصي هي جافا java ولغة visual basic على الرغم مما يقال إلا أنها تفسيرية لأن الملف التنفيذي هو عبارة عن ملف يقوم باستدعاء الآلة الإفتراضية msvbvm60.dll مثلاً التي تتابع عملية تفسير البرنامج. وعلى الرغم من كل شيء تظل هذه اللغات بطيئة إلا أنها تمتاز بأنها ستعمل على أي منصة على أي نظام تشغيل إذا وجد المفسر الخاص بها على ذلك النظام وهي فلسفة هكذا لغات "Write once run every where." أي أن تكتبه مرة واحدة وتنفذه أينما كان . وعلى النقيض من ذلك توجد اللغات التي تعطي ملف بلغة الآلة مباشرة مثل لغة C/C++ وتسمى عملية تحويل ملف من الكود المصدر (الملف النصي) إلى لغة الآلة تصنيف compiling ويكون البرنامج الناتج أسرع ما يكون خصوصا إذا كنت تستعمل مصنف gcc الذي يمكنه تحسين optimization أي زيادة سرعة برامجك أو تقليل حجمها ويمكنه استغلال كافة تعليمات معالج معين ولكن لغة C/C++ ليست للهواة. الهدف الأسمى في اللغات التصنيفية الجيدة و القياسية هو تحقيق العبارة الشهيرة "Write once, compile every where." أي أن تكتبه مرة واحدة وتصنفه أينما كان. (يمكن استعمال مصنف gcc في ويندوز بطريقتين أولهما هو مصنف minigw وهو جزء صغير من gcc ولكن يستعمل مكتبات MSVC لهذا فهو صغير الحجم ولكن أقل توافقية والثانية باستعمال cygwin بمكتبة glibc من GNU وهو أكبر بالتأكيد ولكن لن تحتاج لتعديل الكود انظر www.cygnus.com/misc/gnu-win32 و http://sourceware.cygnus.com/cygwin وبالحصول على الملف المصدري لمكتبات مثل gtk+ فإنك تستطي تصنيف بعض برامج لينكس في ويندوز)

هناك ميزة في gcc تسمى cross compiling أي أنك تستطيع تصنيف برامج لمعالج آخر (مثلاً المعالج الخاص بأجهزة PDA أو الخلويات) باستعمال جهاز IA أو حتى عمل ملف تنفيذي لنظام آخر غير لينكس.

 تلميح

لعمل نص بلغة تفسيرية كل ما عليك فتح محرر نصوص ثم وضع شابانغ #! متبوعة بمسار البرنامج المفسر في بداية البرامج مثلا #!/bin/bash لتدل على أن هذا الملف مكتب بلغة bash واذا كنت لا تعرف المسار إلى المفسر اكتب #!/bin/env متبوعة باسم البرنامج المفسر في بداية البرامج مثلا #!/bin/env wish

 تلميح

عادة لن تحتاج لبيئة تطوير إذا استخدمت محرر نصوص قوي مثل emacs أو vim أو إذا كنت لا تجيدها فإني أرى أن تستخدم برنامج kate انه محرر نصوص رائع وسهل وراقي أهم مزاياه أنه يوفر تلوين للنص (البرنامج) بحسب نوعه ويمكنه تقسيم البرنامج إلى وحدات منسقة في شجرة اضافة إلى وجود سطر للأوامر لتجريب البرنامج أو تصنيفه وغيرها من العمليات

  • لغة bash
    لغة سطر الأوامر في لينكس تعتبر سهلة لأنك ببساطة تعرف هذه الأوامر وكل ماعليك هو تريكيبها معا وعمل برنامج
  • لغة tcl/tk
    لغة برمجة متواضعة وبسيطة يمكن عمل برامج رسومية بها خصوصا إذا استعملت برامج visual tcl ولكنها تظل بسطية جدا وسطحية أهم تطبيق لها هو امكانية استدعائها من داخل لغة السي مما يسمح لك بتطور برنامج لعمل macro أو إذا كنت تعمل مستويات في لعبة ممكن أن تجعل كل شخصية تتحرك بمنطق معين بهذه اللغة أنا لا أنصح بهذه اللغة كلغة للتطوير (مجرد رأي)
  • لغة perl
    لغة أكثر ما يميزها قدرتها على معالجة النصوص عبر التعابير العادية "Regular Expretions" لهذا تعتبر من تقاليد لينكس إذ تأتي كخيار إجباري في معظم التوزيعات وتستخدم لتعديل ملفات الإعدادات وهي من لغات برمجة الإنترنت ويمكن لهذه اللغة أن تقوم بالكثير من الأشياء وهي أيضا سهلة ويمكن لأي كان أن يتعلمها وهي لغة برمجة كينونية
  • لغة python
    لغة برمجة موجهة للكائنات مما يزيد من سهولتها ويمكن لأي كان أن يتعلمها وهي اللغة التي تستعملها ريدهات لعمل برامج الإعداد يعمل مفسر اللغة على توليد ملف compiled python script ذات الإمتداد .pyc عند أول تشغيل (وعند أي تعديل) مما يجعلها تعمل بسرعة أكبر في المرات القادمة. ولها بيئات تطوير مثل PythonCard. أنصح بأن تكون مراحل التطوير الأولى لأي مشروع بهذه اللغة لتوفير الوقت الذي تستتهلكه عمليات التصنيف المتكررة.
  • لغة ruby
    لغة برمجة تفسيرية موجهة للكائنات (irb واجهتها التفاعلية)
  • لغة php
    لغة برمجة تستخدم بشكل أساسي لعمل صفحات الإنترنت وأن تكون واجهة للتعامل مع قاعدة بيانات mySQL ولكن يمكن عمل برامج أخرى بها
  • لغة java
    لغة سهلة يمكنها عمل برامج تطبيقية وبرامج للإنترنت وهي لغة تفسيرية موجهة للكائنات وهي لغة قياسية تعمل على أكثر من جهاز وأكثر من شركة تنتج المصنف الخاص بها وهي لغة تفسيرية ولكنها تنتج byte-code أو ما يسمى virtual machine code مما يفترض أن يجعلها تعمل أسرع من للغات التفسيرية الأخرى من مصنفاتها gnu-java و kaffe وهناك j2sdk من شركة sun الذي يفضله غالبية مبرمجي جافا.
  • لغة C/C++
    لغة البرمجة المفضلة لدى مبرمجي لينكس وتعتبر C أفضل لغة برمجة على الإطلاق وهي لغة برمجة هيكلية ولكن إذا أردت البرمجة الكينونية فعليك ب C++
  • لغة ForTran لغة قديمة صعبة وتستخدم عادة لأغراض التحليل العددي وحاليا استبدلت بشكل كامل بلغة C
  • لغة Pascal لغة قوية ولكن ليست شائعة في عالم لينكس ولكنها موجودة وهناك مصنفان لها FreePascal و GNUpascal ولعمل برامج رسومية GUI لديك الخيارات
    • kylix مكتبة وبيئة تطوير متكاملة يمكن تنزيلها مجانا من Borland
    • lazarus بيئة تطوير متكاملة تشبه Delphi
  • لغة Basic
    لا تستغرب إذا قلت لك أن فيروس أحب إلى مبرمج لينكس من لغة basic وعلى الرغم من ذلك يوجد بعض لغات بيسك في لينكس مثل kbasic و hbasic والأفضل هو gambas وعادة لاتأتي مثل هذه البرامج مع توزيعات لينكس ولا تتوقع أن تأتي في المستقبل
  • لغات الذكاء الصناعي Lisp مثل rep و Prolog مثل gprolog
 تلميح

تتقول أحد الطرائف أن البرمجة دون FORTRAN أو COBOL مثل شوكولاتة دون كتشب أو خل. (هذا ليس مديحاً لهما طبعاً)

لغات C/C++ و perl و python و php كل هذه اللغات قادرة على عمل برامج رسومية عن طريق مكتبات مثل gtk و qt أو tk.

لديك أيضا بيئات تطوير متكاملة رسومية IDE مثل kdevalop وهو يأتي مع أغلب التوزيعات وهو يوفر طريقة جيدة لإدارة المشاريع الكبيرة ويوفر نظام مساعدة يبدأ معك من الصفر فيشرح أساسيات C/C++ ويسترسل في الشرح إلى الأمور المتقدمة وإذا أردت ما هو أخف منه ليناسب المشاريع الصغيرة لديك anjuta وهو صغير يمكنك تنزيله ولدينا برامج تصميم واجهات رسومية مثل glade و glade2 الذي يعطي بلغة C/C++/perl/python وغيرها بطريقة gnome على مكتبة GTK وهناك برنامج لتصميم الواجهات الرسومية بطريقة KDE أي على مكتبة QT اسمه ‎Qt3 Designer هما يأتيان مع أغلب التوزيعات. الطريقة الأكثر شيوعاً هي استعمال محرر نصوص قوي وليس بيئة تطوير إذا كنت لم تألف أياً منها استعمل kate

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

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

# لإيجاد مساحة المستطيل
# البرنامج الرئيسي
# 1- رحب بالمستخدم واسأله عن الأبعاد
print_hello
# 2- خذ منه قيم عن الأبعاد في المتغيرين  w,h
get_input(w,h)
# 3- احسب المساحة
a=calcArea(w,h)
# 4- اطبع الجواب
print a
# انتهاء البرنامج
exit
# ================
# البرنامج الفرعي لكتابة السؤال
function print_hello
	print "Hello ,welcome to ..."
	print "enter the width and height"
end
# احسب المساحة
function calcArea(w,h)
	return w*h
end
# أخذ المساحة
function get_input(w,h)
	input w,h
end
# ... وهكذا ...

لاحظ أننا إذا قسمنا المسألة إلى مسائل أبسط نظل بحاجة إلى نقطة نهاية أي أبسط شيء في المرحلة الأخيرة علينا أن نستدعي شيئا لم نكتبه نحن وهذا ما يسمى بالمكتبة فأنت لن تكتب تفاصيل كل شيء وإنما تبني على أوامر موجودة في اللغة تسمى كلمات مفتاحية keywords أو تستدعي مكتبات كتبها غيرك أو تستدعي نظام التشغيل

وتمكننا البرمجة الهيكلية من حل مسائل لا نعرف حلها بطريقة الإستدعاء الذاتي recursion حيث تقوم الوظيفة باستدعاء نفسها مع معاملات مختلفة وهي المعادلات التي تكتب بالصيغة تعتمد فيها على نفسها ونضع لها نقطة بداية كما في المثال التالي (متسلسلة فابانسي)

An=An-1+An-2
A0=1
A1=1
مثلا احساب A5
A5=A4+A3
الآن يجب أن نحسب A4 و A3
لذا نستدعي نفس العلاقة لكن بوضع n بأربعة ثم بثلاث
A4=A3+A2
A3=A2+A1
A2=A1+A0=1+1=2
نعرف الآن A2 و A1 وهي التي تلزمنا لحساب A3
A3=A2+A1=2+1=3
نعرف الآن A3 و A2 وهي التي تلزمنا لحساب A4
A4=A3+A2=3+2=5
إذن
A5=A4+A3=5+3=8

يمكن أي يكون البرامج بالشكل التالي (بلغة وهمية)

function fa(n)
	if (n=1 or n=0) return 1
	else return fa(n-1)+fa(n-2)
end

هناك لغات مثل سي تجبرك على إعلان نوع المتغير مثل أن تقول أن A هي عدد صحيح و B نسبي وأن C مصفوفة من أعداد نسبية ، و D هو سلسلة من الحروف وهناك لغات لا تطلب ذلك وتحول الأنواع في ما بينها مما يسهل عليك ويجعل التنفيذ أقل سرعة مثل perl

ولكن حتى إذا جعلت برنامج منظماً ستضطر لكتابة البرامج من جديد إذا أردنا تطويره ليشمل فكرة أعم وفي البرامج الكبيرة يصبح لدينا الكثير من المتغيرات مثلا w ربما تعني عرض المستطيل أو عرض الشاشة ... الخ فتضطر إلى إعادة التسمية مثلا rectangle_width و area(w,h) ربما تصبح rectangle_area(rectangle_width,rectangle_height) ولكن عندها سيصبح الملف كبيرا جدا لحل هذه المشكلة ظهرة فكرة البرمجة الكينوية حيث هناك تعرف صنف class معين وتعرف ماذا له من خصائص properties أي متغيرات . وأفعال methods وهي نفسها الوظائف functions ويمكن أن تشترك هذه الخصائص في الاسم مع صنف آخر وتختلف في الطريقة مثلا المستطيل له مساحة والدائرة لها مساحة ولا داع لعمل أسماء طويلة مثل rectangle_area(rectangle_width,rectangle_height) و circle_area(radius) ولا داعي لأن تأخذ الطول والعرض لأنها من خصائص الكائن ، لذا فهي في جميع الأحوال area ثم تعرف كائن من هذا الصنف فيكون له هذه الخصائص والأفعال انظر هذا النص بلغة وهمية

# the is pseudo code 
class rectangle {
	integer w,h;
	integer area() {return w*h};
}
rectangle rect1;
rect1.w=10;
rect1.h=15;
print rect1.area();

لاحظ أننا استعملنا النقطة . بعد الكائن للوصول إلى خصائصه وبعض اللغات تستخدم -> وبعضها مثل C تستخدم هذه في أحيان وتلك في أحيان أخرى

والمميز في البرمجة الكينونية هو الوراثة أو الإشتقاق أي بناء أنواع جديدة من أخرى وذلك بأن تأخذ كل ما فيها وتضيف عليها مثلا الزر هو مربع وزيادة

المحتويات
حقوق النسخ والملكية الفكرة
ما هو لينكس؟
كيف تركب نظام لينكس؟
حقوق النسخ المرفوعة
وثائق التخويف

عرب-آيز
مجتمع لينكس العربي
موسوعة ثواب
موسوعة ويكيبيديا
تعريف البرمجيات الحرة
تعريف مفتوحة المصدر
LinuxToday
Linux.org
Linux.com
SlashDot
FreshMeat
LWN.net
توزيعات لينكس
النسخة الإسلامية لأوبنتو
عَرَبيان
جواثا (أول مسجد في أوروبا)
المزيد من التوزيعات هنا

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

 

ننصح باستخدام متصفحات الوب الحرة، جرب ثعلب النار الآن

يمكنك الحصول على الكثير من البرامج الحرة عالية الجودة من هنا مجاناً
proud to be 100% Microsoft FREE GNU FDL
التدخين حرام

كن كحامل المسك ولا تكن كنافخ الكير

Generously Hosted by www.JadMadi.net

Previous Up 6.1 لغات البرمجة Next
Copyright © 2007, Muayyad Saleh AlSadi