diff --git a/README.md b/README.md index 8247f63..e39608a 100644 --- a/README.md +++ b/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 extends Array { } ``` -**[⬆ повернутися до змісту](#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 { Для детального пояснення цієї ідеї зверніться до [оригінального посту](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 { } ``` -**[⬆ повернутися до змісту](#table-of-contents)** +**[⬆ повернутися до змісту](#зміст)** ## Переклади @@ -2929,4 +2929,4 @@ function getActiveSubscriptions(): Promise { Перевірте цю [дискусію](https://github.com/labs42io/clean-code-typescript/issues/15) для отримання додаткових деталей та прогресу. Ви можете зробити неоціненний внесок у спільноту *Clean Code*, переклавши це вашою мовою. -**[⬆ повернутися до змісту](#table-of-contents)** +**[⬆ повернутися до змісту](#зміст)**