Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правила хорошего кода 
:(
    Опции темы
MuToGeN
Дата 23.6.2008, 07:29 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 4
Всего: 32



Цитата(gta4kv @  22.6.2008,  19:18 Найти цитируемый пост)
пример в студию

Ну, к примеру, отделять ключевые слова от остального пробелами и пользовать { } для любых блоков, даже если они состоят из одной строки, т.е.
Код

while (clauses) {
    if (other_clauses) {
        // тут какой-то еще код
    }
}

вместо

while(...) if (...)
        ......

Если функция/метод требует большое кол-во параметров, то не писать все в одну строку, т.е. что-то вроде
Код

some_function(
    $param0,
    $param1,
    ......,
    $paramN
);

На этом, естественно, оно не заканчивается.
Любой программист может написать что-то, понятное машине, но только хороший программист может написать код, понятный другому программисту. Подобные вещи как раз делают все более читабельным для других.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
MuToGeN
Дата 23.6.2008, 07:54 (ссылка) |   (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 4
Всего: 32



Цитата(MuToGeN @  23.6.2008,  07:29 Найти цитируемый пост)
Подобные вещи как раз делают все более читабельным для других.

Те, кто копался в исходниках e-commerce и помнит строки размером в несколько килобайт с 8ю - 10ю закрывающимися скобками в конце (выглядит как идиотский смайлик, кстати), меня точно поймут.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
MuToGeN
Дата 26.6.2008, 09:31 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 4
Всего: 32



Проглядел по-внимательнее тему...
Цитата(boogi @  12.6.2008,  00:24 Найти цитируемый пост)
$a['i_love_this_too_long_indexes_cause_i_like_to_type_mua_ha_ha'] = 'lol';
$a['oh_m_g_this_is_another_f_u_c_k_i_n_g_index'] = 'zzz';

Тут есть и другая крайность (греха таить не буду, несколько лет назад сам страдал подобным) - к примеру, алиасы для имен стандартных функций, создаваемые ради того, чтоб меньше топтать клаву пальцами. Cause i dont like typing.
Уже давно понял, что по имени функции или переменной должен быть понятен ее логический смысл. Другими словами, о какой оптимизации может идти речь, если к разработке подключится новый человек и будет смотреть на исходники как баран на новые ворота.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Resha
Дата 23.10.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.3.2008

Репутация: нет
Всего: нет



Правила хорошего кода превратились в попытку навязать свои стандарты окружающим smile
P.S. Использование бикапитализации для классов, кэмел-кейс для методов и андерскора для переменных - это изврат почище вилок для салата, рыбы, мяса и пасты smile

Это сообщение отредактировал(а) Resha - 23.10.2008, 11:49
PM MAIL   Вверх
Resha
Дата 23.10.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.3.2008

Репутация: нет
Всего: нет



Цитата(boogi @ 12.6.2008,  00:11)
От себя добавлю (если этого не было) как можно меньше регулярных выражений.
sizeof() быстрее и красивее count()
как можно проще индексы массивов (числовые лучше всего)

sizeof() не может быть ни быстрее, ни красивее count(). Хотя бы потому, что sizeof - алиас count'а, а не наоборот. Про скорость вообще ничего говорить не буду - это не разные функции, это разные имена одной и той же функции.

Про цифровые индексы тоже очень порадовало. Тогда давайте и в классах свойства называть p1, p2, p3 и т.п. Вообще, ассоциативный массив с цифровыми индексами - это революционное решение smile
PM MAIL   Вверх
zeusakm
Дата 26.10.2008, 00:14 (ссылка)    | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.6.2008

Репутация: нет
Всего: нет



Итак мальчики перестаньте мериться чл***ми продолжим.
Правило №10.
В случаях когда массивы незначительные меняем:
Код

$arr = array("NY" => "New York", "LA" => "Los Angeles");
 
на:
Код

$arr["NY"] = "New York";
$arr["LA"] = "Los Angeles";
 

А да и еще №8 можно сделать Abstract_Connection_DBS - соответственно MySQL, PostgreSQL и если надо Oracle =)

Добавлено через 2 минуты и 4 секунды
Ой блин sorry смотрел первую или смотрите первую =))
PM MAIL   Вверх
awers
Дата 26.10.2008, 02:54 (ссылка)  | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: нет
Всего: 31



В больших блоках очень удобно использовать не {} а к примеру
Код


switch ():
endswitch;

foreach ()
endforeach;

while ()
endwhile;

if ()
endif;

for ()
endfor;


Добавлено через 2 минуты и 46 секунд
эх. забыл. мы это уже в прошлом году обсуждали
PM MAIL WWW ICQ Skype   Вверх
awers
Дата 26.10.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: нет
Всего: 31



1) Хотелось бы послушать обоснование минусам
2) А вы разберитесь с кодом где
Код

foreach(..){
if(..){
if(..){
while(..){
{
{
}
}
}
}
}
}

и т.д.
PM MAIL WWW ICQ Skype   Вверх
QryStaL
Дата 30.10.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: нет
Всего: 32



Код

foreach (...)
{
    if (...)
    {
        if (...)
        {
            while (...)
            {
            }
        }
    }
}


И никаких end... не нужно.
А если не делать отступов на вложенных блоках, то вообще кошмар получится =)

Это сообщение отредактировал(а) QryStaL - 30.10.2008, 13:34


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
awers
Дата 30.10.2008, 14:08 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: нет
Всего: 31



отступы я просто не стал тут ставить, но сам факт, когда в таких блоках по 150 - 200 строк в которых тоже разное попадается - не очень удобно видеть {}
PM MAIL WWW ICQ Skype   Вверх
QryStaL
Дата 30.10.2008, 15:17 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: нет
Всего: 32



Цитата(awers @  30.10.2008,  14:08 Найти цитируемый пост)
в таких блоках по 150 - 200 строк

надо разбивать на мелкие функции / методы


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
mxt
Дата 16.11.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 6.9.2007

Репутация: нет
Всего: 1



Цитата(zeusakm @ 26.10.2008,  00:14)
Правило №10.
В случаях когда массивы незначительные меняем:
Код

$arr = array("NY" => "New York", "LA" => "Los Angeles");
 
на:
Код

$arr["NY"] = "New York";
$arr["LA"] = "Los Angeles";
 

Нет, так не известно точно что происходит:  обьявление нового массива или приваение значение  массиву.
Вот так понятнее
Код

$arr = array("NY" => "New York",
                     "LA" => "Los Angeles");




Это сообщение отредактировал(а) mxt - 16.11.2008, 00:07
--------------------
PM MAIL   Вверх
youri
Дата 1.12.2008, 04:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



Цитата(Mal Hack @  2.4.2005,  15:43 Найти цитируемый пост)
5. Минимум переменных необходимых для решения задачи.

я бы выбрал читабельность

Цитата(Mal Hack @  2.4.2005,  15:43 Найти цитируемый пост)
7. Вывод гипертекста - один раз.

один раз - все подготовить, и за один print вывести? не знаю, не понятно зачем такое правило

Цитата(IZ@TOP @  3.4.2005,  10:58 Найти цитируемый пост)

// Замена переменных в шаблоне
$text = ereg_replace("<!--a-->", $a, $text);
$text = ereg_replace("<!--b-->", $b, $text);
$text = ereg_replace("<!--c-->", $c, $text);
$text = ereg_replace("<!--d-->", $d, $text);
// Это по меньшей мере ужасно, но встречается очень часто.
// Оптимизируем и получаем одну строку:
$text = str_replace(array('<!--a-->', '<!--b-->', '<!--c-->', '<!--d-->'), array($a, $b, $c, $d), $text);

ну я бы выбрал первый вариант, так как он читабельнее, правда регулярные выражения там не нужны или, возможно, это можно было бы одним регэкспом заменить

Цитата(IZ@TOP @  10.10.2005,  13:49 Найти цитируемый пост)
Мне нравятся упрощенные конструкции условий использовать
Код

$a = (is_numeric($b)) ? $b : 0;


главное не отказаться от ifов ;-)

Цитата(AntonioBanderaz @  13.10.2005,  23:06 Найти цитируемый пост)
+ ко всему... Не знаю относится это к правилам хорошего кода, но что правила - точно.не объединять при выводе длинные строки, время выполнения увеличивается Т.е.
Код

echo $str1.'fghgfh'.$str2;
//аналогично
print("$str1 sdgfsdgdsg $str2");
//заменяем на
echo $str1;
echo 'fghgfh';
echo $str2;
print("$str1 sdgfsdgdsg ");
print($str2);


я бы хотел увидеть пример, когда бы конкатенация стала заметна на общем фоне

Цитата(AntonioBanderaz @  13.10.2005,  23:06 Найти цитируемый пост)
забыть про exec и system!

я думаю им можно найти применение, но если то же можно выполнить средствами пхп, то ими и стоит воспользоваться

Цитата(wsr @  19.1.2006,  22:19 Найти цитируемый пост)

Цитата(CyClon @  19.1.2006,  21:33 Найти цитируемый пост)

Где-то читал, что
Код
echo "My name is $name!";

Намного быстрее чем
Код
echo "My name is".$name."!";

И быстрее чем
Код
echo "My name is {$name}!";


Быстрее но не значит лучше!В дальнейшем, при парсинге кода гораздо легче в большом блоке данных найти echo "My name is".$name."!"; чем echo "My name is $name!";

smile 

Цитата(-=Ustas=- @  2.3.2006,  10:40 Найти цитируемый пост)
Цитата(Ciber SLasH @  1.3.2006,  23:23 )Не совсем согласен. У каждого прогера свой стиль программирования. Стандарты в любом случае должны быть! Т.к. вольное программирование - как кому нравится, становится трудным в сопровождении кода другими программистами! Личный пример: полгода назад принял некоторый проект на поддержку, так я того прогораммиста готов завалить при первой же встрече!!!!!!!!

ну я думаю, дело было не в стиле, а как минимум в его отсутствии

Цитата(dsCode @  25.9.2007,  16:32 Найти цитируемый пост)

P.S.: кстати, насчет сокращений: если условие одиночно, то можно (и даже более профессионально) писать так:
Код

$a === 3 && ($obj->doSomething());
// если с if-ом писать - то скобки - обязательны!
if ($a === 3) {
$obj->doSomething();
}
// но первый вариант предпочтительней, хотя второй - наглядней


здесь профеcсионализм, похоже, заключается в краткости в ущерб читабельности, я за читабельность)

Цитата(boogi @  12.6.2008,  00:24 Найти цитируемый пост)

Если можно отнести к правилу хорошего кода, для серьёзного проекта, то это несомненно:
Кэширование повторно используемых данных внутри классов, запросов

Цитата

Rob Pike offers the following "rules" in Notes on Programming in C as programming maxims,[1] though they can be easily viewed as points of a Unix philosophy:[citation needed]
Rule 1: You cannot tell where a program is going to spend its time. Bottlenecks occur in surprising places, so do not try to second guess and put in a speed hack until you've proven that's where the bottleneck is.
Rule 2: Measure. Do not tune for speed until you have measured, and even then don't unless one part of the code overwhelms the rest.
Rule 3: Fancy algorithms are slow when n is small, and n is usually small. Fancy algorithms have big constants. Until you know that n is frequently going to be big, don't get fancy. (Even if n does get big, use Rule 2 first.)
Rule 4: Fancy algorithms are buggier than simple ones, and they are much harder to implement. Use simple algorithms as well as simple data structures.
Rule 5: Data dominates. If you have chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.
Rule 6: There is no Rule 6.


ну от себя добавлю, что не ставлю { в отдельной строке, потому что это почти пустая строка, а пустыми строками я разделяю код на блоки, двумя пустыми строками - методы
а вообще, так как человек может запомнить 7+/-2 элемента, я пришел к выводу, что оптимальное количество элементов в строке - 7, строк в блоке - 7, блоков в методе - 7, функций в классе - 7, строк в файле - 200, оптимальный размер файла - 3 КБ  smile шучу, конечно, но в каждой шутке - доля шутки (график)

ну и не могу не согласится
Цитата(sTa1kEr @  11.1.2008,  13:52 Найти цитируемый пост)
По теме же, можно спорить бесконечно. Однако важно одно, что бы вы всегда придерживались *одного* стиля.


Это сообщение отредактировал(а) youri - 1.12.2008, 04:36
PM   Вверх
MoLeX
Дата 6.5.2009, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 0
Всего: 140




 ! 
MoLeX
Модератор: тему подчистил



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
nichnikov
  Дата 14.5.2009, 10:19 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.5.2009

Репутация: -1
Всего: -1



Не писать двойные кавычки где можно обойтись одними  
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.