Comments 18
Мы только отказались от Венгерской нотации. Отпусти и забудь</blockquote
Разве отказались?
// Плохо:
mergeTableCells(List cells)
sortEventsUsingComparator(List events,
Comparator comparator)
// Хорошо:
merge(List cells)
sort(List events, Comparator comparator)
если функция merge находится в другом файле и там ещё пачка аналогичных,
мне проще, когда в названии функции есть намек на ее содержание.
Разве отказались?
Мы и не начинали.
Очень интересно, какая религия не позволяет разрабочику указать «using namespace std» в файле, или даже в пределах scope где std так и пестрит.
и других языках с namespace
Нет. Контрпример: Java.
Интересно, часто вы видели в джаве out.println вместо System.out.println со статическим импортом System.out? Ближайший аналог неймспейсов в джаве — это именно статические импорты.
разговор был про неймспейсы. Никто на джаве не пишет java.lang.System.out.println.
Похоже, некоторые разработчики просто считают using вредным, но вот читабельность кода от этого нисколько не улучшается, а если учесть темплейты и прочее, то конструкции разворачиваются просто невероятные, и это при том что гайдлайны проекта требуют всё вмещать в 80 колонок.
Например, если это библиотека для работы с изображениями, то имена методов должны быть простыми и однозначными: crop, rotate, resize и т.д. Тогда они логичные и их легко запомнить. Если это будет что-то типа makeImageResize(), то такие имена сложно удержать в памяти, придётся постоянно дёргать документацию или полагаться на автозаполнение, что приведёт к тому, что программисты будут избегать этой библиотеки.
Уже более 10 лет назад примерно на равных соревновались три библиотеки для JavaScript: jQuery, Prototypre.js и Mootools. На мой взгляд, не последнюю роль в выходе jQuery в победители сыграла его лаконичность. Сравните:
$$('.foo').getElement('div.bar')
и $('.foo').find('div.bar')
el.addEvent('click', function(){})
и el.on('click', function(){})
$$('.foo').setStyle('width', '300px')
и $('.foo').css('width', '300px');
Я в то время пытался использовать MooTools и никак не мог запомнить названия методов, а jQuery зашло моментально, можно было вспомнить что писать чисто по логике.
С тех пор я стараюсь выбирать для своих проектов менее многословные библиотеки, если есть такая возможность. И в том числе поэтому не люблю Java и Java-подобные фреймворки. Правильное использование неймспейсов делает длинные имена абсолютно излишним.
Есть и другая крайность — слишком общие названия.
Тот же find
— что именно он найдет и вернет? Первый элемент, последний, случайный, конкретный, все подходящие? Что это за элемент будет? getElement
— уже лучше, хотя бы понятно, что он будет один.
В этом смысле меня "радует" интерфейс к MongoDB в Node.js, где есть find, который возвращает курсор (по сути, итератор), и есть findOne, который возвращает сразу объект. А ещё там есть findOneAndReplace, а есть replaceOne, которые отличаются, судя по докам, тем, что первая операция атомарна, а вторая — нет. Весело, блин...
Длинные имена слишком длинные