دستورالعمل‌های کد نویسی در node.js
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 6 دقیقه

دستورالعمل‌های کد نویسی در node.js

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

توسعه دهندگان نرم افزار مانند گرگ‌های تنها هستند که ترجیح می‌دهند به عنوان یک فرد به جای گروه کار کنند. من هم در آن دسته قرار می‌گیرم. این امر گاهی اوقات می‌تواند مشکلاتی را ایجاد کند در پروژه‌هایی که نیاز به کار گروهی وجود دارد.

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

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

قالب بندی

  • ۴ فاصله برای تورفتگی.

برای ایجاد تورفتگی در کد خود از ۴ فاصله استفاده کنید و هرگز زبانه‌ها و فضا‌ها را با هم مخلوط نکنید در غیر این صورت نوع دیگری از جهنم در انتظار شماست.

  • خطوط جدید.

از خطوط جدید به سبک UNIX یعنی (\n) و از یک خط جدید به عنوان آخرین کاراکتر یک پرونده استفاده کنید. خطوط جدید به سبک ویندوز (\ r \ n) در هر مخزنی ممنوع است.

  • فضای خالی وجود ندارد.

درست مثل مسواک زدن بعد از هر وعده غذایی، فضای خالی عقب در فایل‌های .js  را پاک کنید در غیر این صورت بوی گندیده و غفلت را خواهد داد.

  • از نقطه ویرگول استفاده کنید.

طبق تحقیقات علمی ، استفاده از علامت‌های ویرگول یک ارزش اصلی در جامعه ما است.

  • ۸۰ حرف در هر خط.

خطوط خود را به ۸۰ حرف محدود کنید. بله، در طول چند سال گذشته صفحه نمایش بسیار بزرگتر شده است، اما مغز شما این کار را نکرده است. از اتاق اضافی برای تقسیم صفحه استفاده کنید، آیا ویرایشگر شما از آن به درستی پشتیبانی می‌کند؟

  • از تک کوتیشن استفاده کنید.

از تک کوتیشن استفاده کنید، مگر اینکه JSON می‌نویسید. این به شما کمک می‌کند رشته‌های خود را از رشته‌های معمولی جدا کنید.

درست:

var foo = ‘bar’;

غلط:

var foo = “bar”;
  • براکت‌های باز در همان خط قرار می‌گیرند.

درست:

if (true) {
    console.log(‘winning’);
}

غلط:

if (true) 
{
    console.log(‘losing’);
}

همچنین، به استفاده از فضای خالی قبل و بعد از بیان وضعیت توجه کنید. اگر بخواهید "else" یا "if else" را همراه با "if" خود بنویسید، چه باید کرد؟

درست:

if (true) {
    console.log(‘winning’);
} else if (false) {
    console.log(‘this is good’);
} else {
    console.log(‘finally’);
}

 غلط:

if (true)
{
    console.log(‘losing’);
}
else if (false)
{
    console.log(‘this is bad’);
}
else
{
    console.log(‘not good’);
}
  • در هر خط یک متغیر تعریف کنید.

در هر variable یک متغیر تعریف کنید، زیرا ترتیب مجدد خطوط آسان‌تر می‌شود.

درست:

var keys = [‘foo’, ‘bar’];
var values = [23, 42];
var object = {};

غلط:

var keys = [‘foo’, ‘bar’],
values = [23, 42],
object = {},
key;

نامگذاری قرارداد‌ها

  • برای نامگذاری متغیرها، خصوصیات و توابع از lower Camel Case استفاده کنید.

نامگذاری متغیر‌ها، خصوصیات و توابع باید به صورت lower Camel Case انجام شود. آن‌ها همچنین باید توصیفی باشند. به طور کلی باید از متغیرهای تک کاراکتری و اختصارات غیرمعمول اجتناب کنید.

درست:

var adminUser = db.query(‘SELECT * FROM users …’);

غلط:

var admin_user = db.query(‘SELECT * FROM users …’);
  • برای نام کلاس‌ها از Upper CamelCase استفاده کنید.

نام کلاس‌ها باید Upper CamelCase باشد.

درست:

function BankAccount() {
}

غلط:

function bank_Account() {
}
  • برای ثابت‌ها از UPPERCASE استفاده کنید.

ثابت‌ها را باید با تمام حروف بزرگ به عنوان متغیرهای منظم یا خصوصیات کلاس استاتیک تعریف کنید.

درست:

var SECOND = 1 * 1000;
function File() {
}
File.FULL_PERMISSIONS = 0777;

غلط:

const SECOND = 1 * 1000;
function File() {
}
File.fullPermissions = 0777;

متغیرها

  • آبجکت و آرایه

از کاما‌های انتهایی استفاده کنید و اظهارات کوتاه را روی یک خط قرار دهید. زمانی از کوتیشن‌ها در کلید‌ها استفاده کنید که مفسر شکایت کند:

درست:

var a = ['hello', 'world'];
var b = {
  good: 'code',
  'is generally': 'pretty',
};

غلط:

var a = [
  'hello', 'world'
];
var b = {"good": 'code'
        , is generally: 'pretty'
        };

شروط

  • از عملگر === استفاده کنید.

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

درست:

var a = 0;
if (a !== '') {
  console.log('winning');
}

غلط:

var a = 0;
if (a == '') {
  console.log('losing');
}
  • از شرایط توصیفی استفاده کنید.

هر شرایط پیش پا افتاده‌ای باید به یک متغیر یا تابع توصیف شده اختصاص داده شود:

درست:

var isValidPassword = password.length >= 4 && /^(?=.*\d).{4,}$/.test(password);
if (isValidPassword) {
  console.log('winning');
}

غلط:

if (password.length >= 4 && /^(?=.*\d).{4,}$/.test(password)) {
  console.log('losing');
}

توابع

  • توابع را کوچک بنویسید

عملکردهای خود را کوتاه نگه دارید. تابعی خوب است که افراد ردیف آخر یک اتاق بزرگ بتوانند راحت آن را بخوانند.

  • بازگشت سریع از توابع

برای جلوگیری از تودرتو نویسی عمیق دستورات، همیشه مقدار یک تابع را در اسرع وقت بازگردانید.

درست:

function isPercentage(val) {
  if (val < 0) {
    return false;
  }
  if (val > 100) {
    return false;
  }
  return true;
}

غلط:

function isPercentage(val) {
  if (val >= 0) {
    if (val < 100) {
      return true;
    } else {
      return false;
    }
  } else {
    return false;
  }
}

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

function isPercentage(val) {
  var isInRange = (val >= 0 && val <= 100);
  return isInRange;
}
  • زنجیر زدن متد

اگر می‌خواهید متدهای زنجیره‌ای داشته باشید باید از یک روش در هر خط استفاده شود.

شما همچنین باید این متد‌ها را بر‌جسته کنید تا تشخیص اینکه آن‌ها بخشی از یک زنجیره هستند راحت‌تر شود.

درست:

User
.findOne({ name: ‘foo’ })
.populate(‘bar’)
.exec(function(err, user) {
return true;
});

غلط:

User
.findOne({ name: 'foo' })
.populate('bar')
.exec(function(err, user) {
  return true;
});
User.findOne({ name: 'foo' })
  .populate('bar')
  .exec(function(err, user) {
    return true;
  });
User.findOne({ name: 'foo' }).populate('bar')
.exec(function(err, user) {
  return true;
});
User.findOne({ name: 'foo' }).populate('bar')
  .exec(function(err, user) {
    return true;
  });

کامنت گذاری

  • از بک اسلش برای کامنت گذاری استفاده کنید

از اسلش‌ها برای نظرات تک خطی و چند خطی استفاده کنید. سعی کنید نظراتی بنویسید که سازوکا‌ر‌های سطح بالاتر را توضیح دهد یا بخش‌های دشواری از کد شما را روشن کند. برای بیان موارد بی‌اهمیت از نظرات استفاده نکنید.

درست:

// 'ID_SOMETHING=VALUE' -> ['ID_SOMETHING=VALUE', 
// 'SOMETHING', 'VALUE']
var matches = item.match(/ID_([^\n]+)=([^\n]+)/));
// This function has a nasty side effect where a failure to 
// increment a redis counter used for statistics will 
// cause an exception. This needs to be fixed in a later iteration.
function loadUser(id, cb) {
  // ...
}
var isSessionValid = (session.expires < Date.now());
if (isSessionValid) {
  // ...
}

غلط:

// Execute a regex
var matches = item.match(/ID_([^\n]+)=([^\n]+)/);
// Usage: loadUser(5, function() { ... })
function loadUser(id, cb) {
  // ...
}
// Check if the session is valid
var isSessionValid = (session.expires < Date.now());
// If the session is valid
if (isSessionValid) {
  // ...
}

متفرقه

  • نیازمندی‌ها در بالا

همیشه برای نشان دادن وابستگی یک پرونده، به بالای پرونده نیاز دارید. علاوه بر ارائه یک مرور کلی برای دیگران در یک نگاه سریع به وابستگی‌ها و تأثیر احتمالی حافظه، به شما اجازه می‌دهد تا تشخیص دهد که آیا آن‌ها یک فایل package.json نیاز دارند اگر آن‌ها از این فایل در جای دیگر استفاده کنند.

در اینجا یک کار دیگر نیز می توان انجام داد، عبارات مورد نیاز خود را به ترتیب حروف الفبا بنویسید. به این ترتیب به راحتی می‌توانید به جای جستجوی تمام عبارات Require، با جستجوی مکان مشخصی متوجه شوید برخی بسته‌ها وارد شده‌اند یا نه.

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

پیروی از دستورالعمل‌های خاص برای نوشتن کد مطمئناً باعث صرفه جویی در وقت می‌شود و تیم را قادر می‌سازد اعضای جدیدی را اضافه کنند و به آن‌ها اجازه می‌دهد تا کد‌های نوشته شده توسط دیگران را فقط با استفاده از دستورالعمل‌های سبک برنامه نویسی تیم بخوانند و درک کنند. این باعث می‌شود فرد جدید سریع‌تر با تیم هماهنگ شود.

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
5 از 1 رای

/@mohamadresaaa
محمدرضا مصلی
توسعه دهنده وب

حدود ۶ سالی هست که دارم برنامه نویسی میکنم و به دلیل علاقه زیادی که به زبان جاوا اسکریپت داشتم، به سمت تکنولوژی nodejs و فریم ورک های آن رفتم و همچنان در این حوزه فعالیت میکنم و دوست دارم تجربه خودم را با دیگران به اشتراک بگذارم.

دیدگاه و پرسش

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

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

محمدرضا مصلی

توسعه دهنده وب

۵ مقاله اخیر

۵ مقاله اخیر از این قسمت برای شما در دسترس است