mirror of
https://github.com/labs42io/clean-code-typescript.git
synced 2025-05-11 04:43:31 +00:00
Update README.md
This commit is contained in:
parent
5eff6da09e
commit
8c8e819674
1 changed files with 45 additions and 45 deletions
90
README.md
90
README.md
|
@ -657,7 +657,7 @@ createMenu({ body: 'Bar' });
|
|||
Щоб уникнути будь-яких побічних ефектів і неочікуваної поведінки передаючи явно значення `undefined` або `null`, ви можете вказати компілятору TypeScript не дозволяти це.
|
||||
Дивіться опцію [`--strictNullChecks`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html#--strictnullchecks) в TypeScript.
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Не використовуйте прапорці як параметри функцій
|
||||
|
||||
|
@ -688,7 +688,7 @@ function createFile(name: string) {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Уникайте побічних ефектів (частина 1)
|
||||
|
||||
|
@ -730,7 +730,7 @@ const encodedName = toBase64(name);
|
|||
console.log(name);
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Уникайте побічних ефектів (частина 2)
|
||||
|
||||
|
@ -764,7 +764,7 @@ function addItemToCart(cart: CartItem[], item: Item): CartItem[] {
|
|||
};
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Не пишіть до глобальних функцій
|
||||
|
||||
|
@ -798,7 +798,7 @@ class MyArray<T> extends Array<T> {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Віддавайте перевагу функціональному програмуванню над імперативним
|
||||
|
||||
|
@ -853,7 +853,7 @@ const totalOutput = contributions
|
|||
.reduce((totalLines, output) => totalLines + output.linesOfCode, 0);
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Інкапсулюйте умови
|
||||
|
||||
|
@ -877,7 +877,7 @@ if (canActivateService(subscription, account)) {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Уникайте негативних умов
|
||||
|
||||
|
@ -905,7 +905,7 @@ if (!isEmailUsed(email)) {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Уникайте умов
|
||||
|
||||
|
@ -970,7 +970,7 @@ class Cessna extends Airplane {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Уникайте перевірки типів
|
||||
|
||||
|
@ -1000,7 +1000,7 @@ function travelToTexas(vehicle: Vehicle) {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Не оптимізуйте надмірно
|
||||
|
||||
|
@ -1024,7 +1024,7 @@ for (let i = 0; i < list.length; i++) {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Видаляйте мертвий код
|
||||
|
||||
|
@ -1057,7 +1057,7 @@ const req = requestModule;
|
|||
inventoryTracker('apples', req, 'www.inventory-awesome.io');
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Використовуйте ітератори та генератори
|
||||
|
||||
|
@ -1139,7 +1139,7 @@ itiriri(fibonacci())
|
|||
.forEach(fib => console.log(fib));
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Об'єкти та структури даних
|
||||
|
||||
|
@ -1205,7 +1205,7 @@ const account = new BankAccount();
|
|||
account.balance = 100;
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Створюйте об'єкти з приватними/захищеними членами
|
||||
|
||||
|
@ -1248,7 +1248,7 @@ class Circle {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Віддавайте перевагу незмінності
|
||||
|
||||
|
@ -1346,7 +1346,7 @@ const result = readonlyData(100);
|
|||
result.value = 200; // помилка
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### type проти interface
|
||||
|
||||
|
@ -1404,7 +1404,7 @@ class Square implements Shape {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Класи
|
||||
|
||||
|
@ -1448,7 +1448,7 @@ class Dashboard {
|
|||
// ...
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Висока згуртованість і низька зв'язність
|
||||
|
||||
|
@ -1528,7 +1528,7 @@ class UserNotifier {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Віддавайте перевагу композиції перед успадкуванням
|
||||
|
||||
|
@ -1597,7 +1597,7 @@ class EmployeeTaxData {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Використовуйте ланцюжок методів
|
||||
|
||||
|
@ -1679,7 +1679,7 @@ const query = new QueryBuilder()
|
|||
.build();
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## SOLID
|
||||
|
||||
|
@ -1734,7 +1734,7 @@ class UserSettings {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Принцип відкритості/закритості (OCP)
|
||||
|
||||
|
@ -1827,7 +1827,7 @@ class HttpRequester {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Принцип підстановки Лісков (LSP)
|
||||
|
||||
|
@ -1944,7 +1944,7 @@ const shapes = [new Rectangle(4, 5), new Rectangle(4, 5), new Square(5)];
|
|||
renderLargeShapes(shapes);
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Принцип розділення інтерфейсу (ISP)
|
||||
|
||||
|
@ -2025,7 +2025,7 @@ class EconomicPrinter implements Printer {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Принцип інверсії залежностей (DIP)
|
||||
|
||||
|
@ -2122,7 +2122,7 @@ const reader = new ReportReader(new JsonFormatter());
|
|||
const report = await reader.read('report.json');
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Тестування
|
||||
|
||||
|
@ -2140,7 +2140,7 @@ const report = await reader.read('report.json');
|
|||
|
||||
3. Вам не дозволяється писати більше виробничого коду, ніж достатньо для проходження одного невдалого модульного тесту.
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Правила F.I.R.S.T.
|
||||
|
||||
|
@ -2156,7 +2156,7 @@ const report = await reader.read('report.json');
|
|||
|
||||
- **Timely** (Своєчасні) модульні тести повинні бути написані до виробничого коду. Якщо ви пишете тести після виробничого коду, ви можете виявити, що написання тестів занадто складне.
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Одна концепція на тест
|
||||
|
||||
|
@ -2206,7 +2206,7 @@ describe('AwesomeDate', () => {
|
|||
});
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Назва тесту повинна розкривати його намір
|
||||
|
||||
|
@ -2240,7 +2240,7 @@ describe('Calendar', () => {
|
|||
});
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Асинхронність
|
||||
|
||||
|
@ -2311,7 +2311,7 @@ downloadPage('https://en.wikipedia.org/wiki/Robert_Cecil_Martin', 'article.html'
|
|||
|
||||
`Promise.all` особливо корисний, коли існує потреба запускати завдання паралельно. `Promise.race` полегшує реалізацію таких речей, як тайм-аути для обіцянок.
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Async/Await ще чистіші за обіцянки
|
||||
|
||||
|
@ -2359,7 +2359,7 @@ try {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Обробка помилок
|
||||
|
||||
|
@ -2424,7 +2424,7 @@ function calculateTotal(items: Item[]): Failable<number, 'empty'> {
|
|||
|
||||
Для детального пояснення цієї ідеї зверніться до [оригінального посту](https://medium.com/@dhruvrajvanshi/making-exceptions-type-safe-in-typescript-c4d200ee78e9).
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Не ігноруйте перехоплені помилки
|
||||
|
||||
|
@ -2460,7 +2460,7 @@ try {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Не ігноруйте відхилені обіцянки
|
||||
|
||||
|
@ -2501,7 +2501,7 @@ try {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Форматування
|
||||
|
||||
|
@ -2564,7 +2564,7 @@ type Container = { /* ... */ }
|
|||
Перевагу слід віддавати використанню `camelCase` для змінних, функцій та членів класів.
|
||||
Перевагу слід віддавати використанню капіталізованого `SNAKE_CASE` для констант.
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Функції-викликачі та функції-виклики повинні бути близькими
|
||||
|
||||
|
@ -2653,7 +2653,7 @@ const review = new PerformanceReview(employee);
|
|||
review.review();
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Організуйте імпорти
|
||||
|
||||
|
@ -2702,7 +2702,7 @@ import { ApiCredentials, Adapters } from './common/api/authorization';
|
|||
import { ConfigPlugin } from './plugins/config/configPlugin';
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Використовуйте аліаси TypeScript
|
||||
|
||||
|
@ -2736,7 +2736,7 @@ import { UserService } from '@services/UserService';
|
|||
...
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Коментарі
|
||||
|
||||
|
@ -2763,7 +2763,7 @@ const isSubscriptionActive = subscription.endDate > Date.now;
|
|||
if (isSubscriptionActive) { /* ... */ }
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Не залишайте закоментований код у своїй кодовій базі
|
||||
|
||||
|
@ -2789,7 +2789,7 @@ type User = {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Не ведіть журнал у коментарях
|
||||
|
||||
|
@ -2817,7 +2817,7 @@ function combine(a: number, b: number): number {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Уникайте позиційних маркерів
|
||||
|
||||
|
@ -2879,7 +2879,7 @@ class Client {
|
|||
};
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
### Коментарі TODO
|
||||
|
||||
|
@ -2907,7 +2907,7 @@ function getActiveSubscriptions(): Promise<Subscription[]> {
|
|||
}
|
||||
```
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
||||
## Переклади
|
||||
|
||||
|
@ -2929,4 +2929,4 @@ function getActiveSubscriptions(): Promise<Subscription[]> {
|
|||
Перевірте цю [дискусію](https://github.com/labs42io/clean-code-typescript/issues/15) для отримання додаткових деталей та прогресу.
|
||||
Ви можете зробити неоціненний внесок у спільноту *Clean Code*, переклавши це вашою мовою.
|
||||
|
||||
**[⬆ повернутися до змісту](#table-of-contents)**
|
||||
**[⬆ повернутися до змісту](#зміст)**
|
||||
|
|
Loading…
Add table
Reference in a new issue