2012-06-22 3 views
3

Мы провели большую дискуссию о небольшом мире кода в нашей команде.Чистый код и рефакторинг. Дополнительная локальная переменная

Пример 1 разработчик добавил дополнительную локальную переменную, чтобы сделать код более читаемым. В локальной переменной он сохранил значение из константы.

Пример 2 такой же код без дополнительной переменной, но менее читаемый с нашей точки зрения разработчика.

Что, по вашему мнению, более читаемо? Лучше с точки зрения рефакторинга?

1.

var tolerance = Constants.DateTypeGeneratorTolerance; 

var dayType = DateTypeGenerator.GenerateDateType(
       courseTripValidity, 
       tolerance, 
       symbols, 
       startDate, 
       endDate); 

2.

var dayType = DateTypeGenerator.GenerateDateType(
       courseTripValidity, 
       Constants.DateTypeGeneratorTolerance, 
       symbols, 
       startDate, 
       endDate); 
+3

Этот вопрос не имеет однозначного ответа, так что она может быть закрыта как слишком субъективная (но для чего это стоит, я предпочитаю версия с локальной переменной). –

+0

Я с @ChrisTaylor –

+0

Я бы убрал вары ... Я шучу. По крайней мере, первоначальный разработчик считал читаемость, что является плюсом на мой взгляд. –

ответ

1

Там нет окончательного ответа на этот вопрос, но я лично предпочитаю второй вариант. IMHO Constants.DateTypeGeneratorTolerance не является невыносимо длинным (хотя и не очень далеко от него). И если его имя хорошо выбрано, оно точно сообщает, что это значит. Принимая во внимание, что локальная переменная загромождает пространство и затрудняет мне следить за тем, что происходит - не только при прямом чтении кода, но и более громоздко искать обычаи этой константы.

Более того, само название длинное, поскольку оно содержит информацию о масштабах. Помещая все глобальные константы в один класс, вы чувствуете необходимость дифференцировать их, используя префиксы именования (например, DateTypeGenerator). Если вы переместили константу туда, где она логически принадлежит, - либо до DateTypeGenerator, либо к отдельному классу DateTypeGeneratorConstants - само имя константы станет коротким и кратким.

Обратите внимание, что на нескольких языках предусмотрены специальные функции, которые уменьшают потребность в квалификаторах, сокращая таким образом имена. Такие, как статический импорт в Java, или using директивы в C#.

Объединяя выше C# using директивы вы получите:

using Tolerance = DateTypeGenerator.Tolerance; 

... 

DateType dayType = DateTypeGenerator.GenerateDateType(
       courseTripValidity, 
       Tolerance, 
       symbols, 
       startDate, 
       endDate); 
+0

+1 Я предпочитаю не использовать локальные переменные. –

Смежные вопросы