تريند 🔥

📱هواتف

ما الفرق بين لغات C سي و ++C سي بلس بلس و C# سي شارب

المهندس سعيد عطا الله
المهندس سعيد عطا الله

تم التدقيق بواسطة: فريق أراجيك

8 د

في حال كنت مبرمجًا طموحًا، أو صاحب مشروعٍ برمجيٍّ، أو حتّى مجرّد هاوٍ في هذا مجال، فمن الصعب أن تحدّد أي لغةٍ تختار لتعلّمها أوّلًا، أو لاستخدامها عمليًّا، إذ نعيش اليوم في عالمٍ مُفعَمٍ بمئات لغات البرمجة. وبمجرد اختيار لغة، قد يكون من الصعب للغاية التحويل، أو التغيير إلى لغةٍ جديدةٍ، لذا عليك التفكير بعناية في خياراتك؛ فكيف إذًا لو كان الخيار بين لغات “سي” الثلاث؛ C، C++، C#، والتي تبدو لأي مبتدئٍ، أو غير مختصٍّ شيئًا واحدًا!؟

فيما يلي مقارنات أساسية بين اللغات الثلاث (C، C++، C#)، كلٌّ على حدا بشكلٍ عام، بالإضافة إلى الحكم عليها مثنى مثنى.


نظرة عامّة


لغة C

تُعَد لغة C الأقدم والأكثر استخدامًا من بين الثلاثة. اخترعها “دينيس ريتشي” في عام 1972 ثم نُشرَت في عام 1978، لتطوير نسخة جديدة من Unix؛ إذ استخدم نظام التشغيل Unix لغة التجميع، وهو أدنى مستوى من البرمجة يمكن قراءته بواسطة الكمبيوتر. اختراع C شكّل ثورةً في البرمجة وأنظمة التشغيل إلى الأبد، والبقيّة ـ كما يقولون ـ هو التاريخ!

تستخدم لغة C على نطاقٍ واسع لأنها تعمل بسرعةٍ كبيرةٍ. وبالمقارنة مع بعض اللغات الأخرى، فإنّ لغة C أقرب إلى العتاد المادّي للحاسوب (Hardware)، إذ يمكنها الوصول إلى مهام المستويات الدنيا لنظام الكمبيوتر.

لا يزال المبرمجون يستخدمونها في أنظمة التشغيل، وبرامج تشغيل الأجهزة (العتاد)، وتطبيقات الاتصالات، والتطبيقات التي تحتاج إلى التعامل مع التعليمات البرمجية القديمة. وسيرى معظم مبرمجي المدارس القديمة أن لغة C هي أفضل لغة برمجةٍ تبدأ بها لأن العديد من اللغات الجديدة تنبثق منها.

إن مجموع مستخدميّ C أصغر عددًا، مما يجعلها أقلّ استهدافًا من القراصنة. وقد أصبحت لغة C معيارًا رسميًا للمعهد الأمريكي الوطني للمعايير (ANSI)، كما العديد من لغات البرمجة تقترض بناء الجملة (التركيب) من C.


لغة C++

تم تطوير لغة C++ كامتداد للغة برمجة C، وتم إنشاؤها من قبل طالب دكتوراه في الدنمارك يدعى بيارني ستيرستروب Bjarne Stroustrup، وكان هدفه هو تحسين C وإضافة قدرات البرمجة الكائنية التوجّه (object-oriented programming) دون التضحية بالسرعة أو الكفاءة.

تعتبر لغة C++ لغة برمجة متوسطة المستوى، حيث أنّها تعتمد على لغة C منخفضة المستوى ولكنّها تتمتع بقدراتٍ أكثر تقدمًا. ومنذ أن نُشِرَت أول مرة في عام 1985، أصبحت لغة برمجةٍ متعدّدة الاستعمالات، وشائعةٍ للغاية، حيث يتم استخدامها إلى جانب C في تطوير أنظمة التشغيل، كما وتستخدم في تطبيقات الخادم والكمبيوتر، وبالأخصّ في التطبيقات التي تعتمد بشكلٍ أكبر على الواجهة الرسومية (GUI)، حيث يوجد كمّ أكبر من التفاعل أو “الحوار” مع المستخدم.

من السهل جدًا فهم C++ إذا كان لديك بالفعل أساسٌ جيّدٌ في لغة برمجة C، ولكن حتى من دون ذلك، فإنّ بإمكانك تعلّم لغة C++ كلغةٍ أولى إذا كنت ترغب في الانتقال مباشرةً إلى البرمجة الكائنية التوجّه (object-oriented programming).

لغة C++ هي أيضًا معيار رسمي لـ ANSI. ويعتبر تجمع مطوري C++ أصغر حجمًا، كونها غير مستخدمةٍ بقوّةٍ لتطبيقات الويب والهاتف الذكيّ.

يمثل اسم لغة C++ اصطلاحًا متطورًا عن اسم لغة C؛ لأن الرمز “++” يمثّل عامل الزيادة في لغة C.


لغة C#

C# أو “C Sharp” هي لغة برمجةٍ عالية المستوى، وكائنية التوجّه، وقد تم بناؤها أيضًا كامتداد للغة C. تم تطويرها بواسطة فريق في Microsoft بقيادة أندريس هيجليسبرغ في 2002. وهي تستند إلى إطار عملٍ .NET (.NET framework;)، ولكن العمود الفقري لها لا يزال بشكلٍ واضحٍ هو لغة C.

في حين أن C# هي الأكثر تعقيدًا من الناحية التقنية من بين اللغات الثلاث، فإن تركيبها أقل عرضةً للخطأ من C أو C++ ويمكن تعلمها بسرعةٍ نسبيةٍ. C# تجمع بين وظائف لغة C ولغة C++ مع Visual Basic، ويتم استخدامها على العديد من أنظمة التشغيل، وليس Windows فقط. وبينما تدعم لغة C++ البرمجة الكائنية التوجّه والبرمجة الإجرائية، فإن لغة C# هي لغة برمجةٍ موجهةٍ كائنيةٍ فقط.

استُلهِم اسم C# من النوتة الموسيقية حيث تشير علامة “#” إلى زيادة نصف “بعد” موسيقيّ للعلامة في “النوتة”، ويشبه الرمز “#” أيضًا تركيبة الرموز “++++” (أي رمزي ++ معًا)، للإشارة إلى أن C# هي زيادةٌ إبداعيةٌ في لغة C++.

يتم استخدامها لبناء العديد من أنواع برامج سطح المكتب (الحاسوب الشخصي)، والتطبيقات القائمة على الويب، كما تُستَخدَم C# عادةً في التطبيقات الداخلية أو المؤسسات، بدلًا من البرامج التجارية. ورغم أنّ إطار عمل .NET framework يتيح إمكانية عمل لغات برمجةٍ مختلفةٍ معًا، لكنّ C# تم تطويرها خصيصًا لإنشاء تعليمة برمجية لـ .NET framework.


الاختلافات الرئيسية بين لغات C، C++، C#

C و C++ هما لغتي برمجة متشابهتين بشكلٍ ملحوظٍ، رغم من وجود الكثير من الاختلافات، ولكن، ومن ناحيةٍ أخرى، فإن C# لديها الكثير من القواسم المشتركة مع لغاتٍ أخرى مثل Java. وفيما يلي دليلٌ سهلٌ لفهم الاختلافات بين C# وC++ و C.


C مقابل C++

لفهم الاختلافات بين C وC++ بشكلٍ كاملٍ، تحتاج إلى فهم مصطلح البرمجة الكائنية التوجّه (object-oriented programming)، إذ أنّ هذا مصطلح، من حيث صلته بالبرمجة، نشأ في معهد ماساتشوستس للتكنولوجيا في أواخر الخمسينيات أو أوائل الستينيات. تستخدم البرمجة الكائنية التوجّه (أو OOP) مفهومًا يسمى “الكائنات”؛ إذ أنّ الكائن هو مثيلٌ لفئة “class” (شكلٌ خاصٌ من أشكالها). ولغة C في الأصل ليست كائنية التوجّه، وهو الفرق الأكثر أهميةً بين الاثنين.

لغة C يمكن أن تُسمّى لغة برمجة “إجرائية” (procedural)، في حين أن لغة C++ هي هجين يجمع بين الإجرائية و”كائنيّة التوجّه” (object-oriented).

هناك اختلافات رئيسية أخرى بين C وC++

  • تم إنشاء C++ كامتداد لـ C، مما يعني أنه يمكن لـ C++ تشغيل معظم كود C ولكن العكس ليس صحيحًا، إذ لا يمكن لـ C تشغيل شفرة C++.
  • باعتبارها لغة كائنية التوجّه، تدعم C++ بعض الوظائف غير الموجودة في C، مثل تعدّد الأشكال (polymorphism)، والتغليف (encapsulation)…
  • في C، تكون البيانات، والمهام “كيانات حرّة”، مما يعني أنه يمكن معالجتها أو التلاعب بها برمزٍ (شيفرة) خارجيٍّ.
  • بما أن C++ تغلف البيانات والوظائف (المهام) معًا في “كائنٍ” واحدٍ، فإن هياكل البيانات ومشغلاتها تكون مخفيةً بالنسبة للرمز (الشيفرة) الخارجي.
  • تستخدم C وظائف (مهام) للإدخال والإخراج، بينما تستخدم C++ كائنات للإدخال والإخراج.
  • C++ تدعم المتغيرات المرجعية التي لا تدعمها C “المتغير المرجعي هو اسمٌ مستعارٌ لمتغيرٍ موجودٍ بالفعل، يستخدم لإنشاء تعليماتٍ مختزلةٍ، من أجل كتابةٍ أسرع.
  • لا تقدم C معالجةً للخطأ أو الاستثناء، ولكن C++ تقوم بذلك.

C++ مقابل C#

باعتبارها لغة برمجة أكثر حداثة، تم تصميم C# للعمل مع إطار Microsoft .NET الحالي في كل من تطبيقات العميل والويب. بينما تُعتَبَر C++ لغة كائنيّة التوجّه، C# تعتبر لغة برمجة موجهة “للمكونات” بمعنى (component-oriented).

البرمجة الموجهة للمكونات هي تقنيةٌ لتطوير تطبيقات البرمجيات من خلال الجمع بين المكونات الموجودة مسبقًا مع المكوّنات الجديدة، بنفس الطريقة التي يتم بها تصنيع السيارات من المكونات الأخرى.

فيما يلي بعض الاختلافات الرئيسية الأخرى بين C++ وC#:

  • تتطلب C++ منك معالجة الذاكرة يدويًا، ولكن C# تتيح التعامل مع إدارة الذاكرة تلقائيًا.
  • لا تستخدم C# مؤشرات، بينما يمكن لـ C++ استخدام المؤشرات في أي مكان.
  • يمكن استخدام C++ على أي نظام أساسي، على الرغم من أنه تم تصميمه في الأصل للأنظمة المستندة إلى نظام . C# نادرًا ما تُستَخدَم خارج بيئات Windows.
  • يمكن لـ C++ إنشاء تطبيقاتٍ وحدة التحكم، وتطبيقاتٍ مستقلةٍ (قائمة بذاتها).
  • يمكن لـ C# إنشاء وحدة تحكم، وتطبيقات Windows، و ASP.NET، وتطبيقات هواتف محمولة، ولكن لا يمكنها إنشاء تطبيقاتٍ مستقلةٍ (قائمة بذاتها).

في حين أن C وC# ترتبطان تقنيًا ببعضهما البعض، إلّا أنهما مختلفتان بشكلٍ كبيرٍ، لذا هناك اختلافاتٌ أكثر من أوجه التشابه بينهما.

امتلاك خلفية مع C يمكن أن يكون مفيدًا لتعلم C# لأن بعض البُنى المتقابلة متشابهة؛ ومع ذلك، فإنّ تراكيب C# أسهل، بحيث يمكنك التعرّف عليها دون معرفة C على الإطلاق.


أي لغة يجب أن تتعلمها أولاً؟

الآن لديك فهم واضح للاختلافات بين C#، وC++، وC، إذًا، كيف تختار أي واحدةٍ لتعلّمها كبداية!؟ إنّ الأساس الأوّل الذي يحدّد ذلك هو مستوى تعلّمك وخبرتك في مجال البرمجة بشكلٍ عام، إذ يمكن أن نميّز بين ثلاثة مستويات:

أوّلًا: المبرمجون الجدد:

إذا كنت لا تمتلك أي معرفةٍ سابقةٍ بلغات البرمجة ومفاهيمها بشكلٍ عام، وتريد البدء من الصفر تمامًا، فإن العديد من خبراء علوم الكمبيوتر يوصون بتعلم C أولًا؛ كونها لغةً أبسط مع خياراتٍ أقلّ من خليفتيها، إضافةً إلى أنّ العديد من اللغات الأخرى تستخدم البنى والمفاهيم التي قدمتها C؛ أي سيكون لديك متّسعٌ من الوقت، مع جهدٍ أقلّ لفهم لغاتٍ أخرى بعد تعلّم C.

ثانيًا: المبرمجون متوسّطو المستوى:

إذا كنت معتادًا على بعض مفاهيم البرمجة، وقمت بالفعل باستخدام بعض اللغات الأخرى، فقد ترغب في البدء مع C++. تعتبر لغات البرمجة الشيئية “الكائنيّة” أكثر شيوعًا في الوقت الحاضر من اللغات الإجرائية، وإذا كنت تمتلك بعض الخبرة في OOP )(Object-oriented programming فستجد C++ أسهل في التعلم.

ثالثًا: المبرمجون المتقدمّون (المختصون):

إذا كنت قد تعلمت بالفعل لغات برمجة متعددة وتحاول زيادة مستوى مهارتك، فإن اختيارك لأيٍّ من اللغات الثلاث يعتمد على ما كنت تأمل في الحصول عليه من التجربة.

يختار بعض المبرمجين الأصغر سنًا دراسة C كطريقةٍ لتعلم أساسيات الترميز، إذ يميل المبرمجون المخضرمون إلى ازدراء الجيل الأصغر لعدم احترامهم لجذورهم، لذا فإن معرفة C يمكن أن تكون نوعًا من المؤهلات “الشعبيّة” لأي وظيفةٍ جديدةٍ. وإذا كنت قد قضيت وقتًا في العمل باستخدام لغاتٍ كائنية التوجه، وكنت تبحث عن لغةٍ أخرى لإضافتها إلى سيرتك الذاتية بأقل جهدٍ، فإن C++ خيار رائع لذلك.

إذا كانت رغبتك الأساسية هي الوصول إلى تطوير .NET وweb-based، فقد تكون C# أفضل خيارٍ لك.


ما هي اللغة التي يجب أن تستخدمها لمشروعك!؟

قد يكون تعلّم لغة برمجةٍ خارج حساباتك بالمطلق، فأنت فقط تريد تنفيذ مشروعٍ ما تدخل البرمجة في صلبه، فعندها قد تجد نفسك في موقع اختيارٍ لواحدةٍ من تلك اللغات الثلاث!

بدايةً عليك معرفة أن مفاضلتك للغات من حيث كمّيّة استخدامها عالميًّا، ليست أسلوبًا فعّالًا من حيث التكلفة، أو مستوى النجاح المُتَوقّع. ولعلّ خير طريقةٍ لتحديد اللغة الصحيحة هي القيام بنشر مشروعك، ثم الطلب من مطوري البرامج إبداءَ رأيهم.

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

الخيار لك!

هل أعجبك المقال؟