Заметка семнадцатая. Переменная users_ids
Всю свою сознательную жизнь я неправильно называю переменные. Вскрылось это благодаря Тёме во время очередного код-ревью, за что ему большое спасибо.
В моём коде часто можно встретить переменную users_ids. В ней, очевидно, я храню айдишники пользователей. Неважно, каких именно: каких-нибудь пользователей, которые интересуют меня прямо сейчас. И у меня никогда не было сомнений, что я называю эту переменную правильно. Пока Тёма не сказал, что носители языка называют её не users_ids, а user_ids.
Вот несколько доказательств:
- тред на стековерфлоу;
- поиск по гитхабу: user_ids встречается более 400 000 раз, а users_ids — только 5000;
- в гугле за редким исключением все пишут user_ids или userIds, но никак не users_ids и не usersIds.
Разбираясь дальше и расспрашивая знакомых, я узнал, что причина очень проста: существительное перед другим существительным в английском языке становится прилагательным и не может стоять во множественном числе. Поэтому носители языка и протестуют против users_ids: это словосочетание для них совершенно неестественно.
И теперь у меня большая проблема.
Проблема в том, что я всё ещё хочу называть переменную users_ids! Ведь это так логично. Переменная user_ids — это айдишники одного пользователя, в то время как users_ids — айдишники сразу нескольких. Ну ладно, с айдишниками не так наглядно. Но давайте другой пример.
group_members — это участники группы
groups_members — это участники нескольких групп
course_groups — группы внутри одного курса
courses_groups — группы нескольких курсов
course_group_members — участники группы курса
course_groups_members — участники, например, всех групп курса
courses_groups_members — все участники вообще всех групп всех курсов
Смотрите, сколько дополнительной семантики добавляет маленькая буква s в имя переменной! Надо лишь позволить себе забить на лингвистическую некорректность...
И вот как дальше жить? Страдать, но писать правильно, или переубеждать весь остальной мир?
проблема решается предлогом of:
groups_members – members_of_groups
courses_groups – groups_of_courses
course_groups_members – members_of_course_groups
courses_groups_members – members_of_groups_of_courses
user_ids – айдишники пользователей. Айдишники одного пользователя, так как это достаточно уникальный кейс, лучше назвать ids_of_user.