Презентацията, но като сайт

Именуване на индикатори и форматиране на код

Глава 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

Конвенции за писане

Различните езици използват различни стилове за писане на думите в имената.

СтилПримерКъде
camelCasemyVariablePriceJavaScript, Java
PascalCaseMyCustomIndicatorКласове
snake_casemy_variable_pricePython
kebab-casekogato-pishesh-takaCSS класове, адреси на сайтове
Camel-Kebab-Case
(по-известен като Train-Case)
Kogato-Pishesh-TakaHTTP хедъри, напр. Content-Type
UPPER_CASEMAX_BARSКонстанти

Опитай сам

Едно и също нещо на два езика

JavaScript

class MyCustomIndicator {
  getLastPrice() {
    return this.lastPrice;
  }
}

Python

class MyCustomIndicator:
    def get_last_price(self):
        return self.last_price

Глава 5 · последна, после отиваш да играеш

Коментиране на кода

Коментарът е нужен, за да обясни защо е направен даден избор (бизнес логика), а не толкова как работи кодът.

Излишно: повтаря кода

i++; // увеличава i с 1

// проверява дали загубата е 0
if (totalLoss === 0) return 100;

Полезно: обяснява защо

// Без загуби няма по какво да делим.
// По дефиниция RSI тогава е 100.
if (totalLoss === 0) return 100;

Документация

За функциите и техните параметри използвай стандартизирани коментари. Редакторът ти ги показва сам, когато извикаш функцията.

/**
 * Изчислява прост RSI за последните барове.
 * @param {number[]} closePrices Цени при затваряне, от най-старата към най-новата.
 * @param {number} rsiLength Брой барове, обикновено 14.
 * @returns {number} Стойност от 0 до 100.
 */
function calculateRSI(closePrices, rsiLength) { /* ... */ }

Благодаря за вниманието!

Спонсор: Tiny Tower

Tiny Tower: Warden's Climb, корица на играта Изкачи кулата

Безплатно!

ЧЕСТИТО! Ти си 1 000 000-ият читател на тази глава!

Награда: няма. Но има кула, магьосник с кинжал и Уордън, който те чака на всеки пети етаж.

Кадър от Tiny Tower: Warden's Climb Вземи си наградата

Фалшива реклама. Esc също затваря този прозорец, ако бутонът пак избяга.