الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما اسم ال Notation المستخدم في أسماء المتغيرات في مكتبات السي بلس .

بدأه Abdullah.Alshammeri في 31 أغسطس 2009 · 14 رد · 1,698 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ,

- ألاحظ في مكتبات السي والسي بلس أسلوب موحد في كتابة الدوال والمتغيرات .. مثلا :

printf

get_max_value

vector

الخ ..

حيث يستخدمون دائما حروف صغيرة + الاندرسكور underscore لفصل ألاسماء في الداول أو والكلاس اوالمتغير .

السؤال : ما اسم هذا الاسلوب ؟

السؤال الثاني : أنت ماذا تستخدم .. هل تستخدم أسلوب لغة الجافا في التسمية أم Hungarian notation .. أم اسلوب لغة السي .. أم لاتهتم لذلك ؟!

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

أنا أرتاح أكثر للnotation الخاص ب#C و هو مزيج بين الcamelNotation و الPascalNotation

الProperties و الMethods و الClasses و الNamespaces و الStrucrures و الDelegates و الثوابت كلها تكتب بالPascal Casing و هو جعل أو حرف من كل كلمة capital على سبيل المثال SaveData أو GetCustomerByName

المتغيرات الداخلية في الدوال أو الmethod parameters تتبع الcamel notation و هي أن تكون أول حرف من أو كلمة small و أول حرف من كل كلمة تتلوها capital على سبيل المثال firstName او dateOfBirth

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#3

انا استخدم الاسلوب الذى قال عليه الأخ motamayez بإستثناء المتغيرات الـ private تكون كلها small و تبدأ بـ underscore.

مدونتي: C++ Tips and Tricks

#4

السلام عليكم ...

اقتباس
السؤال : ما اسم هذا الاسلوب ؟

هذا أسلوب Unix الأصلي, و C و ++C تتبعان نفس الأسلوب. الأسلوب مأخوذ من Richie و رفاقه القدامى و أحدهم بالطبع Stroustrup الذي كان يعمل معه لعشرات السنين :)

اقتباس
انا استخدم الاسلوب الذى قال عليه الأخ motamayez بإستثناء المتغيرات الـ private تكون كلها small و تبدأ بـ underscore.

أكره هذا الأسلوب عندما يصبح الكود عجينة من الـ underscores في كل مكان :P

اقتباس
السؤال الثاني : أنت ماذا تستخدم .. هل تستخدم أسلوب لغة الجافا في التسمية أم Hungarian notation .. أم اسلوب لغة السي .. أم لاتهتم لذلك ؟!

أنا أستخدم الـ camelNotation في الغالب, و لكن أجد الـ unix notation مريح في الكتابة بالمناسبة و أستخدمه أحياناً و لكني لا أخلط الأسلوبين :)

تحياتي ...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 31 أغسطس 2009 في 18:43

#5

سؤال آخر قد يطرح نفسه هنا هو كيف تسمي متغيراتك

هل تأخذ راحتك مع الأسماء و تستعمل أسماء طويلة و معبرة كالتالي theFirstCharacterOfTheCurrentWord

أم تفضل التلخيص و التقليص مثل

_1stChar

#6
اقتباس
سؤال آخر قد يطرح نفسه هنا هو كيف تسمي متغيراتك

لا أعتقد أن الأسماء الطويلة مشكلة, يمكنك تحميل Visual Assist X و ستحل المشكلة من جذورها و تصبح جميع الأسماء أمامك بمجرد كتابة أول حرف من الكلمة.

المشكلة ان الأسماء الطويلة تصبح اصعب في القراءة من الأسماء الأقصر, و لكن هذا لا يعني أن نسمي متغيراتنا بأسماء لا معنى لها.

على سبيل المثال, سأسمي theFirstCharacterOfTheCurrentWord

firstChar

أو بأسلوب الـ unixers :

firstc

تحياتي...

#7

امم .. جميل .. شكرا على المعلومات .

هناك أسلوب لا أعرف الى أي مدرسة ينتمي ؟؟ .. لكن أجده رائع .. يوضّحه هذا الكود :

class ClassName
private:  
int m_xPos;
void _privateFunction(int _x)
{
   int _temp = m_xPos + _x;
}
public:
void setPosition(int _x)
{
_privateFunction(_x);
}

};

كما تلاحظون ... أعضاء الكلاس تبدا بالحرف m ثم underscore .. وأي متغير محلي يبدأ بالـ Underscore .. وكذلك الدوال المحمية private .. لان المستخدم النهائي لايستخدمها .

بهذا الاسلوب .. أستطيع الوصول بسرعة الى أي متغير محلي فقط بكتابة underscore ، وأستطيع الوصول الى أي عضو member فقط بكتابة حرف m ثم underscore

أما أي دالة أو متغير public فنستخدم camelNotation ( لم أكن أعرف أنه يسمّى بهذا الاسم ) .

أما الكلاس و enum .. الخ .. فأضع أول حرف من كل كلمة Capital ,

تم تعديل هذه المشاركة بواسطة الشمري في 31 أغسطس 2009 في 19:45

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8
اقتباس
كما تلاحظون ... أعضاء الكلاس تبدا بالحرف m ثم underscore .. وأي متغير محلي يبدأ بالـ Underscore .. وكذلك الدوال المحمية private .. لان المستخدم النهائي لايستخدمها .

استخدام الـ underscore في بداية أسماء الدوال أو المتغيرات طريقة سيئة جداً. صحيح أن البعض يستخدمها أحياناً, و لكن هذا خاطئ, هذا ما تقوله المواصفات القياسية:

17.4.3.1.2

Certain sets of names and function signatures are always reserved to the implementation:

Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase

letter (2.11) is reserved to the implementation for any use.

Each name that begins with an underscore is reserved to the implementation for use as a name in the

global namespace

ببساطة المتغيرات أو لنقل الـ identifiers التي تبدأ بـ underscore محجوزة للاستخدام لصانع المترجم و المكتبة القياسية. يمكن أن تستخدمها و لكن ربما يحصل تعارض, عدا عن الأسماء التي تبدأ بـ underscore فلك الحق في استخدام ما تشاء.

لهذا السبب ستجد أن قراءة كود STL صعب جداً:

vector(const _Myt& _Right)
	: _Mybase(_Right._Alval)
	{	// construct by copying _Right
	if (_Buy(_Right.size()))
		_TRY_BEGIN
		_Mylast = _Ucopy(_Right.begin(), _Right.end(), _Myfirst);
		_CATCH_ALL
		_Tidy();
		_RERAISE;
		_CATCH_END
	}

أعتقد أنهم يقومون بكتابة المكتبة بشكل طبيعي في البداية ثم يمررونها على أداة لضبط الـ conventions و إضافة الـ underscore قبل أسماء المتغيرات الداخلية للمكتبة.

تحياتي ...

2
#9

أسماء المتغيرات الطويلة يفضل أن تستخدم فقط في المتغيرات العامة Global Variable والتي تستخدم طيلة عمل البرنامج ،، أما الأسماء المختصره فتكون داخل الLocal Function لأنها سرعان ما تنتهي بانتهاء الدالة ،، بالنسبة للحلقات فالConvnetion داخل الحلقات هي متغيرات i,j,k,l... وهي عادة من ايام الفورتران ..

بالنسبة للمتغيرات داخل الكلاس ، فمبرمجين سي++ عادة يضعوا الحرف m قبل أي إسم متغير داخل الكلاس للإشاره لأنه متغير عضو .. مثلا mName ، وفي حال استقبلت أحدى دوال الكلاس قيمه لكي تنسدها في المتغير السابق سوف يستقبلها في متغير باسم name أو aName .

أما مبرمجين الجافا لا يفضوا وضع أي prefix في اسم المتغير ،، والparameter يكون أيضا بنفس الإسم وداخل الدالة يتم استخدام this للتفرقة بين المتغير العضو وبين المعامل المرسل ،،

عن نفسي أستخدم طريقة الجافا حتى عندما أكتب بسي++ ..

بالتوفيق :) .

2

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#10
اقتباس
أكره هذا الأسلوب عندما يصبح الكود عجينة من الـ underscores في كل مكان :P

حقيقى بدون هذا الإسلوب يصبح صعب التفرقه بين المتغيرات الـ private و الـ protected و الـ public

حيث فى حالة المتغيرات الـ Private يتم استخدام underscore واحده فقط قبل اسم المتغير و الإسم نفسه يكون كله حروف ضغيره و اول حرف منه يشير إلى نوعه مثل

 

[color= #0000ff;]class test

[color= #000000;]{

[color= #0000ff;]private[color= #000000;]:

    [color= #0000ff;]int _nvar;

[color= #000000;]};

و كما تلاحظ اولا عرفنا من اسم المتغير انه private لإنه يبدأ بـ underscore كذلك نوعه signed interger لإنه يبدأ بـ n.

توجد اختصارات عديده لأنواع البيانات.

فى حال المتغيرات الـ protected يتبع نفس اسلوب المتغيرات الـ private و لكن قبل الـ underscore يوضع الحرف m ليدل على انه member variable

 

[color= #0000ff;]class test

[color= #000000;]{

[color= #0000ff;]protected[color= #000000;]:

    [color= #0000ff;]char[color= #000000;]* m_pcvar;

[color= #000000;]};

فى حالة المتغيرات الـ public (و هى قليلا ما توجد) استخدم الـ camelCase مثل hFile.

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

اقتباس
ببساطة المتغيرات أو لنقل الـ identifiers التي تبدأ بـ underscore محجوزة للاستخدام لصانع المترجم و المكتبة القياسية. يمكن أن تستخدمها و لكن ربما يحصل تعارض, عدا عن الأسماء التي تبدأ بـ underscore فلك الحق في استخدام ما تشاء.

اعرف ان الكلمات المحجوزه بلغة c++ الخاصه بميكروسوفت تبدأ دائما بـ double underscore و قليلا ما اجد كلمة محجوزه تبدأ بواحد إلا لو اصبحت deprecated.

ماذا الفرق بين المتغيرات و الأسماء التى ذكرتها اخى اخالد ؟؟

اعتقد انه لابد من كل مبرمج اما ان يتبع اسلوب معين من الأساليب المتاحه او يصنع لنفسه واحد يتبعه حتى يصبح الكود الخاص به standard له (على الأقل) و بالتالى لا ينسى معنى نقطه معينه من الكود حتى لو لم يكن عليها ملاحظات.

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 1 سبتمبر 2009 في 00:12

مدونتي: C++ Tips and Tricks

#11
اقتباس
اعرف ان الكلمات المحجوزه بلغة c++ الخاصه بميكروسوفت تبدأ دائما بـ double underscore و قليلا ما اجد كلمة محجوزه تبدأ بواحد إلا لو اصبحت deprecated.

هذا ليس له علاقة بـ Microsoft أخي محمد, هذا من الـ Standard Cpp. بحيث تحصر صناع المترجمات لكي لا يحصل تضارب عند نقل الكود بين مترجم و آخر.

اقتباس
اعتقد انه لابد من كل مبرمج اما ان يتبع اسلوب معين من الأساليب المتاحه او يصنع لنفسه واحد يتبعه حتى يصبح الكود الخاص به standard له (على الأقل) و بالتالى لا ينسى معنى نقطه معينه من الكود حتى لو لم يكن عليها ملاحظات.

أتفق معك, ليس هناك قاعدة واحدة في هذا الأمر. كل ما كان الكود أوضح كان هذا هو الهدف :)

تحياتي ...

#12
اقتباس
هذا ليس له علاقة بـ Microsoft أخي محمد, هذا من الـ Standard Cpp. بحيث تحصر صناع المترجمات لكي لا يحصل تضارب عند نقل الكود بين مترجم و آخر.

هل تتكلم عن انواع البيانات بشكل عام داخل C++ ام ماذا؟؟

حيث انى عندما قرأت الـ C++ Standard Manual لم اجد اى اشاره إلى هذه النقطه و للعلم فأنا لم اقرأ إلا النسخه الخاصه بالـ C++ 2006 و النسخه الـ Draft من C++ 2009 او C++x0.

مرفق النسخه الـ Draft لـ C++x0 2009 من ISO بتاريخ 22-6-2009

ملحوظه : انا لا اجادل فى شئ و لكنى فقط احب معرفة ما هو الصحيح و شكرا لك :)

C__0xN2009.rar

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#13

أخي محمد, للأسف الملف المضغوط غير صالح,

هذه النسخة التي لدي, و هي Cpp03 و ليست draft, راجع الفقرة التي اشرت إليها.

C___Standard___ANSI_ISO_IEC_14882_2003.rar

#14

هذا ما وجدته فى نسخة 2003 التى اشرت اليها اخى خالد

17.4.3.1.2 Global names

Certain sets of names and function signatures are always reserved to the implementation:

— Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.

— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

و هذا ما وجدته فى نسخة 2006

17.4.3.1.2 Global names

Certain sets of names and function signatures are always reserved to the implementation:

— Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.

— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.168

و هذا ما وجدته فى نسخة 2009 الـ Draft

17.6.3.3.2 Global names

Certain sets of names and function signatures are always reserved to the implementation:

— Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.12) is reserved to the implementation for any use.

— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

لا اعرف ماذا حل بالمرفق سأقوم برفعه مره اخرى.

نقطه اخيره شكرا لك اخى خالد على التوضيح و فى المره القادمه سأقوم بالقراءه بتأنى :blush:

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 1 سبتمبر 2009 في 03:38

مدونتي: C++ Tips and Tricks

#15
اقتباس
نقطه اخيره شكرا لك اخى خالد على التوضيح و فى المره القادمه سأقوم بالقراءه بتأنى

خيرها بغيرها :)

مواضيع مشابهة