Skip to content

Правила форматирования структур данных ​


§8 Литералы ​

§8.1 Целочисленные литералы. Целочисленные литералы выводятся напрямую.

// ✅ Правильно
let x = 42;

§8.2 Литералы с плавающей точкой. Литералы с плавающей точкой должны содержать десятичную точку.

// ✅ Правильно
let x = 3.14;
let y = 42.0;  // требуется десятичная точка

// ❌ Неправильно
let y = 42;    // целое число, а не число с плавающей точкой

§8.3 Строковые литералы. По умолчанию используются двойные кавычки. Если single_quote = true, используются одинарные кавычки.

// По умолчанию (двойные кавычки)
let s = "hello";

// single_quote = true
let s = 'hello';

§8.4 Логические литералы. Логические литералы записываются в нижнем регистре.

// ✅ Правильно
let x = true;
let y = false;

// ❌ Неправильно
let x = True;
let y = FALSE;

§10 Списки и словари ​

§10.1 Формат списков. Списки заключаются в [], элементы разделяются запятыми.

// ✅ Правильно
let x = [1, 2, 3];

// ❌ Неправильно
let x = [1,2,3];

§10.2 Формат словарей. Словари заключаются в {}, пары ключ-значение записываются в формате key: value.

// ✅ Правильно
let x = {"a": 1, "b": 2};

// ❌ Неправильно
let x = {"a":1, "b":2};

§10.3 Генераторы списков. Генераторы списков используют формат [expr for var in iterable].

// ✅ Правильно
let x = [i * 2 for i in range(10)];

// С условием
let x = [i for i in range(10) if i > 5];

§11 Выражения Match ​

§11.1 Формат Match. Между ключевым словом match и выражением ставится пробел.

// ✅ Правильно
match x { ... }

// ❌ Неправильно
match(x) { ... }

§11.2 Выравнивание шаблонов. Несколько шаблонов должны быть выровнены с помощью пробелов.

// ✅ Выровнено
match x {
    1    => "one",
    2    => "two",
    100  => "hundred",
    _    => "other",
}

§11.3 Перенос длинных шаблонов. Если шаблон слишком длинный, он переносится на новую строку, а => выравнивается относительно тела.

// ✅ С переносом
match x {
    VeryLongPatternName { field1, field2 }
        => handle_case(field1, field2),
    _ => default_case(),
}

§11.4 Кортежи ​

§11.4.1 Формат кортежей. Кортежи заключаются в (), элементы разделяются запятыми.

// ✅ Правильно
let t = (1, "hello", true);
let t = (1,);  // одноэлементный кортеж

// ❌ Неправильно
let t = (1, "hello", true);  // отсутствует пробел после запятой
let t = (1,"hello",true);  // отсутствует пробел после запятой

§11.4.2 Пустой кортеж. Пустой кортеж обозначается как ().

// ✅ Правильно
let t = ();

§11.5 Доступ по индексу ​

§11.5.1 Формат индексации. Индексация использует формат expr[index].

// ✅ Правильно
let x = arr[0];
let y = matrix[i][j];

// ❌ Неправильно
let x = arr [0];  // лишний пробел
let y = matrix[ i ][ j ];  // лишний пробел

§11.6 Доступ к полям ​

§11.6.1 Формат доступа к полям. Доступ к полям использует формат expr.field.

// ✅ Правильно
let x = obj.field;
let y = obj.method();

// ❌ Неправильно
let x = obj . field;  // лишний пробел
let y = obj. field;  // лишний пробел

§11.6.2 Цепочечный доступ к полям. Если цепочка вызовов методов превышает ширину строки, каждый вызов метода размещается на отдельной строке.

// При превышении ширины строки
let result = object.method1().method2().method3().method4();

// После форматирования
let result = object
    .method1()
    .method2()
    .method3()
    .method4();