Home

Awesome

<a name="airbnb-javascript-style-guide-">Định hướng Lối viết JavaScript của Airbnb() {</a>

Một cách tiếp cận hợp lý đối với JavaScript

Lưu ý của người dịch: Bản dịch này, với nỗ lực truyền đạt nội dung bằng tiếng Việt nhiều nhất có thể, đã dịch sang tiếng Việt các thuật ngữ, và/hoặc các từ, cụm từ mà thông thường không được dịch, như: "style guide", "object", "polyfill", v.v. Nếu bạn cảm thấy không quen thuộc hoặc khó khăn trong việc hiểu một số từ trong bản dịch này, hoặc muốn biết các từ tương ứng trong Tiếng Anh, vui lòng tham khảo phần Danh mục các Thuật ngữ.

Lưu ý: Định hướng này giả định bạn đang sử dụng Babel, và đòi hỏi bạn sử dụng babel-preset-airbnb hoặc một bộ tương đương. Nó cũng giả định rằng bạn đang cài bộ trợ năng cho ứng dụng của bạn, như airbnb-browser-shims hoặc một bộ tương đương.

Lượt tải Lượt tải Gitter

Định hướng này cũng được dịch sang các ngôn ngữ khác. Xem phần Dịch.

Các Định hướng Lối viết Khác

<a name="table-of-contents">Mục lục</a>

  1. Các Kiểu giá trị
  2. Các Tham chiếu
  3. Các Đối tượng
  4. Các Mảng
  5. Trích xuất
  6. Các Chuỗi
  7. Các Hàm
  8. Các Hàm mũi tên
  9. Các Lớp & các Hàm tạo
  10. Các Mô-đun
  11. Các Đối tượng duyệt and các Hàm sinh trị
  12. Các Thuộc tính
  13. Các Biến
  14. Sự kéo lên
  15. Các Toán tử So sánh và Sự bằng nhau
  16. Các Khối
  17. Các Câu lệnh Điều khiển
  18. Các Chú thích
  19. Khoảng trắng
  20. Các Dấu phẩy
  21. Các Dấu chấm phẩy
  22. Sự ép kiểu
  23. Các Quy ước Đặt tên
  24. Các Hàm truy cập
  25. Các Sự kiện
  26. jQuery
  27. Tính tương thích của ECMAScript 5
  28. Lối viết ECMAScript 6+ (ES 2015+)
  29. Thư viện Tiêu chuẩn
  30. Sự kiểm thử
  31. Hiệu suất
  32. Các Tài nguyên
  33. Thực tế Áp dụng
  34. Danh mục các Thuật ngữ
  35. Dịch
  36. Về Hướng dẫn Lối viết JavaScript
  37. Nói chuyện với Chúng tôi về JavaScript
  38. Những Người đóng góp
  39. Giấy phép
  40. Các Sửa đổi

<a name="types">Các Kiểu giá trị</a>

<a name="types--primitives"></a><a name="1.1"></a>

<a name="types--complex"></a><a name="1.2"></a>

⬆ về đầu trang

<a name="references">Các Tham chiếu</a>

<a name="references--prefer-const"></a><a name="2.1"></a>

<a name="references--disallow-var"></a><a name="2.2"></a>

<a name="references--block-scope"></a><a name="2.3"></a>

⬆ về đầu trang

<a name="objects">Các Đối tượng</a>

<a name="objects--no-new"></a><a name="3.1"></a>

<a name="es6-computed-properties"></a><a name="3.4"></a>

<a name="es6-object-shorthand"></a><a name="3.5"></a>

<a name="es6-object-concise"></a><a name="3.6"></a>

<a name="objects--grouped-shorthand"></a><a name="3.7"></a>

<a name="objects--quoted-props"></a><a name="3.8"></a>

<a name="objects--prototype-builtins"></a>

<a name="objects--rest-spread"></a>

⬆ về đầu trang

<a name="arrays">Các Mảng</a>

<a name="arrays--literals"></a><a name="4.1"></a>

<a name="arrays--push"></a><a name="4.2"></a>

<a name="es6-array-spreads"></a><a name="4.3"></a>

<a name="arrays--from"></a> <a name="arrays--from-iterable"></a><a name="4.4"></a>

<a name="arrays--from-array-like"></a>

<a name="arrays--mapping"></a>

<a name="arrays--callback-return"></a><a name="4.5"></a>

<a name="arrays--bracket-newline"></a>

⬆ về đầu trang

<a name="destructuring">Trích xuất</a>

<a name="destructuring--object"></a><a name="5.1"></a>

<a name="destructuring--array"></a><a name="5.2"></a>

<a name="destructuring--object-over-array"></a><a name="5.3"></a>

⬆ về đầu trang

<a name="strings">Các Chuỗi</a>

<a name="strings--quotes"></a><a name="6.1"></a>

<a name="strings--line-length"></a><a name="6.2"></a>

<a name="es6-template-literals"></a><a name="6.4"></a>

<a name="strings--eval"></a><a name="6.5"></a>

<a name="strings--escaping"></a>

⬆ về đầu trang

<a name="functions">Các Hàm</a>

<a name="functions--declarations"></a><a name="7.1"></a>

<a name="functions--iife"></a><a name="7.2"></a>

<a name="functions--in-blocks"></a><a name="7.3"></a>

<a name="functions--note-on-blocks"></a><a name="7.4"></a>

<a name="functions--arguments-shadow"></a><a name="7.5"></a>

<a name="es6-rest"></a><a name="7.6"></a>

<a name="es6-default-parameters"></a><a name="7.7"></a>

<a name="functions--default-side-effects"></a><a name="7.8"></a>

<a name="functions--defaults-last"></a><a name="7.9"></a>

<a name="functions--constructor"></a><a name="7.10"></a>

<a name="functions--signature-spacing"></a><a name="7.11"></a>

<a name="functions--mutate-params"></a><a name="7.12"></a>

<a name="functions--reassign-params"></a><a name="7.13"></a>

<a name="functions--spread-vs-apply"></a><a name="7.14"></a>

<a name="functions--signature-invocation-indentation"></a>

⬆ về đầu trang

<a name="arrow-functions">Các Hàm mũi tên</a>

<a name="arrows--use-them"></a><a name="8.1"></a>

<a name="arrows--implicit-return"></a><a name="8.2"></a>

<a name="arrows--paren-wrap"></a><a name="8.3"></a>

<a name="arrows--one-arg-parens"></a><a name="8.4"></a>

<a name="arrows--confusing"></a><a name="8.5"></a>

<a name="whitespace--implicit-arrow-linebreak"></a>

⬆ về đầu trang

<a name="classes--constructors">Các Lớp và các Hàm tạo</a>

<a name="constructors--use-class"></a><a name="9.1"></a>

<a name="constructors--extends"></a><a name="9.2"></a>

<a name="constructors--chaining"></a><a name="9.3"></a>

<a name="constructors--tostring"></a><a name="9.4"></a>

<a name="constructors--no-useless"></a><a name="9.5"></a>

<a name="classes--no-duplicate-members"></a>

<a name="classes--methods-use-this"></a>

⬆ về đầu trang

<a name="modules">Các Mô-đun</a>

<a name="modules--use-them"></a><a name="10.1"></a>

<a name="modules--no-wildcard"></a><a name="10.2"></a>

<a name="modules--no-export-from-import"></a><a name="10.3"></a>

<a name="modules--no-duplicate-imports"></a>

<a name="modules--no-mutable-exports"></a>

<a name="modules--prefer-default-export"></a>

<a name="modules--imports-first"></a>

<a name="modules--multiline-imports-over-newlines"></a>

<a name="modules--no-webpack-loader-syntax"></a>

<a name="modules--import-extensions"></a>

⬆ về đầu trang

<a name="iterators-and-generators">Các Đối tượng duyệt và các Hàm sinh trị</a>

<a name="iterators--nope"></a><a name="11.1"></a>

<a name="generators--nope"></a><a name="11.2"></a>

<a name="generators--spacing"></a>

⬆ về đầu trang

<a name="properties">Các Thuộc tính</a>

<a name="properties--dot"></a><a name="12.1"></a>

<a name="properties--bracket"></a><a name="12.2"></a>

<a name="es2016-properties--exponentiation-operator"></a>

⬆ về đầu trang

<a name="variables">Các Biến</a>

<a name="variables--const"></a><a name="13.1"></a>

<a name="variables--one-const"></a><a name="13.2"></a>

<a name="variables--const-let-group"></a><a name="13.3"></a>

<a name="variables--define-where-used"></a><a name="13.4"></a>

<a name="variables--no-chain-assignment"></a><a name="13.5"></a>

<a name="variables--unary-increment-decrement"></a><a name="13.6"></a>

<a name="variables--linebreak"></a>

<a name="variables--no-unused-vars"></a>

⬆ về đầu trang

<a name="hoisting">Sự kéo lên</a>

<a name="hoisting--about"></a><a name="14.1"></a>

<a name="hoisting--anon-expressions"></a><a name="14.2"></a>

<a name="hoisting--named-expresions"></a><a name="hoisting--named-expressions"></a><a name="14.3"></a>

<a name="hoisting--declarations"></a><a name="14.4"></a>

⬆ về đầu trang

<a name="comparison-operators--equality">Các Toán tử So sánh và Sự bằng nhau</a>

<a name="comparison--eqeqeq"></a><a name="15.1"></a>

<a name="comparison--if"></a><a name="15.2"></a>

<a name="comparison--shortcuts"></a><a name="15.3"></a>

<a name="comparison--moreinfo"></a><a name="15.4"></a>

<a name="comparison--switch-blocks"></a><a name="15.5"></a>

<a name="comparison--nested-ternaries"></a><a name="15.6"></a>

<a name="comparison--unneeded-ternary"></a><a name="15.7"></a>

<a name="comparison--no-mixed-operators"></a>

⬆ về đầu trang

<a name="blocks">Các Khối</a>

<a name="blocks--braces"></a><a name="16.1"></a>

<a name="blocks--cuddled-elses"></a><a name="16.2"></a>

<a name="blocks--no-else-return"></a><a name="16.3"></a>

⬆ về đầu trang

<a name="control-statements">Các Câu lệnh Điều khiển</a>

<a name="control-statements"></a>

<a name="control-statement--value-selection"></a><a name="control-statements--value-selection"></a>

⬆ về đầu trang

<a name="comments">Các Chú thích</a>

<a name="comments--multiline"></a><a name="17.1"></a>

<a name="comments--singleline"></a><a name="17.2"></a>

<a name="comments--spaces"></a>

<a name="comments--actionitems"></a><a name="17.3"></a>

<a name="comments--fixme"></a><a name="17.4"></a>

<a name="comments--todo"></a><a name="17.5"></a>

⬆ về đầu trang

<a name="whitespace">Khoảng trắng</a>

<a name="whitespace--spaces"></a><a name="18.1"></a>

<a name="whitespace--before-blocks"></a><a name="18.2"></a>

<a name="whitespace--around-keywords"></a><a name="18.3"></a>

<a name="whitespace--infix-ops"></a><a name="18.4"></a>

<a name="whitespace--newline-at-end"></a><a name="18.5"></a>

<a name="whitespace--chains"></a><a name="18.6"></a>

<a name="whitespace--after-blocks"></a><a name="18.7"></a>

<a name="whitespace--padded-blocks"></a><a name="18.8"></a>

<a name="whitespace--no-multiple-blanks"></a>

<a name="whitespace--in-parens"></a><a name="18.9"></a>

<a name="whitespace--in-brackets"></a><a name="18.10"></a>

<a name="whitespace--in-braces"></a><a name="18.11"></a>

<a name="whitespace--max-len"></a><a name="18.12"></a>

<a name="whitespace--block-spacing"></a>

<a name="whitespace--comma-spacing"></a>

<a name="whitespace--computed-property-spacing"></a>

<a name="whitespace--func-call-spacing"></a>

<a name="whitespace--key-spacing"></a>

<a name="whitespace--no-trailing-spaces"></a>

<a name="whitespace--no-multiple-empty-lines"></a>

⬆ về đầu trang

<a name="commas">Các Dấu phẩy</a>

<a name="commas--leading-trailing"></a><a name="19.1"></a>

<a name="commas--dangling"></a><a name="19.2"></a>

⬆ về đầu trang

<a name="semicolons">Các Dấu chấm phẩy</a>

<a name="semicolons--required"></a><a name="20.1"></a>

⬆ về đầu trang

<a name="type-casting--coercion">Sự ép kiểu</a>

<a name="coercion--explicit"></a><a name="21.1"></a>

<a name="coercion--strings"></a><a name="21.2"></a>

<a name="coercion--numbers"></a><a name="21.3"></a>

Tại sao? Hàm parseInt sinh ra một số nguyên bằng cách diễn giải nội dung của một chuỗi dựa trên một cơ số đã định. Ký tự trống ở đầu chuỗi được bỏ qua. Nếu cơ số là undefined hoặc 0, cơ số đó được ngầm định là 10, trừ trường hợp số trong chuỗi bắt đầu bằng cặp ký tự 0x hoặc 0X, khi đó cơ số 16 được sử dụng. Điều này khác với ECMAScript 3, khi nó chỉ không khuyến khích (nhưng cho phép) sử dụng diễn giải số theo hệ bát phân. Nhiều trình duyệt chưa áp dụng theo điều trên kể từ 2013. Và, vì những trình duyệt cũ cũng cần được hỗ trợ, hãy luôn sử dụng một cơ số.

``` javascript
const inputValue = '4';

// không tốt
const val = new Number(inputValue);

// không tốt
const val = +inputValue;

// không tốt
const val = inputValue >> 0;

// không tốt
const val = parseInt(inputValue);

// tốt
const val = Number(inputValue);

// tốt
const val = parseInt(inputValue, 10);
```

<a name="coercion--comment-deviations"></a><a name="21.4"></a>

<a name="coercion--bitwise"></a><a name="21.5"></a>

<a name="coercion--booleans"></a><a name="21.6"></a>

⬆ về đầu trang

<a name="naming-conventions">Các Quy ước Đặt tên</a>

<a name="naming--descriptive"></a><a name="22.1"></a>

<a name="naming--camelCase"></a><a name="22.2"></a>

<a name="naming--PascalCase"></a><a name="22.3"></a>

<a name="naming--leading-underscore"></a><a name="22.4"></a>

<a name="naming--self-this"></a><a name="22.5"></a>

<a name="naming--filename-matches-export"></a><a name="22.6"></a>

<a name="naming--camelCase-default-export"></a><a name="22.7"></a>

<a name="naming--PascalCase-singleton"></a><a name="22.8"></a>

<a name="naming--Acronyms-and-Initialisms"></a>

<a name="naming--uppercase"></a>

⬆ về đầu trang

<a name="accessors">Các Hàm truy cập</a>

<a name="accessors--not-required"></a><a name="23.1"></a>

<a name="accessors--no-getters-setters"></a><a name="23.2"></a>

<a name="accessors--boolean-prefix"></a><a name="23.3"></a>

<a name="accessors--consistent"></a><a name="23.4"></a>

⬆ về đầu trang

<a name="events">Các Sự kiện</a>

<a name="events--hash"></a><a name="24.1"></a>

⬆ về đầu trang

<a name="jquery">jQuery</a>

<a name="jquery--dollar-prefix"></a><a name="25.1"></a>

<a name="jquery--cache"></a><a name="25.2"></a>

<a name="jquery--queries"></a><a name="25.3"></a>

<a name="jquery--find"></a><a name="25.4"></a>

⬆ về đầu trang

<a name="ecmascript-5-compatibility">Tính tương thích của ECMAScript 5</a>

<a name="es5-compat--kangax"></a><a name="26.1"></a>

⬆ về đầu trang

<a name="ecmascript-6-styles"></a>

<a name="ecmascript-6-es-2015-styles">Lối viết ECMAScript 6+ (ES 2015+)</a>

<a name="es6-styles"></a><a name="27.1"></a>

  1. Các Hàm mũi tên
  2. Các Lớp
  3. Cú pháp Định nghĩa Phương thức Rút gọn
  4. Cú pháp Định nghĩa Thuộc tính Rút gọn
  5. Các Tên Được tính của Thuộc tính
  6. Các Mẫu chuỗi
  7. Trích xuất
  8. Các Tham số Mặc định
  9. Còn-lại
  10. Liệt kê Mảng
  11. Let và Const
  12. Toán tử Lũy thừa
  13. Các Đối tượng duyệt và các Hàm sinh trị
  14. Các Mô-đun

<a name="tc39-proposals"></a>

⬆ về đầu trang

<a name="standard-library">Thư viện Tiêu Chuẩn</a>

Thư viện tiêu chuẩn chứa các hàm tiện ích không hoạt động đúng lắm nhưng vẫn tồn tại vì các lý do cũ.

<a name="standard-library--isnan"></a>

<a name="standard-library--isfinite"></a>

⬆ về đầu trang

<a name="testing">Sự kiểm thử</a>

<a name="testing--yup"></a><a name="28.1"></a>

<a name="testing--for-real"></a><a name="28.2"></a>

⬆ về đầu trang

<a name="performance">Hiệu suất</a>

⬆ về đầu trang

<a name="resources">Các Tài nguyên</a>

Học ES6+

Đọc cái này đi

Các công cụ

Các Định hướng Lối viết Khác

Các Lối viết Khác

Đọc thêm

Các Tựa sách

Các Bài viết

Các Bản phát thanh

⬆ về đầu trang

<a name="in-the-wild">Thực tế Áp dụng</a>

Đây là danh sách những tổ chức sử dụng định hướng lối viết này. Gửi cho chúng tôi một yêu cầu kéo và chúng tôi sẽ thêm bạn vào danh sách.

⬆ về đầu trang

<a name="terminology">Danh mục các Thuật ngữ</a>

Dưới đây là danh mục các từ tiếng Anh tương ứng của các thuật ngữ, và/hoặc các từ, cụm từ mà thông thường không được dịch, như: "style guide", "object", "polyfill", v.v. Các từ, cụm từ được dịch có thể chỉ đúng trong ngữ cảnh là bản dịch này.

Nếu bạn cảm thấy một thuật ngữ có vẻ được dịch chưa hợp lý, hoặc bạn cần sự giải thích về một thuật ngữ, bạn có thể mở một Vấn đề để thảo luận.

Nếu bạn biết một từ/cụm từ tiếng Việt thích hợp hơn cho một thuật ngữ, và nếu bạn sẵn lòng, bạn có thể mở một Đề nghị kéo cho một sửa đổi.

Tiếng ViệtEnglish
Ánh xạMap/mapping
Ba ngôiTernary
Bản sao/saoCopy
Bản sao nhanh/sao nhanhShallow-copy
BắtCatch
Bất biếnImmutable
Bẻ nhánhFork
BiếnVariable/var
Biến đổi/sự biến đổiMutate/mutation
Biểu thứcExpression
Biểu thức hàmFunction expression
Biểu thức hàm gọi tức thờiImmediately invoked function expression/IIFE
Bộ khung phần mềmFramework
Bộ phận hàmFunction signature
Bộ tảiLoader
Bộ tổng hợpBundler
Bộ trợ năngShim/polyfill
BướcStep
Cải tiến mã nguồnRefactor code/code refactoring
Căn đầu dòngIndent
Câu lệnh/lệnhStatement
Cấu trúc một dòngOne-liner
Chỉ-viếtWrite-only
ChuỗiString
Chú thíchComment
Còn-lạiRest
Cơ sốRadix
Cú phápSyntax
Cú pháp tiện lợiSyntactic sugar
Legacy
Dấu gạch dướiUnderscore
Dấu lược/dấu nháy đơnSingle quote
Dấu ngắt dòng/dấu xuống dòngLine break
Dấu ngoặcBrace
Dấu ngoặc nhọnCurly brace
Dấu ngoặc trònParenthesis/parentheses
Dấu ngoặc vuôngArray bracket
Dịch mãTranspile
DuyệtIterate
Đề xuấtProposal
Đề nghị kéoPull request
Định danhIdentifier
Định hướng lối viếtStyle guide
Định nghĩaDefine
Đối sốArgument
Đối tượngObject
Đối tượng duyệtIterator/iterator object
Đối tượng đíchReceiver
Đối tượng độc nhấtSingleton
Đối tượng khả duyệtIterable object
Đối tượng rỗngNull object
Đối tượng trầnBare object
Độ bao phủCoverage
Đường dẫnPath
Ép kiểu/sự ép kiểuCoerce/coercion/cast/casting
Gán/phép gánAssign/assignment
Gán lạiReassign
GhépConcatenate/concatenation/concat
Giai đoạn chếtTemporal dead zone/TDZ
Giá trị bămHash/hash value
Giá trị gốcRaw value
Giả lập đối tượngMock
Giả lập mô-đunStub
Giống-mảngArray-like
Gọi/phép gọiCall/invoke/invocation
HàmFunction
Hàm bất địnhVariadic function
Hàm bậc cao hơnHigher-order function
Hàm đọcGetter/getter function
Hàm ghiSetter/setter function
Hàm gọi ngượcCallback/callback function
Hàm gọi tức thờiImmediately invoked function
Hàm hữu danhNamed function
Hàm mũi tênArrow function
Hàm sinh trịGenerator/generator function
Hàm tạoConstructor
Hàm thuầnPure function
Hàm tiện íchUtility/utility function
Hàm truy cậpAccessor/accessor function
Hàm vô danhAnonymous function
Hàm xử lýHandler
HằngConstant/const
Hiệu suấtPerformance/perf
Hiệu ứng phụSide effect
Kéo lên/sự kéo lên/nổi lên/sự nổi lênHoist/hoisting
Pad
Khai báoDeclare/declaration
Khoảng trắngWhitespace
Không gian tênNamespace
KhốiBlock
Kiểm thử/sự kiểm thửTest/testing
Kiểu giá trịType
Kiểu nguyên thủyPrimitive
Kiểu saiFalsy/falsey
Ký phápNotation
Ký pháp chấmDot notation
Ký tự đại diệnWildcard/wildcard character
Ký tự thoátEscape character
Liên kếtLink
Liệt kêSpread
Lô-gícLogic
Lỗ hổngVulnerability
Lỗi câmSilent error
LớpClass
Lớp chaParent class/parent
Lũy thừaExponentiation
Lưu tạmCache
Lựa chọnSelect/selection
Mã/mã nguồnCode/source code
MảngArray
Mô-đunModule
Một ngôiUnary
Ném raThrow
Ngăn xếpCall stack/stack
Ngầm địnhImplicit
Nghẽn cổ chaiBottleneck
Ngoại lệException
Nguyên mẫuPrototype
Nguyên vănLiteral
Ngữ cảnhContext
Nhà phát triểnDeveloper/dev
Nhập/lệnh nhậpImport
Nối chuỗiChain/chaining
Phần tửElement
Phép dịch chuyển bitBit-shift/bit-shift operation
Phép tăngIncrement
Phép giảmDecrement
Phép tiền tăng/sự tiền tăngPre-increment
Phép tiền giảm/sự tiền giảmPre-decrement
Phi chuẩnNon-standard
Phương thứcMethod
Quy tắc chèn dấu chấm phẩy tự độngAutomatic semicolon insertion/ASI
Quy ước đặt tênNaming convention
Ràng buộcBinding
Riêng tưPrivate
Rút gọn/dạng rút gọnShorthand/shortcut
So sánh/sự so sánhCompare/comparision
Sự bằng nhauEquality
Sự kiệnEvent/ev
Tên của thuộc tínhProperty name/key
Tên được tính của thuộc tínhComputed property name
Tham chiếuReference
Tham sốParameter
Thành viênMember
Thân hàmFunction body
ThẻTab
Thuộc phạm vi hàmFunction-scoped
Thuộc phạm vi khốiBlock-scoped
Thuộc tínhProperty
Thư việnLibrary/lib
Thừa kếInherit/inheritance
Thực thểInstance
Tiến trình gọiCaller
Tính khả đọcReadability
Tính tương thíchCompatibility
Toàn cụcGlobal
Toán tửOperator
Trình gỡ lỗiDebugger
Trình phân tích mãLinter
Trình thực thiEngine
Trích xuất/sự trích xuấtDestructure/destructuring/extract
Trọng tảiPayload
Truy cậpAccess
Truy vấnQuery
Từ khóaKeyword
Từ khóa điều chỉnhModifier
Ứng dụngApplication/app
Vấn đềIssue
Xếp tầngCascade/cascading
Xuất/lệnh xuấtExport
Xuất hữu danhNamed export
Xuất mặc địnhDefault export
Xung đột khi gộpMerge conflict

⬆ về đầu trang

<a name="translation">Dịch</a>

Định hướng này cũng được dịch sang các ngôn ngữ khác:

<a name="the-javascript-style-guide-guide">Định hướng Lối viết JavaScript</a>

<a name="chat-with-us-about-javascript">Nói chuyện với Chúng tôi về JavaScript</a>

<a name="contributors">Những Người đóng góp</a>

<a name="license">Giấy phép</a>

(The MIT License)

Copyright (c) 2012 Airbnb

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

⬆ về đầu trang

<a name="amendments">Các Sửa đổi</a>

Chúng tôi khuyến khích bạn bẻ nhánh bản định hướng này và thay đổi các quy tắc để phù hợp với định hướng lối viết của nhóm của bạn. Dưới đây, bạn có thể liệt kê các sửa đổi đối với bản định hướng này. Điều này cho phép bạn thỉnh thoảng cập nhật lối viết mà không cần giải quyết các xung đột khi gộp.

};