Никогда не используйте длинное слово, когда подойдет крошечное.
Я не думаю, что ваш тезис «длина имени метода пропорциональна длине метода» действительно держит воду.
Возьмите пример, который вы даете: «getNumberOfSkinCareElptableItemsWithinTransaction». Для меня это звучит так, будто выполняет только одно: подсчитывает количество элементов в транзакции, попадающих в определенную категорию. Конечно, я не могу судить, не видя фактического кода для метода, но для меня это звучит как хороший метод.
С другой стороны, я видел множество методов с очень короткими и лаконичными именами, которые способствуют большой работе, например, «processSale» или когда-либо популярный «doStuff».
Я думаю, что было бы трудно дать жесткое правило о длине имени метода, но цель должна быть: достаточно длинной, чтобы передать то, что делает функция, достаточно короткой, чтобы быть читаемой. В этом примере я думаю, что getSkinCareCount, вероятно, было бы достаточно. Вопрос в том, что вам нужно различать. Если у вас есть одна функция, которая подсчитывает элементы, отвечающие требованиям ухода за кожей, в транзакциях, и другая, которая подсчитывает элементы, отвечающие критериям ухода за кожей, во что-то еще, тогда «WithinTransactions» добавляет ценность. Но если это ничего не значит для разговора о таких предметах за пределами транзакции, то нет смысла загромождать название такой лишней информацией.
Во-вторых, я думаю, что совершенно нереально предположить, что имя любой управляемой длины точно скажет вам, что делает функция во всех случаях, кроме самых тривиальных. Реальная цель состоит в том, чтобы сделать имя, которое дает читателю подсказку, и это можно запомнить позже. Например, если я пытаюсь найти код, который вычисляет, сколько антиматерии нам нужно использовать для достижения скорости деформации, если я посмотрю на имена функций и увижу «calibrateTransporter», «firePhasers» и «calcAntimatterBurn», то довольно ясно, что первые два не так ли, но третий может быть. Если я проверю и обнаружу, что это действительно то, что я ищу, будет легко вспомнить это, когда я вернусь завтра, чтобы еще немного поработать над этой проблемой. Это достаточно хорошо.
Три, длинные имена, которые похожи, сбивают с толку, чем короткие имена. Если у меня есть две функции, называемые «calcSalesmanPay» и «calcGeekPay», я могу сделать правильное предположение, которое на один взгляд. Но если они называются «CalculayMonthlyCheckAmountForSalesmanForExportToAccountingSystemAndReconciliation» и «calcMonthlyCheckAmountForProgrammersForExportToAccountingSystemAndReconciliation», я должен изучить имена, чтобы увидеть, какие именно. Дополнительная информация в названии, вероятно, контрпродуктивна в таких случаях. Это превращает полсекунды в 30 секунд.