Одни и те же имена везде
Пять пакетов — это одна библиотека с пятью фасадами, и объект готового прогона отзывается на одни и те же имена во всех пяти, записанные по правилам каждого языка и означающие ровно одно и то же.
Здесь это важнее местной привычки. Эту библиотеку никто не читает отдельно: её читают рядом с генератором, а пример, который вы копируете, с равной вероятностью написан не на вашем языке. Переходя между ними, читатель не должен по дороге переводить названия методов.
| Что даёт | TypeScript | Python | Java | C# | Rust |
|---|---|---|---|---|---|
| Весь прогон текстом | toString() | to_string() | toString() | ToString() | to_string() |
| Все записи сразу | toArray() | to_array() | toArray() | ToArray() | to_array() |
| Записи по одной | iterate() | iterate() | iterate() | Iterate() | iterate() |
| Одна запись по номеру | getAt(i) | get_at(i) | getAt(i) | GetAt(i) | get_at(i) |
| Прогон колонками, а не строками | toColumns() | to_columns() | toColumns() | ToColumns() | to_columns() |
| Записать в файл | writeFile() | write_file() | writeFile() | WriteFile() | write_file() |
| Какое зерно взято на самом деле | seedInfo() | seed_info() | seedInfo() | SeedInfo() | seed_info() |
| Во что обойдётся прогон | preflight() | preflight() | preflight() | Preflight() | preflight() |
| Сколько записей получится | count() | count() | count() | Count() | count() |
Своё написание тоже работает
Каждый пакет обзавёлся собственными именами раньше, чем появилась эта таблица, и все они продолжают работать. Ничего не объявлено устаревшим и ничего не переименовано: опубликованная библиотека не вправе ломать чужой код ради собственной аккуратности.
| Тоже верно | Где |
|---|---|
str(tdc) | Python |
len(tdc) | Python |
tdc[3] | Python |
for row in tdc | Python |
to_list | Python |
toList | Java |
Rows | C# |
this[int] | C# |
rows | Rust |
row | Rust |
seed | Rust |
Display | Rust |
effectiveCount | TypeScript |
То есть data.to_list() и data.to_array() в Python — один и тот же вызов, и писать
стоит тот, который лучше читается на месте. Таблица выше — та, на которую можно
рассчитывать во всех пяти.
Таблицу хранит fixtures/cross-language/api.json, и её читают все пять наборов тестов.
TypeScript, Python, Java и C# спрашивают через отражение, есть ли такой член; у Rust
отражения нет, поэтому его тест называет каждое имя в коде — вызовы просто не
скомпилируются, если имя пропадёт, — и сверяет свой список с тем же файлом.
Проверяется потому, что уже разошлось. Пока сторожа не было, у Python не было
to_string, у Java — toArray, у C# — ни GetAt, ни Iterate, у Rust — ни
to_array, ни get_at, а предки этой страницы всё равно утверждали, что имена
совпадают.