Разработка ПО на профессиональном уровне v.2
.0.pdf
Главное требование: код должен быть простым!
●KISS — Keep It Simple, Stupid
●YAGNI — You Ain't Gonna Need It
●POLA — Principle Of Least Astonishment
Главное требование: код должен быть простым!
typeEmul.clear();
String typeCode = typeEmul.getCode(); attrService.initType(typeCode, typeEmul);
if ( ObjectAttributeType.CODE.equals(typeCode) || BOLinksAttributeType.CODE.equals(typeCode))
{
typeEmul.setProperty(ObjectAttributeType.METACLASS_FQN, targetClass.getValue()); if (permittedTypesPR != null)
{
Collection<DtObject> selectedTypes = permittedTypesPR.getProperty().getValue(); Collection<ClassFqn> selectedTypeFqns = Collections2.transform(selectedTypes,
DtObject.FQN_EXTRACTOR); typeEmul.setProperty(ObjectAttributeType.PERMITTED_TYPES,
Sets.newHashSet(selectedTypeFqns));
}
}
Главное требование: код должен быть простым!
Причина: надо много помнить
●какие переменные используются в этих строках;
●какие значения в них записаны;
●какой смысл они имеют;
●что делают вызываемые методы;
●что происходило до этого участка;
IDE помнит за нас
Что остается программисту?
Простой и понятный код
Названия переменных
Комментарии
и функций
Структура функций |
Форматирование кода |
Задача
"Жизнь" Джона Конвея:
1.В пустой (мертвой) клетке, рядом с которой есть три живые клетки, зарождается жизнь.
2.Если у живой клетки две или три живые соседки, то она продолжает жить. Иначе - умирает.
Задача
Рефакторинг
public void func(boolean[][] values, int a)
{
boolean[][] buf=new boolean[a][a]; for (int i=0;i<a;i++)
{
for (int j=0;j<a;j++)
{
int sum = 0;
sum+=i>0 && j>0 && values[i-1][j-1]?1:0; sum+=i>0 && values[i-1][j]?1:0;
sum+=i>0 && j<a-1 && values[i-1][j+1]?1:0; sum+=j>0 && values[i][j-1]?1:0;
sum+=j<a-1 && values[i][j+1]?1:0; sum+=i<a-1 && j<0 && values[i+1][j-1]?1:0; sum+=i<a-1 && values[i+1][j]?1:0; sum+=i<a-1 && j<a-1 && values[i+1][j+1]?1:0;
Шаг 1
Рефакторинг
if(values[i][j])
{
if(sum<2 || sum>3) buf[i][j]=false;
else
buf[i][j]=true;
}
else
{
if(sum==3)
buf[i][j]=true;
else
buf[i][j]=false;
}
}
}
for(int i=0;i<a;i++) for(int j=0;j<a;j++)
values[i][j]=buf[i][j];
}
Шаг 1
Что надо уметь программисту?
Наименования функций и переменных - это мощный инструмент!
