رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
  • 0
قاسم رمضانی منش

بهینه ترین روش نام گذاری متغیر ها ، توابع و ...


سوال

با سلام !

به نظر برنامه نویسان حرفه ای ، وقتی یه پروژه ای (چند صد هزارخطی) به شما داده میشه چه انتظاری از نامگذاری توابع و متغیر ها دارید ؟ (چه انتظارات ظاهری از کد دارید ؟)

برای مثال :

  • کدام یکی از توابع زیر درک و خواندنش برای یک فرد خارجی (کسی که قصد ویرایش کد نوشته شد فرد دیگری را دارد) راحت تر است ؟
unsigned short int PrintArrayElemets(const int *Array);

int printArray(const int *arr);
  • سورس کد لینوکس (نوشته شده به زبان سی) تقریبا بیشتر قسمت ها توابع به اینصورت تعریف شده است ... آیا شما به عنوان یک ویرایشگر (برنامه نویسی حرفه ای) این روش را راحت برای خواندن و درک کد قبول میکنید ؟
unsigned short int 
PrintArrayElemets(const int *Array);

int 
printArray(const int *arr);

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

6 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0

سلام

اون مقدار بازگشتی تابع به چه معنی هست ؟ این توی هیچ کدوم از مثال ها مشخص نیستو توی گایدلاین سی پلاس پلاس ترجیه بر این گذاشته شده که وقتی داری خروجی میدی نام تایپت مشخص کننده باشه من الان هیچ چیزی به ذهنم نمیرسه وقتی اینو میبینم.

برای مثال هم این مورد رو نوشته :

 

class Date {
    // ...
public:
    Month month() const;  // do
    int month();          // don't
    // ...

میتونید برای خوندن موارد دیگه برای کد نویسی بهتر و اصولی‌تر نگاهی بهش بندازید:

C++ Core Guidelines

در مورد بالا و پایین گذاشتن اون تایپ‌ها هم نکته ای که هست اینه که بهتره از کد مدل استفاده کنید استایل ها متفاوت هست و هرکدوم یک شکل کار می‌کنند. مثلا یکیشون در نظر میگیره که ول صفحه ای که بشه کد رو بدون اسکرول افقی توش دید باید 80 کاراکتر باشه و بعد اگر طولانی بشه میکشنه خودش مثلا تعریف تابع رو به تعداد خطوط بیشتر.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

اونا مثال بود. گفتم که مثلا شما وقتی با یک (تابع|متغیر) بر خورد میکنید. انتظار دارید که شکل ظاهریش به چه صورت باشه.. و همینطور نامگذاری متغیر ها. 

  • اسم (متغیر|تابع) طولانی و با معنی باشه راحت ترید ؟
  • یا اینکه اسم متغیر کوتاه و مختصر باشه ؟

 

مرسی بابت لینک .

آها... اوکی مرسی:classic_huh:

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 13 دقیقه قبل، قاسم رمضانی منش گفته است :

اونا مثال بود. گفتم که مثلا شما وقتی با یک (تابع|متغیر) بر خورد میکنید. انتظار دارید که شکل ظاهریش به چه صورت باشه.. و همینطور نامگذاری متغیر ها. 

  • اسم (متغیر|تابع) طولانی و با معنی باشه راحت ترید ؟
  • یا اینکه اسم متغیر کوتاه و مختصر باشه ؟

 

مرسی بابت لینک .

آها... اوکی مرسی:classic_huh:

نام نیاز نیست خیلی طولانی باشه چون اگر اسکوپ بندی و استفاده از فضای نام و کلاس به جای خودش باشه به نظرم نام طولانی نیاز نیست میشه با حد اکثر سه کلمه منظور رو رسوند یا شایدم کمتر اگر از دییازنت پترن استفاده بشه و همه چیز اصولی باشه.

ولی در کل نام باید معنی داشته باشه مخفف کردن هم اصلا کار قشنگی نیست مگر برای فرمت اطلاعات که کلا باید مخفف باشند.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
ارسال شده در (ویرایش شده)

بعد نظرتون درباره Comment ها چیه ؟

شما به چه شکل ترجیه میدید ؟

۱- حالت اول :

void sortArray(std::array<int, g_arrayElements> &array)
{
 
	// Step through each element of the array
	// (except the last one, which will already be sorted by the time we get there)
	for (int startIndex = 0; startIndex < g_arrayElements - 1; ++startIndex)
	{
		// smallestIndex is the index of the smallest element we’ve encountered this iteration
		// Start by assuming the smallest element is the first element of this iteration
		int smallestIndex = startIndex;
 
		// Then look for a smaller element in the rest of the array
		for (int currentIndex = startIndex + 1; currentIndex < g_arrayElements; ++currentIndex)
		{
			// If we've found an element that is smaller than our previously found smallest
			if (array[currentIndex] < array[smallestIndex])
				// then keep track of it
				smallestIndex = currentIndex;
		}
 
		// smallestIndex is now the smallest element in the remaining array
		// swap our start element with our smallest element (this sorts it into the correct place)
		std::swap(array[startIndex], array[smallestIndex]);
	}
}

۲- حالت دوم :

void sortArray(std::array<int, g_arrayElements> &array){
 
	// Step through each element of the array
	// (except the last one, which will already be sorted by the time we get there)
	// smallestIndex is the index of the smallest element we’ve encountered this iteration
	// Start by assuming the smallest element is the first element of this iteration
	// Then look for a smaller element in the rest of the array
	// If we've found an element that is smaller than our previously found smallest
	// smallestIndex is now the smallest element in the remaining array
	// swap our start element with our smallest element (this sorts it into the correct place)
	for (int startIndex = 0; startIndex < g_arrayElements - 1; ++startIndex){	
		int smallestIndex = startIndex;
		for (int currentIndex = startIndex + 1; currentIndex < g_arrayElements; ++currentIndex)
		{
			if (array[currentIndex] < array[smallestIndex])
				smallestIndex = currentIndex;
		}	
		std::swap(array[startIndex], array[smallestIndex]);
	}
}

 

ویرایش شده در توسط قاسم رمضانی منش

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

تا حدودی هیچ کدوم

در واقع کد خوب کدیه که خیلی کامنت نداشته باشه و خیلی توش حلقه فور نبینی البته این نظر حاج خانم کیت گرگوری هست که به گفته خودش از وقتی کد سی پلاس پلاس میزده که اصلا مایکروسافت کامپایلر سی پلاس پلاس نداشته.

من دوره سی پلاس پلاس مدرنش رو دیدم تاکید میکرد که هی فرت و فرت کامنت نذارید. عقیدش اینه که اگر کسی داره کد رو میخونه و قراه بفهمه اول این که باید برنامه نویس باشه و این خودش تا مراحلی کار رو پیش میبره دوم این که مدام از فور استفاده نشده و تا جای ممکن از توابع معن‌یدار استفاده بشه مثلا از توابع سرفایل Algorithm خیلی استفاده می‌کرد که تا حد خوبی پوشش میده مسائلی که براشون فور میزنیم رو و نکته دیگه این که میگفت مثلا اگر داری یه کاری میکنی که نیاز به کامنت داره عنوان کارت رو بکن نام تابع و این کار رو توی اون تابع انجام بده البته اینو مطمئن نیستم ایشون گفته باشه ولی در کل توی تمیز نویسی تاکید بر اینه .

تا جای ممکن باید کامنت توی کد کم باشه و باز به قول ایشون کد خودش باید گویا باشه و باهات حرف بزنه مثلا برای این مثالی که شما فرستادید میشه خیلی راحت بجای پیاده کردن این تابع از تابع std::sort استفاده کرد بجای این که خودمون پیاده کنیم.

میدونم این مثال هست برای کامنت ولی نمیشه روی یه مثال کوچیک توضیح داد و تعمیم داد به برنامه های بزرگ باید کل برنامه دیده بشه .

توی کدهای واقعی فقط جایی که خیلی خیلی پیچیده هستند باید یک توضیح کوتاه داده بشه و اگر داره استانداردی پیاده میشه یا علمی پیاده میشه که جدای از برنامه نویسیه مثل شبکه و یا ... بهتره فقط لینک به موضوع داده بشه و اگر جایی پیچیدگی برنامه نویسی داره یه کامنت کافیه براش من خودم به شخصه وقتی یه کد پر کامنت میبینم به همون اندازه ناراحت میشم که یه کد بی کامنت میبینم چون حقیقتا حال ندارم این همه کامنت رو بخونم ترجیه میدم کد رو بخونم تا متوجه موضوع بشم. چون کد کاری هست که داره انجام میشه ولی کامنت چیزیه که برنامه نویس دوست داشته پیاده کنه ?

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 3 ساعت قبل، قاسم رمضانی منش گفته است :

با سلام !

به نظر برنامه نویسان حرفه ای ، وقتی یه پروژه ای (چند صد هزارخطی) به شما داده میشه چه انتظاری از نامگذاری توابع و متغیر ها دارید ؟ (چه انتظارات ظاهری از کد دارید ؟)

برای مثال :

  • کدام یکی از توابع زیر درک و خواندنش برای یک فرد خارجی (کسی که قصد ویرایش کد نوشته شد فرد دیگری را دارد) راحت تر است ؟

unsigned short int PrintArrayElemets(const int *Array);

int printArray(const int *arr);
  • سورس کد لینوکس (نوشته شده به زبان سی) تقریبا بیشتر قسمت ها توابع به اینصورت تعریف شده است ... آیا شما به عنوان یک ویرایشگر (برنامه نویسی حرفه ای) این روش را راحت برای خواندن و درک کد قبول میکنید ؟

unsigned short int 
PrintArrayElemets(const int *Array);

int 
printArray(const int *arr);

 

از نظر من استایل اول بهتر از استایل دوم هست.

مستندات مربوط به Google C++ Style Guide رو هم بررسی کن.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...