Вниз  Совершенный код
- 21.02.2014 / 22:20copy  #320615
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
В этой теме будут выкладываться примеры плохого кода и советы по его улучшению.
Если кто-то хочет подкинуть материалов (а у каждого, уверен, есть такие старые проекты, в которых код просто ужасный), смело кидайте, вместе поковыряем.

Рекомендовано к прочтению:
Стив Макконнелл - Совершенный Код
Совершенный код ХабраХабр

Главное правило: вы пишите код не для устройства, вы пишите его для людей! Почему? Потому что устройство работает не с кодом, а с бинарниками, и компилятору тоже не важно, как красиво вы оформляете код, а вот вы проводите над чтением/написанием кода очень много времени, поэтому упростите себе же задачу - пишите хороший код.

Основные советы по улучшению читабельности кода:
  - Делайте отступы в блоках.
  - Если так сложно 4 раза нажать на пробел, пользуйтесь форматированием кода в IDE (Source - Format Code), jBeautyME, http://jsbeautifier.org/ http://ctrlq.org/beautifier/
  - Старайтесь давать понятные и осмысленные имена переменным, методам и классам.
  - По возможности пишите комментарии в тех местах кода, которые не слишком очевидны.
Следование этим четырём советам значительно уменьшит количество ругани в ваш адрес при чтении ваших исходников.
__________________
 let live

Изменено aNNiMON (21.02 / 22:26) (всего 1 раз)
- 21.02.2014 / 22:25copy  #320616
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Отступы в блоках

Всё просто, после каждого блока ( { } - для Си-подобных языков, begin end - для Паскале-видных ) увеличиваем/уменьшаем количество пробелов в начале строки на равное количество. В Java это обычно 4 пробела. Вместо пробелов, конечно же, можно и Tab использовать.

Плохо
  1. void bubblesort(int[] arr){
  2. for(int i = arr.length-1; i > 0; i--){
  3. for(int j = 0; j < i; j++){
  4.   if( arr[j] > arr[j+1] )swap(arr, j, j+1);
  5.   }
  6.    }
  7.  }

Хорошо
  1. void bubblesort(int[] arr) {
  2.     for(int i = arr.length - 1; i > 0; i--) {
  3.         for(int j = 0; j < i; j++){
  4.             if (arr[j] > arr[j+1]) swap(arr, j, j+1);
  5.         }
  6.     }
  7. }

__________________
 let live
- 21.02.2014 / 22:52copy  #320621
Magatino
  Администратор

Magatino 
Сейчас: Offline
aNNiMON (21.02.2014/22:25)
Отступы в блокахВсё просто, после каждого блока ( { } - для Си-подобных языков, begin end - для Паскале-видных ) увеличиваем/уменьшаем количество пробелов в начале строки на равное количество. В Java
Кстати , у меня на OM и UCWEB по разному твои коды смотрятся , на UCWEB 7.6 пробелов нет.

А вообще для меня читабельнее вот так:
  1. void bubblesort(int []arr)
  2. {
  3.  
  4. for (int i=arr.length-1;i>0;i--)
  5. {
  6. for (int j=0;j<i;j++)
  7. {
  8. if (arr[j]>arr[j+1])
  9. swap(arr,j,j+1);
  10. }
  11. }
  12. }

А вот так ещё лучше:
  1. void bubblesort(int []arr)
  2. {
  3.  
  4. for (int i=arr.length-1;i>0;i--)
  5. for (int j=0;j<i;j++)
  6. if (arr[j]>arr[j+1])
  7. swap(arr,j,j+1);
  8.  
  9. }

Но так мне читабельно из-за того что у меня сорока :gg:
- 21.02.2014 / 23:00copy  #320623
Misha
  Пользователь

Misha 
Сейчас: Offline
Magatino, ненавижу такой формат кода :)
Ещё:

Плохо:
  1. if(...)
  2. doSomething();

Хорошо:
  1. if(...) doSomething();

- 21.02.2014 / 23:05copy  #320627
DominaN
  Пользователь

DominaN 
Сейчас: Offline
Misha, еще можно
  1. if (...)
  2.     doSomething();

- 21.02.2014 / 23:06copy  #320628
Magatino
  Администратор

Magatino 
Сейчас: Offline
Misha (21.02.2014/23:00)
Magatino, ненавижу такой формат кода :) Ещё:Плохо:if(...)doSomething();Хорошо:if(...) doSomething();
Дык , потому что у вас длинные строки и вам так удобно и отделил конструкторы , потому что я их теряю.
Я начинал с аннимовских исходников и честно они выглядят у меня хреново :gg:
- 21.02.2014 / 23:07copy  #320631
DominaN
  Пользователь

DominaN 
Сейчас: Offline
Кстати, довольно важный вопрос по поводу где ставить открывающую скобку. На новой строке выглядит вроде более логично, так как открывающая и закрывающая скобки находятся на одном уровне
- 21.02.2014 / 23:07copy  #320632
Vapigor
  Пользователь

Vapigor 
Сейчас: Offline
Эх, жаль с мв код нельзя, у меня в Лов3 такие исходники, что явно в топ5 попадают.
__________________
 Делай шум!
- 21.02.2014 / 23:08copy  #320633
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
Misha, А если, например, воспользоваться автоформатированием кода в NetBeans, то получится
  1. if (...) {
  2.     doSomething();
  3. }

__________________
 Да, детка, я - Король Ящериц!!!

Изменено HoldFast (21.02 / 23:08) (всего 1 раз)
- 21.02.2014 / 23:10copy  #320634
Misha
  Пользователь

Misha 
Сейчас: Offline
DominaN, например в Notepad++ делать так удобнее... если свернуть блок со скобкой без новой строки, то будет ровно 1 линия :)
да и вообще так красивее выглядит
Наверх  Всего сообщений: 233
Фильтровать сообщения
Поиск по теме
Файлы топика (7)
Поиск по форуму