Я думаю, что строгость важна для каждого программиста, а написание элегантного и эффективного кода — наша цель на всю жизнь.
предисловие
Это может быть причина для Богородицы, у меня есть высокое требование кода, я буду переживать раньше, я буду возродиться, прежде чем я отправил код. В прошлом я прошел много неудовлетворенного кода-фрагмента, и у меня есть стажер , и много лет, написанные коллегами, которые разработали опыт. Сегодня вдруг сердце и поделитесь некоторыми фрагментами кода, надеюсь принести вдохновение и вдохновение каждому.
тема
Из-за влияния нашего стереотипного мышления код, который мы пишем, во многих случаях не напоминает другим, и нам трудно найти какие-то неподходящие места.
Плохое понимание карты
Student student=new Student("邵磊");
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("k", "学院");
map3.put("v", student.getCollogeName());
resultlist.add( map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("k", "专业");
map4.put("v", student.getMajorName());
resultlist.add( map4);
Map<String, Object> map5 = new HashMap<String, Object>();
map5.put("k", "班级");
map5.put("v", student.getBjmc());
resultlist.add(map5);
Из приведенного выше кода вы можете сразу увидеть, что этот разработчик, вероятно, просто использовал карту в начале и обнаружил, что все карты после list.add являются последними. Исходный код выглядит следующим образом
Student student=new Student("邵磊");
Map<String, Object> map = new HashMap<String, Object>();
map.put("k", "学院");
map.put("v", student.getCollogeName());
resultlist.add( map3);
map.put("k", "专业");
map.put("v", student.getMajorName());
resultlist.add( map);
Такой код приведет к перезаписи карты, потому что ключ тот же.
Так что плохого в том, чтобы изменить его код?
Основная проблема это имя переменной.Например,по этой логике в следующий раз вам понадобятся map6,map7 и map8.После того как эта переменная будет поддерживаться несколько раз,удалять или добавлять ее не элегантно.Вы могли бы ну поменяй на:
Student student=new Student("邵磊");
Map<String, Object> map = new HashMap<String, Object>();
map.put("k", "学院");
map.put("v", student.getCollogeName());
resultlist.add( map3);
map = new HashMap<String, Object>();
map.put("k", "专业");
map.put("v", student.getMajorName());
resultlist.add( map);
Таким образом, каждый раз, когда создается новая хэш-карта, проблема неэлегантного именования может быть устранена. Подумав об этом еще раз, я чувствую, что добавление k и v на карту немного неэлегантно, поэтому я просто изменил его на класс сущности.
Student student=new Student("邵磊");
resultlist.add( new MapKV("学院",student.getCollogeName()) );
resultlist.add( new MapKV("专业",student.getMajorName()) );
И этот MapKV вводить не надо, там всего 2 String k v.
Я не очень хорошо разбираюсь в mybatis
public interface QuestionDao {
List<Question> getQuestionList();
}
Соответствующий файл карты QuestionMapper.xml
List<Question> questionList = QuestionDao.findBy(params);
if (mexamQuestionList == null) {
//抛异常
}
Список, возвращаемый слоем dao mybatis, не может быть нулевым, даже если size()=0 вернет только новый список, поэтому нет необходимости оценивать список как нулевой
незнакомый с равными
if (user.get("sl").equals("邵磊")) {
//一大堆代码
}
Многие люди говорят, как эта ошибка может существовать? Если фронт равен нулю, будет сообщено об ошибке. Однако я искал предыдущие проекты по всему миру, и я неизбежно могу найти один или два. В конце концов, есть исторические проблемы, стажер проблемы и тд. Поскольку мы знаем, что null не может быть .equals, измените его на:
if ("邵磊".equals(user.get("sl"))) {
//一大堆代码
}
злоупотребление toString
user.get("sl").toString();
И как только фронт станет нулевым, будет сообщено об ошибке, а нуль не может иметь никакого метода.
не знаком с возвратом
public String getResult() {
if ("条件") {
//一大堆代码
return "结果";
}else {
//一大堆代码
return "结果";
}
}
Теперь, когда есть возврат, вы можете подтвердить, что следующий код не пойдет, вы можете с уверенностью его выпустить.
public String getResult() {
if ("条件") {
//一大堆代码
return "结果";
}
//一大堆代码
return "结果";
}
Не буду использовать продолжение, прерывание, если оно слишком длинное
Например, при поиске имени в списке, когда оно будет найдено, необходимо сделать перерыв во времени, чтобы сэкономить ЦП.
for (int i = list.size() - 1; i >= 0; i--) {
if ("邵磊".equals(list.get(i).getName())) {
user=list.get(i);
}
}
изменить на
for (int i = list.size() - 1; i >= 0; i--) {
if ("邵磊".equals(list.get(i).getName())) {
user=list.get(i);
break;
}
}
Предполагая, что некоторые операции не выполняются, кроме как для человека с определенным именем, код выглядит следующим образом:
for (int i = list.size() - 1; i >= 0; i--) {
if ("邵磊".equals(list.get(i).getName())) {
//这里只有2件事。
user=list.get(i);
}else{
//这里做很多事情
}
}
На этом этапе мы можем удалить if и использовать continue
for (int i = list.size() - 1; i >= 0; i--) {
if ("邵磊".equals(list.get(i).getName())) {
//这里只有2件事。
user=list.get(i);
continue;
}
//这里做很多事情
}
продолжить: выйти из этого цикла и перейти к следующему циклу
break: выйти из тела цикла и продолжить выполнение тела функции вне цикла
return: выйти из всего тела функции, часть после тела функции больше не выполняется
Незнакомый для цикла
if (list.size()==0) {
for (int i = list.size() - 1; i >= 0; i--) {
//做事情
}
}
И мы знаем, что даже list.size()==0 не повлияет на код, лучше напрямую
for (int i = list.size() - 1; i >= 0; i--) {
//做事情
}
Неправильное использование try catch
попробуйте поймать обертку куска
try {
//这段代码可能异常
//下面代码不会异常
//此处代码不会异常
//此处代码不会异常
} catch (Exception e) {
//报错
}
вместо
try {
//这段代码可能异常
} catch (Exception e) {
//报错
}
//下面代码不会异常
//此处代码不会异常
//此处代码不会异常
Это более читабельно, более элегантно, и, конечно же, броски также можно использовать для перехвата исключений. try catch записывается в цикле for
for (int i = list.size() - 1; i >= 0; i--) {
try {
//这段代码可能异常
} catch (Exception e) {
//报错
}
//下面代码不会异常
}
Мы знаем, что try catch упакует весь код, который требует ресурса, часто TRYCATCH, в дополнение к особым обстоятельствам, иначе метод может быть извлечен, а метод может быть завернут.
Повтор фрагмента
Например, если метод вызывается несколько раз в определенном классе, но различаются только некоторые переменные, методы и переменные можно извлечь, чтобы сделать код кратким.
не используйте регистр
if(type==1){
}else if(type==2){
}else if(type==3){
}else if(type==4){
}
…………
При таком написании будет написано длинное if, и мы знаем, что использование регистра также может решить проблему сопоставления строк.В Java 7 и выше поддерживаются регистровые строки.
switch(参数) {
case 常量表达式1: break;
case 常量表达式2: break;
...
default: break;
}
Ленивая загрузка не используется
как
String str = "邵磊";
if (i == 1){
list.add(str);
}
можно изменить на
if (i == 1){
String str = "邵磊";
list.add(str);
}
Постоянно создавать ссылку на объект
for (int i = 1; i <= 100; i++)
{
Object obj = new Object();
//其他代码
}
Это только откроет много ссылок на объекты Object в памяти, которые можно изменить на
Object obj;
for (int i = 1; i <= 100; i++)
{
obj = new Object();
//其他代码
}
Суммировать
У нас может быть много идей и мы можем написать много видов кода для решения проблемы, но написание кода элегантно - это техническая задача. Конечно, на этот раз я сначала представлю часть. Если внимание будет высоким, я продолжу обновлять его. . Напоследок хочу добавить, что я не Дева, просто люди так обо мне говорят, так что я это признаю.
Если вы чувствуете себя хорошо, не забудьте следовать за мной!
Самородки:
Наггетс. Талант / пользователь / 272334 ...