Перейти к основному содержимому

Одни и те же имена везде

Пять пакетов — это одна библиотека с пятью фасадами, и объект готового прогона отзывается на одни и те же имена во всех пяти, записанные по правилам каждого языка и означающие ровно одно и то же.

Здесь это важнее местной привычки. Эту библиотеку никто не читает отдельно: её читают рядом с генератором, а пример, который вы копируете, с равной вероятностью написан не на вашем языке. Переходя между ними, читатель не должен по дороге переводить названия методов.

Что даётTypeScriptPythonJavaC#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 tdcPython
to_listPython
toListJava
RowsC#
this[int]C#
rowsRust
rowRust
seedRust
DisplayRust
effectiveCountTypeScript

То есть 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, а предки этой страницы всё равно утверждали, что имена совпадают.