Глава 1 · спонсорирана от Tiny Tower
Какво представлява чистият код?
Кодът се чете много по-често, отколкото се пише.
Ключовият принцип е, че кодът трябва да говори сам за себе си. Целите са три:
- Лесно разбиране от други програмисти.
- По-малко грешки при дебъгване.
- Бързо добавяне на нови функционалности.
Пример: една и съща функция, два пъти
И двете версии смятат прост RSI върху едни и същи цени. На компютъра му е все едно. На теб след три месеца няма да ти е.
Глава 2 · тази глава няма да те удари, за разлика от Уордъна
Правила за именуване на променливи
- Използвай говорещи имена:
movingAveragePeriod, а не самоmap. - Избягвай еднобуквени имена, освен за временни броячи като
iилиjв цикъл. - Избягвай съкращения, които само ти разбираш.
Лошо
int x = 14; float map = 20; float p2 = close[1];
Добро
int rsiLength = 14; float movingAveragePeriod = 20; float previousClosePrice = close[1];
Изключението с брояча изглежда така. Тук i живее три реда и никой не се чуди какво е:
// Спонсор на този цикъл: Tiny Tower
for (let i = 0; i < closePrices.length; i++) {
totalPrice += closePrices[i];
}
Провери се: говорещо ли е името?
Глава 3 · всеки пети етаж, по една глава
Именуване на функции и индикатори
Функциите започват с глагол, защото извършват действие. Така редът се чете почти като изречение.
Лошо
rsi(); trendLine(); condition();
Добро
calculateRSI(); drawTrendLine(); checkCondition();
Индикатори и константи
Самите индикатори и модули получават ясни имена. Константите, които не се променят, обикновено се пишат с главни букви.
const MAX_BARS = 500;
const RSI_OVERBOUGHT_LEVEL = 70;
const rsiValue = calculateRSI(closePrices, 14);
if (rsiValue > RSI_OVERBOUGHT_LEVEL) {
drawOverboughtMarker(lastBar);
}
Сравни с if (r > 70) d(b);. Същата логика, но вече трябва да питаш автора. А той е на пети етаж.
Глава 4 · camelCase, PascalCase, TinyTowerCase
Конвенции за писане
Различните езици използват различни стилове за писане на думите в имената.
| Стил | Пример | Къде |
|---|---|---|
| camelCase | myVariablePrice | JavaScript, Java |
| PascalCase | MyCustomIndicator | Класове |
| snake_case | my_variable_price | Python |
| kebab-case | kogato-pishesh-taka | CSS класове, адреси на сайтове |
| Camel-Kebab-Case (по-известен като Train-Case) | Kogato-Pishesh-Taka | HTTP хедъри, напр. Content-Type |
| UPPER_CASE | MAX_BARS | Константи |
Опитай сам
Едно и също нещо на два езика
JavaScript
class MyCustomIndicator {
getLastPrice() {
return this.lastPrice;
}
}Python
class MyCustomIndicator:
def get_last_price(self):
return self.last_priceБлагодаря за вниманието!
Спонсор: Tiny Tower
Изкачи кулата
Глава 5 · последна, после отиваш да играеш
Коментиране на кода
Коментарът е нужен, за да обясни защо е направен даден избор (бизнес логика), а не толкова как работи кодът.
Излишно: повтаря кода
Полезно: обяснява защо
Документация
За функциите и техните параметри използвай стандартизирани коментари. Редакторът ти ги показва сам, когато извикаш функцията.
/** * Изчислява прост RSI за последните барове. * @param {number[]} closePrices Цени при затваряне, от най-старата към най-новата. * @param {number} rsiLength Брой барове, обикновено 14. * @returns {number} Стойност от 0 до 100. */ function calculateRSI(closePrices, rsiLength) { /* ... */ }