Nguyên tắc style code cơ bản trong NodeJS

6 min


1046
1.5k shares, 1046 points

Lời mở đầu

Bài viết này là hướng dẫn viết code NodeJS nhất quán và đẹp mắt về mặt thẩm mỹ. Nó được lấy cảm hứng từ những gì phổ biến trong cộng đồng và cũng có một số ý kiến ​​cá nhân.

Các developer giống như những con sói đơn độc thích làm việc với tư cách cá nhân hơn là trong một nhóm. Tôi cũng như vậy. Điều này chắc chắn tạo ra vấn đề khi làm việc tại công ty.

Có cả ưu và nhược điểm khi làm việc theo nhóm. Về mặt tích cực, có nhiều thông tin chi tiết hơn về một vấn đề có thể giúp đưa ra giải pháp tốt hơn, nhưng đồng thời có thể xảy ra các vấn đề cộng tác khi một developer phải thông qua code của developer khác để fix bug hoặc review nó

Formatting

Sử dụng 4 dấu cách để thụt lề

Sử dụng 4 dấu cách để thụt đầu dòng code của bạn và tuyên thệ không bao giờ trộn các tab và dấu cách – một loại địa ngục đặc biệt đang chờ đợi.

Dòng mới

Sử dụng style UNIX cho dòng mới (\ n) và ký tự dòng mới làm ký tự cuối cùng của file. Dòng mới kiểu Windows(\ r \ n) bị cấm trong bất kỳ kho lưu trữ nào.

Không có khoảng trắng ở cuối

Giống như bạn đánh răng sau mỗi bữa ăn, bạn làm sạch bất kỳ khoảng trắng nào trong các tệp .js NodeJS của mình trước khi commit. Nếu không, sẽ làm ảnh hưởng tới source code.

Sử dụng dấu chấm phẩy

Theo khoa học nghiên cứu , việc sử dụng dấu chấm phẩy là giá trị cốt lõi của cộng đồng chúng ta. Hãy xem xét các quan điểm của phe đối lập, nhưng hãy là một người theo chủ nghĩa truyền thống khi lạm dụng các cơ chế sửa lỗi cho thú vui cú pháp rẻ tiền.

80 ký tự mỗi dòng

Giới hạn dòng của bạn ở 80 ký tự. Vâng, màn hình đã lớn hơn nhiều trong vài năm qua, nhưng bộ não của bạn thì không.

Dấu ngoặc đơn ‘…’

Sử dụng dấu ngoặc đơn, trừ khi bạn đang viết JSON. Điều này giúp bạn tách chuỗi object của mình khỏi chuỗi bình thường.

Đúng

var foo = ‘bar’;

Sai:

var foo = “bar”;

Dấu ngoặc nhọn mở ‘{‘ trên cùng một dòng

Dấu ngoặc nhọn mở đầu của bạn đi cùng dòng với câu lệnh trong NodeJS

Right:

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

Sai:

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

Ngoài ra, hãy lưu ý việc sử dụng khoảng trắng trước và sau câu lệnh điều kiện. Điều gì xảy ra nếu bạn muốn viết ‘else’ hoặc ‘else if’ cùng với ‘if’…

Đúng

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

Sai:

if (true)
{
    console.log(‘losing’);
}
else if (false)
{
    console.log(‘this is bad’);
}
else
{
    console.log(‘not good’);
}

Khai báo một biến cho mỗi câu lệnh var

Khai báo một biến cho mỗi câu lệnh var, nó giúp sắp xếp lại các dòng dễ dàng hơn trong NodeJS.

Đúng:

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

Sai:

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

Quy ước đặt tên

  • Sử dụng LowerCamelCase cho các biến, thuộc tính và tên hàm

Các biến, thuộc tính và tên hàm nên sử dụng LowerCamelCase. Chúng cũng phải mang tính mô tả. Thường nên tránh các biến ký tự đơn và các chữ viết tắt không phổ biến trong NodeJS

Đúng:

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

Sai:

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

Tên class nên được viết hoa bằng cách sử dụng UpperCamelCase.

Đúng:

function BankAccount() {}

Sai:

function bank_Account() {}
  • Sử dụng UPPERCASE cho Hằng số

Hằng số nên được khai báo dưới dạng biến thông thường hoặc thuộc tính class tĩnh, sử dụng tất cả các chữ cái viết hoa.

Đúng:

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

Sai:

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

Biến

  • Tạo object /array

Sử dụng dấu phẩy ở cuối và đặt các khai báo ngắn gọn trên một dòng. Chỉ trích dẫn các keys khi thông dịch viên của bạn phàn nàn:

Đúng:

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

Sai:

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

Điều kiện

  • Sử dụng biểu thức ===

Lập trình không phải để ghi nhớ các quy tắc ngu ngốc. Sử dụng toán tử ‘===’ và nó sẽ hoạt động như mong đợi.

Đúng:

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

Sai:

var a = 0;if (a == '') {
  console.log('losing');
}
  • Sử dụng các điều kiện mô tả

Mọi điều kiện không bình thường nên được gán cho một biến hoặc hàm có tên mô tả rõ chúng:

Đúng:

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

Sai:

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

Functions

  • Viết nhỏ functions

Giữ cho functions của bạn ngắn gọn. Một functions tốt nằm trên một trang trình chiếu mà những người ở hàng cuối cùng của một căn phòng lớn có thể thoải mái đọc.

  • Return sớm từ các functions

Để tránh lồng sâu các câu lệnh if, hãy luôn return giá trị của function càng sớm càng tốt.

Đúng:

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

Sai:

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

Hoặc đối với ví dụ cụ thể này, bạn cũng có thể rút ngắn mọi thứ hơn nữa:

function isPercentage(val) {
  var isInRange = (val >= 0 && val <= 100);
  return isInRange;
}
  • Sử dụng các method liên tiếp

Một method trên mỗi dòng nên được sử dụng nếu bạn muốn xâu chuỗi liên tiếp các method

Bạn cũng nên thụt lề các method này để dễ dàng biết chúng là một phần của cùng một chuỗi.

Đúng:

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

Sai:

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;
  });

Comment

  • Sử dụng dấu gạch chéo ‘/’ để comment

Sử dụng dấu gạch chéo cho cả comment một dòng và nhiều dòng. Cố gắng viết comment giải thích các cơ chế cấp cao hơn hoặc làm rõ các đoạn code có độ phức tạp của bạn. Đừng sử dụng comment để trình bày lại những điều đơn giản.

Đúng:

// '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) {
  // ...
}

Sai:

// 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) {
  // ...
}

Lưu ý khác

  • Đặt Requires’ trên top

Luôn đặt require ở đầu tệp để minh họa rõ ràng các yếu tố phụ thuộc của tệp. Bên cạnh việc cung cấp một cái nhìn tổng quan cho những người khác trong nháy mắt về sự phụ thuộc và khả năng ảnh hưởng đến bộ nhớ, nó cho phép người ta xác định xem họ có cần tệp package.json hay không nếu họ chọn sử dụng tệp ở nơi khác.

Đây cũng là một trong những vấn đề đã đề cập trong bài viết : Bí quyết xử lý và cải thiện về error trên NodeJS

Kết luận

Qua bài viết, chúng ta đã hiểu được quy cách đặt tên và cách code . Để có cái nhìn tổng quan về kiểu code cho NodeJS.

Tham khảo thêm bài viết về NodeJS: 10 cách để viết restful api NodeJS chuẩn cơm mẹ nấu luôn


Like it? Share with your friends!

1046
1.5k shares, 1046 points

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
1
win