قوانین مشترک در قواعد نامگذاری زبانهای برنامهنویسی
معرفی چند روش نامگذاری
چه زمانی از چه شیوهی نامگذاری باید استفاده کرد؟
قواعد نامگذاری در برخی از زبانهای برنامهنویسی
جمعبندی
قواعد نامگذاری در برنامه نویسی نحوهی نوشتن و نامگذاری اسامی پوشهها، متغیرها، متدها، توابع، کلاسها، پکیجها و ... را تعیین میکند. برنامهنویسان از انواع مختلفی از روشها برای نامگذاری موجودیتهای مختلف در کدهای خود استفاده میکنند. از معروفترین قواعد نامگذاری میتوان Camel Case، Snake Case، Kebab Case و Pascal Case را نام برد.
انتخاب قواعد نامگذاری میتواند موضوع بحث برانگیزی باشد و هر کدام از روشهای ارائه شده برای آن کاربران و طرفداران خود را دارد. برخی از شرکتها نیز قواعد خاصی برای نامگذاری تدوین کردهاند. در این مقاله با قواعد نامگذاری و روشهای معروف آن بیشتر آشنا خواهیم شد. اگر شما قصد یادگیری برنامه نویسی را دارید یا اینکه برنامه نویسی بلد هستید ولی با قوائد نامگذاری آن آشنا نیستید این مقاله برایتان مفید خواهد بود.
چرا باید از قواعد نامگذاری پیروی کرد؟
برنامهنویسان برای بهبود کارکرد خود در ایجاد کدهایی بهینه با قابلیت خوانایی، عیب یابی و استفادهی مجدد بالا باید مهارتهای گوناگونی را بیاموزند که یکی از این مهارتهای ضروری یادگیری مجموعه قواعد کدنویسی است تا بتوان کدهایی با انسجام بالا در قالب و استایلی استاندارد ایجاد کرد. یکی از این قواعد، قواعد نامگذاری است.
در برنامهنویسی کامپیوتر قواعد نامگذاری مجموعهای از قوانین برای انتخاب دنبالهای از کاراکترهاست بطوریکه بتوان با آن نام متغیرها، توابع، کلاسها و سایر موجودیتها در کدها و مستندات را نمایش داد. دلایل استفاده از قواعد نامگذاری و ضرورت رعایت کردن آن توسط برنامهنویسها به جای استفاده از اسامی دلخواه با دنبالهای بدون قاعدهای خاص از کاراکترها، شامل موارد زیر است:
خوانایی کد منبع افزایش مییابد.
برنامهنویسان حین مرور کد بر موضوعاتی مهمتر از نام متغیرها متمرکز میشوند.
نحوهی نامگذاری متغیر میتواند اطلاعات اضافی درخصوص آن متغیر در اختیار استفادهکنندگان آن کد قرار دهد.
رعایت این قواعد میان اعضای تیم توسعهدهنده باعث تولید کدهایی با کیفیت و استاندارهای بالاتر میشود.
بازسازی، جستجو و جایگزینی توسط ابزار خودکار را با حداقل خطا ممکن میسازد.
وضوح کد افزایش مییابد.
ظاهر کد را زیباتر میکند. برای مثال زمانیکه برنامهنویس نباید از نامهای طولانی برای نامگذاری استفاده کند، ظاهر کدها تمیزتر میشود.
رعایت قواعد نامگذاری از بروز تداخل حین ترکیب کدها از بخشهای مختلف با هم، جلوگیری میکند.
میتوان کدهایی با دادههای معنیدار تولید کرد. این امر بخصوص زمانیکه باید کدها و مستندات را تحویل دیگران داد بسیار مهم است.
استفاده مجدد کد و درک کارکرد آن بخصوص هنگام مرور آن پس از مدت زمان طولانی از ایجاد آن راحتتر میشود.
چالشهای انتخاب قواعد نامگذاری در برنامهنویسی
از آنجاییکه افراد مختلف در یک تیم توسعه ممکن است سلیقه و نقطه نظرات متفاوتی داشته باشند، انتخاب روشی واحد گاه چالش برانگیز است. همچنین گاهی علیرغم قواعد تعریف شده برای نامگذاری در یک سازمان، این قواعد خارج از سازمان شناخته شده نیست و حین تبادل برنامه بین سازمانها ، سردرگمی در خوانایی برنامهها ایجاد میشود. حال اگر بخشهای مختلف یک سازمان قواعد نامگذاری مختلف به کار ببرند و یا بخشی از آنها از قواعد خاصی پیروی نکنند تجمیع و یکپارچهسازی کدها و برنامههای بخشهای مختلف با مشکل مواجه خواهد شد.
قوانین مشترک در قواعد نامگذاری زبانهای برنامهنویسی
قوانین دقیق برای قواعد نامگذاری متغیرها، توابع، کلاسها و ... بستگی به متن و محتوایی دارد که در آن به کار گرفته شدهاند. با این وجود، چندین قاعدهی مشترک وجود دارد که در همگی آنها بهتر است رعایت شوند.
1. ثبات در نامگذاری یا Consistency
برای هر مفهوم یک کلمهی مشخص انتخاب کنید و از آن کلمه در طول کد برای آن مفهوم استفاده کنید. برای مثال سه عبارت زیر را برای متد درخواست داده به صورت غیرمحلی (request data remotely) میتوان در نظر گرفت:
اگر واژهی fetch را برای اینکار انتخاب کردید، باید برای سایر درخواستهای راه دور و غیر محلی برنامه از این واژه استفاده کنید. برای مثال fetchPermissions و fetchUserDetails.
2. استفاده از اسامی معنیدار یا Meaningful
نویسندهی اصلی و اولیه کد با مدل فکری و پیشینهی ذهنی خود از کلیات برنامه یک کد را مینویسد. از این رو شاید خوانندهی دیگر کد، مدل ذهنی دیگری داشته باشد و کد نوشته شده برایش مبهم باشد. برای درک بهتر فرض کنید در بخشی از کدمان برای اشاره به تعداد کاربران از واژهی users استفاده کردهایم و طبق مدل ذهنی ما برای این برنامه، این واژه برای ما کاملاً ملموس و یادآورندهی تعداد کاربران است. اما بهتر است برای معنیدار بودن توسط بقیه از عبارت numberOfUsers استفاده کنیم تا بدون پیشینهی ذهنی راجع به کد هم بتوان درک درستی از قسمتهای مختلف آن داشت.
3. تمایزات معنادار یا Meaningful Distinctions
باید برای اهداف یکسان از اسامی یکسان استفاده کرد. در غیر اینصورت اگر هدف و کارکرد آن اسامی متفاوت بود نباید آن اسامی مشابه باشند. برای مثال هر سه عبارت getUserDetails، getUserInfo و getUserData یک مفهوم را دارند و نباید برای سه کار مختلف به کار گرفته شوند.
همچنین فرض کنید دو کلاس A و B را داریم. در هر دوی آنها تابع ()add را تعریف کردهایم. در کلاس A این تابع دو عدد را با هم جمع میکند و در کلاس B ورودی را به انتهای لیست از قبل تعریف شدهای میافزاید.
// Function in Class A
function add(x, y) {
return x + y;
}// Function in Class B
function add(x) {
this.items.add(x);
}
به کار بردن نام add برای هر دوی این توابع سبب ابهام میشود. پس بهتر است از addNumbers(x,y) در کلاس A و از insertElement(x) در کلاس B استفاده کرد.
4. اجتناب از رمزگذاری یا Avoid Encoding
از رمزگذاری غیر ضروری متغیرها کنار نام متغیرها اجتناب کنید. به مثال زیر توجه کنید:
string urlString;
int numberOfMembersInt;
Array<string> namesArray;
اگرچه گذاشتن اطلاعات درخصوص نوع داده در کنار نام متغیر در ظاهر میتواند مفید باشد اما این را در نظر داشته باشید که باید نامگذاری در سطحی انتزاعی رخ دهد و درگیر مفاهیم کدنویسی نشود.
5- استفاده از نامهای قابل تلفظ یا Pronounceable names
زبان یا کلماتی که جستجوی آنها در کد سخت باشد، مورد پسند کسی نخواهد بود. به مثال زیر توجه کنید:
const lblFName; //first name label
const nowTsMs; //now date timestemp since 1970 in milliseconds
اسامی متغیرهایی مانند مثال بالا از نظر تلفظ روان نیستند و از این رو بخاطر سپاری آنها نیز دشوار است. علاوه بر آن کد باید قابلیت جستجوی عبارات را داشته باشد. هرچه تعداد خطهای کد افزایش یابد نیاز به جستجو نیز بیشتر میشود و نامگذاریهایی این چنین، کار جستجو را سختتر میکنند.
6- نامگذاریها نباید توهینآمیز و یا غیررسمی باشد Don’t be Offensive/Cute
پروژهها و کدها ممکن است اوپن سورس باشند و یا در یک زمینهی فرهنگی خاص نشر پیدا کنند. از این رو کدهای شما را افراد مختلف با پیشینههای فرهنگی متفاوت ممکن است ببینند. پس باید در نامگذاری حواستان به تعابیر و برداشتهای مختلف و گاه متضاد از اسامیها باشد.
بطور کلی طبق قواعد نامگذاری در برنامهنویسی اسامی باید عمومی، مرتبط به موضوع و به دور از هر گونه لغات عامیانه در یک فرهنگ باشند.
7- استفاده از اسامی با مفهوم مثبت یا Positive
سعی کنید از مفاهیم مثبت در نامگذاری استفاده کنید. به طور مثال برای یک مقدار بولین به جای isDisabled از isEnabled، به جای isUndefined از isDefined و ... استفاده کنید.
به عنوان توصیهی نهایی و جمعبندی در این بخش به خاطر بسپارید که استفاده از کاراکترها و تایپ آنها بدون قاعدهی خاصی جهت نامگذاری اگرچه در ظاهر هزینهای برای کدنویس ندارد، اما یک کد ناخوانا در آینده قطعاً هزینهبر خواهد بود. پس همواره فراموش نکنید که:
شما تنها کسی نیستید که قرار است این کد را بخواند.
حال و هوای ما نباید در کدی که مینویسیم تأثیر بگذارد.
انسانها قرار است کد ما را بخوانند، نه رباتها. پس خوانایی آن و اسامی معنادار باید برایتان مهم باشد.
حتماً کد خود را پس از نوشتن مرور کنید و به جزئیات دقت کنید.
معرفی چند روش نامگذاری
در طی سالیان مختلف برنامهنویسان شیوههای مختلفی را برای چگونگی تایپ نامهای مختلف مانند متغیرها، توابع، کلاسها و ... به کار گرفتهاند. از میان این شیوههای مختلف چهار مورد مشهورترند و بیشتر استفاده میشوند:
Camel Case
Snake Case
Kebab Case
Pascal Case
شیوهی تایپ Camel Case
در این روش نوشتاری نامها با حرف کوچک شروع میشوند. اگر نامی از چند کلمه تشکیل شده باشد، ابتدای کلمات دیگر با حرف بزرگ تایپ میشوند. برای مثال عبارات firstName و lastName به شیوهی Camel Case هستند.
شیوهی تایپ Snake Case
در این روش نوشتاری نیز نامها با حروف کوچک نوشته میشوند و اگر نامی از چند کلمه تشکیل شده باشد، کلمات با علامت آندرلاین (_) از هم جدا میشوند. برای مثال عبارات first_name و last_name به شیوهی Snake Case هستند. شیوهای تحت عنوان Screaming Snake Case هم داریم که در آن تمامی حروف با حرف بزرگ نوشته میشوند و نامهای چندکلمهای با آندرلاین از هم جدا میشوند.
شیوهی تایپ Kebab Case
این روش نوشتاری نیز مشابه Snake Case است با این تفاوت که به جای آندرلاین از علامت خط تیره یا hyphen (-) برای جداسازی کلمات استفاده میکنند. برای مثال عبارات first-name و last-name به شیوهی Kebab Case هستند.
شیوهی تایپ Pascal Case
برخلاف تمامی شیوههای قبلی در این روش نوشتاری شروع نامها با حرف بزرگ است و اگر نامی از چند کلمه تشکیل شده باشد، هر کلمه با حرف بزرگ تایپ میشود. برای مثال FirstName و LastName به شیوهی PascalCase نوشته شدهاند.
پاسخ این سوال به زبان برنامهنویسی که شما با آن کار میکنید و نیز نوع موجودیتی که در آن زبان میخواهید نامگذاری کنید بستگی دارد. برای مثال در زبان برنامه نویسی پایتون نام متغیرها و توابع به شیوهی Snake Case است اما در زبان جاوااسکریپت متغیرها و توابع به شیوهی Camel Case نامگذاری میشوند. برای مثال در زبان پایتون داریم:
در زبان جاوا اسکریپت هم مثال مشابهی به شکل زیر داریم:
const userName = "Farhan";
function reverseName(name) {
return name.split("").reverse().join("");
}
با وجود اینکه در هر دوی زبانها برای نامگذاری متغیرها و توابع شیوهی مختلفی به کار گرفته شده است اما در هردو برای نامگذاری موجودیت کلاس از شیوهی Pascal Case استفاده میکنند. اینکه در هر زبانی از چه قانونی برای نامگذاری باید پیروی کرد بستگی به داکیومنت آن زبان در بارهی قواعد نامگذاری دارد. در ادامه به این موضوع بیشتر پرداختهایم.
قواعد نامگذاری در برخی از زبانهای برنامهنویسی
زبانهای برنامهنویسی هر کدام از قواعدی برای نامگذاری استفاده میکنند که برای نوشتن کدهای حرفهای رعایت این قواعد کمک کننده است. برای مثال در برخی از زبانها به سبک زبان C یا همان C-Styled مانند جاوااسکریپت، تایپ اسکریپت و جاوا از روش Camel Case برای نامگذاری متغیرها، توابع، متدها و ویژگیهای اشیا استفاده میکنند و Pascal Case را برای نامگذاری کلاسها، interfaceها و namespaceها به کار میبرند.
این به آن معنی نیست که شما نمیتوانید از شیوههای نامگذاری دیگر در این زبانها استفاده کنید. حتی میتوانید از روشهای غیر مرسوم نیز برای نامگذاری استفده کنید، اما توجه داشته باشید که رعایت قوانین نامگذاری هر زبان خوانایی کد و نگهداری آن را آسانتر میکند.
در جدول زیر قواعد نامگذاری برای زبانهای پایتون، پی اچ پی، سی شارپ، جاوا و جاوااسکریپت آورده شده است. برای مطالعهی بهتر این قواعد میتوانید به لینک داکیومنتهای هریک مراجعه کنید.
جمعبندی
در زبانهای برنامه نویسی قراردادهای نامگذاری برای خوانایی، درک، جستجو و نگهداری کدهای نوشته شده توسط هر زبان تعریف شدهاند. اگرچه عدم رعایت آنها در نامگذاری موجودیتهای زبان برنامهنویسی موجب خطای کامپایلری کد نمیشوند، اما به عنوان یک برنامهنویس که با تیمی متشکل از برنامهنویسان دیگر همکاری میکند، دانستن و رعایت این قوانین جزو ملزومات است. یک برنامهنویس باید همواره به فکر خوانایی و قابلیت استفادهی مجدد کدهای خود باشد و با رعایت اصول کدنویسی بتواند امتیاز کدهای تمیز و خوانا را به برنامههای خود اختصاص دهد.
مختصر و مفید و کاره راه بنداز و بهینه. من کلی گشتم اکثرا دوره ی ویدیوییی گذاشته بودن که اینو توضیح بدن(کلی هم وقت گیر) اما شما با یه جدول خلاصه کلام رو گفتین. مرسی
۰۳ تیر ۱۴۰۲، ۰۰:۱۰
سلام خسته نباشید. به نظر شما تو کورسهای برنامه نویسی مثل جاوا اسکریپت ، ریکت و یاحتی نود از بین maximilian و jonas کدومشون بهتره؟
ممنون میشم اگر تجربه ای دارید در اختیارم بذارید.
نازنین کریمی مقدم۰۹ تیر ۱۴۰۲، ۱۹:۳۸
درود
هر دو عالی هستند و مزایای خودشون رو دارند.
توصیه شده برای جاوا اسکریپت و نود جی اس جوناس و برای ری اکت و تایپ اسکریپت مکس انتخاب بشه.
<a href="https://www.quora.com/Which-ones-is-the-best-JavaScript-course-between-Maximilian-Schwarzmuller-or-Jonas-Schmedtmann-on-Udemy-com" target="_blank" rel="noopener nofollow ugc">مکس یا جوناس؟</a>
شروع رایگان یادگیری برنامه نویسی
کلیک کنید 👇
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: