Путь от говнокода к просветлению. Часть 1-2.

Уроки по PHP, Javascript и т.п.
Ответить
Аватара пользователя
alexei
Разработчик
Разработчик
Сообщения: 836
Зарегистрирован: 21 янв 2010, 19:44

Путь от говнокода к просветлению. Часть 1-2.

Сообщение alexei »

1. Пишем понятный код.
Для начала код должен быть читаемый и понятным.
Зачем это нужно? Вы сейчас новичок в программировании и иногда Вам приходится обращаться за советам к более опытным. Читаемый и понятный код увеличит шанс на то, что Вам помогут.

Начну с имен переменных и названий функций.
Они должны быть написаны на английском языке и отражать их предназначение.
Если Вы не знаете англ. язык, то можно воспользоваться translate.google.com или его аналогом. У веб разработчика проблем с интернетом не должно быть.

Не пишите длинные и сложные названия. Вот, допустим, делаем блок достижения (achievements), даже при хорошем знании англ. Вы можете допустить ошубку, поэтому лучше воспользоваться awards (награды).

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

Код: Выделить всё

count_users=10;countUsers=10;
Одна из ужасных вещей, когда слово class зарезервирован и программист пишет Class (с большой буквы).

Из этих 2-х вариантов выберите один и используйте только его (не смешивайте).

Индексы можно обозначать обозначать i,j,k. неизвестные переменные x,y,z и т.п.

Еще важный момент — это комментарии. Либо на англ языке, либо на русском, опять же без транслита. Лишние комментарии тоже плохо, вот пример:

Код: Выделить всё

$("#friends").html(data).show(); //Загружает и отображает блок друзья.
Отступы и переносы:
1) Используйте хорошие редакторы кода, где можно есть горячие клавиши для быстрого формата кода.
2) Не пишите в одну строку. Разбивайте, пример:

Код: Выделить всё

tmp = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';tmp += 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; tmp += 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; tmp += 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';  tmp='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //а вот так не надо
Вообще горизонтальная прокрутка не очень удобно.

3) Вот один из примеров оформления if else.

Код: Выделить всё

if (json.user.side == 0) {    tmp_side = "Нейтральная";}else if (json.user.side > 0) {    tmp_side = "Свет (" + json.user.side + ")";}else {    tmp_side = "Тьма (" + ((-1) * json.user.side) + ")";}
2. Отсекаем лишнее.
Очень часто можно заметить, что объявляются лишние переменные, берутся лишние поля из базы используется тип на 4 байта, вместо одного.

1) Переменные следует объявлять не в начале функции, а где они будут нужны. Иногда переменные используются только в одной из веток оператора if, либо в самом конце функции. Им незачем висеть.

Код: Выделить всё

//Плохой кодvar s=0;//.......... Много кода, где s не используется..........if(x=5){    s=data[0];}else {    return s;} //Хороший код//.......... Много кода, где s не используется..........if(x!="qwerty"){    return 0;}return data[0]; 
2) Используете тип переменной, который Вам нужен, если храните пол пользователя в БД, то используете 1 байт, а не больше. Хотя, есть тип bit, который занимает 1 бит и если в БД 8 таких полей, то они вместе занимают 1 байт. Это на заметку, довольно редко так бывает.

3) Берите то, что нужно. Делая запрос к БД берите только те поля, которые вам нужны. Тоже касается и API запросам к ВК, зачем получать фамилию, когда нужно только имя.

Код: Выделить всё

SELECT * FROM users WHERE level>5; // плохоSELECT name FROM users WHERE level>5; // хорошо
4) Не используете лишние циклы и рекурсию. Прежде, чем что-то делать подумайте, а оно здесь точно нужно?

Код: Выделить всё

//плохой вариантfor(var i=0; i<2; i++){    Test(i);} //хороший вариантTest(0);Test(1);

5) Не выполняйте лишние итерации, пример:

Код: Выделить всё

// плохой вариантvar tmp=0;for(var i=0; i<length; i++){    if(data[i]>500)    {        tmp=data[i];    }} // хороший вариантvar tmp=0;for(var i=0; i<length; i++){    if(data[i]>500)    {        tmp=data[i];        break;    }}
Ответить