Skip to content

Commit b5ae3b5

Browse files
committed
3 function
1 parent bffbee6 commit b5ae3b5

File tree

1 file changed

+77
-80
lines changed

1 file changed

+77
-80
lines changed

README.md

Lines changed: 77 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,8 @@ addMonthToDate(1, date);
312312
```
313313
**[⬆ Về đầu trang](#mục-lục)**
314314

315-
### Chức năng chỉ nên có 1 lớp abstract
316-
Khi bạn có nhiều hơn 1 lớp abstract của chức năng thì thông thường làm rất nhiều.
315+
### Chức năng chỉ nên có 1 lớp trừu tượng
316+
Khi bạn có nhiều hơn 1 lớp trừu tượng của chức năng thì thông thường làm rất nhiều.
317317
Chia nhỏ các chức năng thì việc tái sử dụng và testing sẽ dễ dàng hơn.
318318

319319
**Không tốt:**
@@ -624,26 +624,21 @@ const addItemToCart = (cart, item) => {
624624
thư viện khác và người dùng API của bạn có thể không phải là người khôn ngoan cho đến khi
625625
họ nhận ra được những ngoại lệ trong sản phẩm. Ví dụ: bạn sẽ làm gì nếu bạn muốn mở rộng
626626
mảng JavaScript native để có một phương thức `diff` mà có thể đưa ra những
627-
sự khác nhau giữa hai mảng?
628-
Polluting globals is a bad practice in JavaScript because you could clash with another
629-
library and the user of your API would be none-the-wiser until they get an
630-
exception in production. Let's think about an example: what if you wanted to
631-
extend JavaScript's native Array method to have a `diff` method that could
632-
show the difference between two arrays? You could write your new function
633-
to the `Array.prototype`, but it could clash with another library that tried
634-
to do the same thing. What if that other library was just using `diff` to find
635-
the difference between the first and last elements of an array? This is why it
636-
would be much better to just use ES2015/ES6 classes and simply extend the `Array` global.
627+
sự khác nhau giữa hai mảng? Bạn có thể viết một hàm mới với `Array.prototype`,
628+
nhưng nó có thể xung đột với một thư viện khác mà đã cố gắng để làm những điều tương tự.
629+
Điều gì xảy ra nếu một thư viện chỉ sử dụng `diff` để tìm sự khác biệt giữa phần tử
630+
đầu tiên và cuối cùng của một mảng? Đó là lý do tại sao nó sẽ là tốt hơn khi
631+
chỉ sử dụng cá lớp ES2015/ES6 và đơn giản mở rộng `Array` toàn cục.
637632

638-
**Bad:**
633+
**Không tốt:**
639634
```javascript
640635
Array.prototype.diff = function diff(comparisonArray) {
641636
const hash = new Set(comparisonArray);
642637
return this.filter(elem => !hash.has(elem));
643638
};
644639
```
645640

646-
**Good:**
641+
**Tốt:**
647642
```javascript
648643
class SuperArray extends Array {
649644
diff(comparisonArray) {
@@ -652,14 +647,14 @@ class SuperArray extends Array {
652647
}
653648
}
654649
```
655-
**[back to top](#mục-lục)**
650+
**[Về đầu trang](#mục-lục)**
656651

657-
### Favor functional programming over imperative programming
658-
JavaScript isn't a functional language in the way that Haskell is, but it has
659-
a functional flavor to it. Functional languages are cleaner and easier to test.
660-
Favor this style of programming when you can.
652+
### Ủng hộ lập trình chức năng trên lập trình không bắt buộc
653+
JavaScript không phải là ngôn ngữ chức năng trong cái của Haskell, nhưng nó có
654+
đặc trưng chức năng của nó. Những ngôn ngữ chức năng thì gọn gàng hơn và dễ dàng hơn
655+
để kiểm thử. Hãy ủng hộ phong cách lập trình khi bạn có thể.
661656

662-
**Bad:**
657+
**Không tốt:**
663658
```javascript
664659
const programmerOutput = [
665660
{
@@ -684,7 +679,7 @@ for (let i = 0; i < programmerOutput.length; i++) {
684679
}
685680
```
686681

687-
**Good:**
682+
**Tốt:**
688683
```javascript
689684
const programmerOutput = [
690685
{
@@ -708,18 +703,18 @@ const totalOutput = programmerOutput
708703
.map((programmer) => programmer.linesOfCode)
709704
.reduce((acc, linesOfCode) => acc + linesOfCode, INITIAL_VALUE);
710705
```
711-
**[back to top](#mục-lục)**
706+
**[Về đầu trang](#mục-lục)**
712707

713-
### Encapsulate conditionals
708+
### Đóng gói điều kiện
714709

715-
**Bad:**
710+
**Không tốt:**
716711
```javascript
717712
if (fsm.state === 'fetching' && isEmpty(listNode)) {
718713
// ...
719714
}
720715
```
721716

722-
**Good:**
717+
**Tốt:**
723718
```javascript
724719
function shouldShowSpinner(fsm, listNode) {
725720
return fsm.state === 'fetching' && isEmpty(listNode);
@@ -729,11 +724,11 @@ if (shouldShowSpinner(fsmInstance, listNodeInstance)) {
729724
// ...
730725
}
731726
```
732-
**[back to top](#mục-lục)**
727+
**[Về đầu trang](#mục-lục)**
733728

734-
### Avoid negative conditionals
729+
### Tránh điều kiện tiêu cực
735730

736-
**Bad:**
731+
**Không tốt:**
737732
```javascript
738733
function isDOMNodeNotPresent(node) {
739734
// ...
@@ -744,7 +739,7 @@ if (!isDOMNodeNotPresent(node)) {
744739
}
745740
```
746741

747-
**Good:**
742+
**Tốt:**
748743
```javascript
749744
function isDOMNodePresent(node) {
750745
// ...
@@ -754,19 +749,19 @@ if (isDOMNodePresent(node)) {
754749
// ...
755750
}
756751
```
757-
**[back to top](#mục-lục)**
752+
**[Về đầu trang](#mục-lục)**
758753

759-
### Avoid conditionals
760-
This seems like an impossible task. Upon first hearing this, most people say,
761-
"how am I supposed to do anything without an `if` statement?" The answer is that
762-
you can use polymorphism to achieve the same task in many cases. The second
763-
question is usually, "well that's great but why would I want to do that?" The
764-
answer is a previous clean code concept we learned: a function should only do
765-
one thing. When you have classes and functions that have `if` statements, you
766-
are telling your user that your function does more than one thing. Remember,
767-
just do one thing.
754+
### Tránh điều kiện
755+
Đây dường như giống một công việc bất khả thi. Sau khi nghe điều này đầu tiên,
756+
hầu hết mọi người đều nói, "Tôi tin rằng tôi sẽ không thể làm gì mà không có
757+
mệnh đề `if`?" Câu trả lời là bạn có thể sử dụng tính đa hình để đạt được công việc
758+
tương tự trong rất nhiều trường hợp. Câu hỏi thứ hay thường là "đó là điều tốt
759+
nhưng tại sao tôi lại muốn làm điều đó?" Câu trả lời là khái niệm code sạch sẽ trước
760+
chúng ta đã học: một hàm nên thực hiện 1 công việc. Khi bạn có nhiều class và hàm
761+
mà có nhiều mệnh đề `if`, bạn đang nói người dùng của bạn rằng hàm của bạn
762+
đang làm hơn 1 công việc. Hãy nhớ, chỉ làm một công việc.
768763

769-
**Bad:**
764+
**Không tốt:**
770765
```javascript
771766
class Airplane {
772767
// ...
@@ -783,7 +778,7 @@ class Airplane {
783778
}
784779
```
785780

786-
**Good:**
781+
**Tốt:**
787782
```javascript
788783
class Airplane {
789784
// ...
@@ -810,15 +805,15 @@ class Cessna extends Airplane {
810805
}
811806
}
812807
```
813-
**[back to top](#mục-lục)**
808+
**[Về đầu trang](#mục-lục)**
814809

815-
### Avoid type-checking (part 1)
816-
JavaScript is untyped, which means your functions can take any type of argument.
817-
Sometimes you are bitten by this freedom and it becomes tempting to do
818-
type-checking in your functions. There are many ways to avoid having to do this.
819-
The first thing to consider is consistent APIs.
810+
### Tránh kiểm tra loại (phần 1)
811+
JavaScript không định kiểu, nó có nghĩa hàm của bạn có thể mang bất kì loại của đối số.
812+
Đôi khi bạn có cảm giác như bị cắn bởi sự tụ do này và nó trở nên hấp dẫn để làm kiểm tra loại
813+
trong hàm của bạn. Có rất nhiều cách để tránh phải làm điều này.
814+
Điều đầu tiên để xem xét là các API nhất quán.
820815

821-
**Bad:**
816+
**Không tốt:**
822817
```javascript
823818
function travelToTexas(vehicle) {
824819
if (vehicle instanceof Bicycle) {
@@ -829,26 +824,28 @@ function travelToTexas(vehicle) {
829824
}
830825
```
831826

832-
**Good:**
827+
**Tốt:**
833828
```javascript
834829
function travelToTexas(vehicle) {
835830
vehicle.move(this.currentLocation, new Location('texas'));
836831
}
837832
```
838-
**[back to top](#mục-lục)**
833+
**[Về đầu trang](#mục-lục)**
839834

840-
### Avoid type-checking (part 2)
841-
If you are working with basic primitive values like strings, integers, and arrays,
842-
and you can't use polymorphism but you still feel the need to type-check,
843-
you should consider using TypeScript. It is an excellent alternative to normal
844-
JavaScript, as it provides you with static typing on top of standard JavaScript
845-
syntax. The problem with manually type-checking normal JavaScript is that
835+
### Tránh kiểm tra loại (phần 2)
836+
Nếu bạn đang làm với kiểu giá trị nguyên thủy cơ bản như string, integer và array,
837+
và bạn không thể sử dụng đa hình nhưng bạn vẫn cảm thấy cần thiết kiểm tra loại,
838+
bạn nên xem xét sử dụng TypeScript. Nó là một phương pháp thay thế tuyệt vời
839+
cho JavaScript thông thường, vì nó cung cấp bạn cùng với gõ tính trên đỉnh của
840+
cú pháp JavaScript chuẩn. Vấn đề với kiểm tra loại thủ công JavaScript thông thường là
841+
làm nó cũng đòi hỏi rất nhiều
842+
(The problem with manually type-checking normal JavaScript is that
846843
doing it well requires so much extra verbiage that the faux "type-safety" you get
847-
doesn't make up for the lost readability. Keep your JavaScript clean, write
848-
good tests, and have good code reviews. Otherwise, do all of that but with
849-
TypeScript (which, like I said, is a great alternative!).
844+
doesn't make up for the lost readability).
845+
Hãy giữ JavaScript của bạn sạch sẽ, viết test tốt và có duyệt code tốt. Nếu không thì
846+
thực hiện tất cả những điều đó nhưng với TypeScript (giống như tôi đã nói, đó là sự thay thế tốt)
850847

851-
**Bad:**
848+
**Không tốt:**
852849
```javascript
853850
function combine(val1, val2) {
854851
if (typeof val1 === 'number' && typeof val2 === 'number' ||
@@ -860,45 +857,45 @@ function combine(val1, val2) {
860857
}
861858
```
862859

863-
**Good:**
860+
**Tốt:**
864861
```javascript
865862
function combine(val1, val2) {
866863
return val1 + val2;
867864
}
868865
```
869-
**[back to top](#mục-lục)**
866+
**[Về đầu trang](#mục-lục)**
870867

871-
### Don't over-optimize
872-
Modern browsers do a lot of optimization under-the-hood at runtime. A lot of
873-
times, if you are optimizing then you are just wasting your time. [There are good
874-
resources](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers)
875-
for seeing where optimization is lacking. Target those in the meantime, until
876-
they are fixed if they can be.
868+
### Đừng quá tối ưu
869+
Những trình duyệt hiện đại làm rất nhiều tối ưu hóa bên dưới trong thời thời gian chạy.
870+
Rất nhiều lần, nếu bạn đang tối ưu thì bạn đang làm tốn thời gian của chính mình.
871+
[Đây là nguồn](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers)
872+
để tìm kiếm nơi tối ưu hóa là thiếu. Nhằm vào những người trong khi chờ đợi,
873+
cho đến khi chúng được cố định nếu họ có thể.
877874

878-
**Bad:**
875+
**Không tốt:**
879876
```javascript
880877

881-
// On old browsers, each iteration with uncached `list.length` would be costly
882-
// because of `list.length` recomputation. In modern browsers, this is optimized.
878+
// Trên các trình duyệt cũ, mỗi lần lặp với uncached 'list.length` sẽ tốn kém
879+
// vì của `toán lại list.length`. Trong các trình duyệt hiện đại, điều này được tối ưu hóa.
883880
for (let i = 0, len = list.length; i < len; i++) {
884881
// ...
885882
}
886883
```
887884

888-
**Good:**
885+
**Tốt:**
889886
```javascript
890887
for (let i = 0; i < list.length; i++) {
891888
// ...
892889
}
893890
```
894-
**[back to top](#mục-lục)**
891+
**[Về đầu trang](#mục-lục)**
895892

896-
### Remove dead code
897-
Dead code is just as bad as duplicate code. There's no reason to keep it in
898-
your codebase. If it's not being called, get rid of it! It will still be safe
899-
in your version history if you still need it.
893+
### Xóa dead code
894+
Dead code cũng tệ như code trùng lặp. Không có lý do gì để giữ chúng lại trong
895+
codebase của bạn. Nếu nó không được gọi, gạt nó ra! sẽ vẫn được an toàn trong
896+
lịch sử phiên bản của bạn nếu bạn vẫn cần nó.
900897

901-
**Bad:**
898+
**Không tốt:**
902899
```javascript
903900
function oldRequestModule(url) {
904901
// ...
@@ -913,7 +910,7 @@ inventoryTracker('apples', req, 'www.inventory-awesome.io');
913910

914911
```
915912

916-
**Good:**
913+
**Tốt:**
917914
```javascript
918915
function newRequestModule(url) {
919916
// ...
@@ -922,7 +919,7 @@ function newRequestModule(url) {
922919
const req = newRequestModule;
923920
inventoryTracker('apples', req, 'www.inventory-awesome.io');
924921
```
925-
**[back to top](#mục-lục)**
922+
**[Về đầu trang](#mục-lục)**
926923

927924
## **Đối tượng và Cấu trúc dữ liệu**
928925
### Sử dụng getter và setter

0 commit comments

Comments
 (0)