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

Поиск:

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


Шустрый
*


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

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



Уф дочитал. Много интересного узнал. Всё замечательно, т.е. есть замечания:
 вы напрасно развили тему как писать 
Код

//так
if ($a == $b) {
//действия
}
else {
//действия
}

//или так
if ($a == $b) {
//действия
} else {
//действия
}

Это как раз то, что можно оставить на откуп программеру или кодеру (в завивимости от квалификации).
Гораздо важнее чтобы эту конструкцию не сокращали, т.к. тогда теряется прозрачность кода.
Естественно важно как именовать функции, но гораздо важнее создать структуру кода, и не с помощью большого дерева подкрепляемых файлов (include "file.php"),  а с помощью создания модулей (в моём понимании функции, классы). А если писать монолитный код, то хоть как ты именуй функции и пиши if then else, с ростом кода потеряется его смысл. Да и если писать такие вот модули, то инклудить можно будет в одном месте (в начале).
Также, очень важно проектирование, частично затронуто абзацем выше, т.е. формирование заголовков, внутренних ссылок и т.д в проекте.
P.S. со времен java  я делаю мануалы во время написания кода, используя самописную утилиту по образу и подобию javah
PM MAIL   Вверх
MeIsGremlin
  Дата 11.6.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 2.12.2005
Где: Киев

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



Одинарные кавычки работают быстрее чем двойные так как не включается интерпретатор замены. Поэтому 
Код

echo 'my var '.$var.' another text';

Будет работать быстрее чем тоже самое в двойных кавычках.
Рекомендую в фунциях, условиях и различных операторах использовать использовать именно одинарные кавычки.
например
Код

if ( strcmp($var,'text') == 0 )


Максимально отделить программирование от гипертекста. Чтоб функции расчета, баз данных, создания, обработки возвращали лишь код. А вывод гипертекста или определения переменных шаблона было только в однои месте. Так легче отладку делать, читать код и заменять в случае чего вывод. Не надо лазить по инклюдам и другим файлам. 

Текст ошибок и сообщений, и вообще весь текст более менне статического назначения естественно лучше хранить отдельно в файле. Куда потом может зайти любой человек дорабатывающий проект и изменить "проффессор" на "профессор" без поиска по проекту или лазания по коду.

Лучше разрабатывать код с включенными warnings, notices  и тд. Так видней недоработки. И код будет правильней.
--------------------
mess with the best die like the rest 
PM MAIL ICQ Skype GTalk MSN   Вверх
Feldmarschall
Дата 11.6.2008, 20:06 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Хехе, одинарные кавычки - это уже мем.
Ну, и диагноз, разумеется =)

В остальном все правильно. Впрочем, если вчитаться - то тоже видно, что понимания нет, а есть зазубренные правила.
Какой такой код функции должны возвращать? Какая разница - по инклюдам "лазить" или по шаблонам?

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


Это сообщение отредактировал(а) Feldmarschall - 11.6.2008, 20:14
PM   Вверх
boogi
Дата 12.6.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И всё-таки отделение кода от гипертекста это "правило" тесно связано с поставленной задачей. 

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

PM MAIL   Вверх
Feldmarschall
Дата 12.6.2008, 00:18 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



хехе, ещё один =)
sizeof(), даже если бы она не была одной и той же функцией, что и  count(), все равно не была бы быстрее или медленнее. 
То же самое и с массивами. да делайте те индексы ,которые удобнее. Если раз в сто лет этот индекс станет узким местом - переделаете. 
когда ж вы поймете, что ахиллес все-таки перегонит черепаху?

PM   Вверх
boogi
Дата 12.6.2008, 00:24 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Feldmarschall @ 12.6.2008,  00:18)
хехе, ещё один =)
sizeof(), даже если бы она не была одной и той же функцией, что и  count(), все равно не была бы быстрее или медленнее. 
То же самое и с массивами. да делайте те индексы ,которые удобнее. Если раз в сто лет этот индекс станет узким местом - переделаете. 
когда ж вы поймете, что ахиллес все-таки перегонит черепаху?

хоть какая-то нелогическая отпимизация никогда не мешала.
представь 10к^2 обращение к массиву 

Код

$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';


тем более что займет это всё ровным счетом минимум времени...( я про оптимизацию xD )

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

Это сообщение отредактировал(а) boogi - 12.6.2008, 00:31
PM MAIL   Вверх
Feldmarschall
Дата 12.6.2008, 00:37 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Если эта страна и погибнет, то только из-за таких "мыслителей". 
И ведь на полном серьезе обсуждается, каким концом разбивать яйцо. Со времен Свифта ни-че-го не изменилось. Понять действительно важные вещи в состоянии единицы. А остальные будут заниматься оптимизацией длины имен переменных
PM   Вверх
boogi
Дата 12.6.2008, 00:40 (ссылка)    | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Feldmarschall @ 12.6.2008,  00:37)
Если эта страна и погибнет, то только из-за таких "мыслителей". 
И ведь на полном серьезе обсуждается, каким концом разбивать яйцо. Со времен Свифта ни-че-го не изменилось. Понять действительно важные вещи в состоянии единицы. А остальные будут заниматься оптимизацией длины имен переменных

При чем тут это, философ? Посмотри на название топика. И лучше не пытайся прыгнуть выше головы.

PS: Я буду только рад если та страна про которую ты говоришь погибнет.
PM MAIL   Вверх
Sannis
Дата 12.6.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Feldmarschall @  11.6.2008,  20:06 Найти цитируемый пост)
Какой такой код функции должны возвращать?

Видимо имелось в виду, что функции модели должны возвращать только данные или код результата(не в смысле php код), т.е. не должны возвращать "Выполненно успешно", а лучше "success" или какое-то заранее определённое значение.

Сам же я хотел такой вопрос задать, из области не очень повседневной:
Принято (обычно/часто вижу такое) приватные методы называть с подчёркиванием в начале и маленькими буквами, тогда как публичные - с использованием больших(в верблюжьей или иной нотации - не важно). В часности, в php4 это часто применялось, чтобы можно было сразу видеть, какие методы предназначены для вызова извне, а какие выполняют утилитарные функции и вызываются другими методами класса. Столкнулся с тем, что как бы не хотелось, но в некотором классе набралось довольно болшое количество публичных методов, причём часть из них, тем не менее, также вызывается в других из низ. При этом эти методы я не могу сделать приватными в силу того, что они иногда мной применяются-таки в остальной части скрипта, хотя и довольно редко. Использует ли кто-то специальные способы разделения методов класса "по частоте использования" путем именования специальным образом?


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Fortop
Дата 12.6.2008, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

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



Цитата(boogi @  12.6.2008,  00:24 Найти цитируемый пост)
представь 10к^2 обращение к массиву 

Не могу представить. Зачем нам 100млн обращений к массиву? smile

Цитата(Sannis @  12.6.2008,  00:52 Найти цитируемый пост)
"по частоте использования"

По типу операций и возвращаемым результатам - да. По частоте нет.

например

getSomethingList - возвращает массив
getSomethings - возвращает массив объектов Something
updateSomething - обновляет Something

Добавлено через 4 минуты и 41 секунду
Sannis
Цитата(Sannis @  12.6.2008,  00:52 Найти цитируемый пост)
довольно болшое количество публичных методов

Имеется класс для работы с базой, примерно 250 методов работать во всяких блокнотах - сложновато. В Zend Studio - нормально.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Sannis
Дата 12.6.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Преимущества IDE я уже оценил) Что-ж, спасибо, пока не буду размышлять, не очень-то они и мешают.


--------------------
Я Критик Джим, раньше писал моды для IPB 1.3.x-2.3.x, а теперь продвигаю Node.js в массы.
PM MAIL WWW   Вверх
Цербер
Дата 16.6.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Почитал всю тему, очень интересно читать такие дисскусии и обсуждения, а особенно для новичков.
Сам на php пишу относительно не так давно, но стараюсь читать как можно больше инфы касающейся php.
Когда начинал прочитал одну очень интересную книжку PHP5 на примерах (М.Кузнецов, И.Симдянов,С.Голышев) откуда впринципе и узнал про стили программирования(о чём даже представления не имел, до того момента)
там описано 4 стиля (расставления фигурных скобок)
Код

1.Рациональный стиль -  if($flag){ echo "Hello, World!"; }
2.Стиль Алмена или стиль BSD - 
  if($flag)
  {
    echo "Hello, World!";
  }
3.Стиль Whitesmith

if($flag)
  {
  echo "Hello, World!";
  }
4.Стиль GNU.
$flag = true;
if ($flag)
{
  echo "Переменная равна true";
  exit();
}

И для себя наиболее удобным и читабельным посчитал Стиль GNU.
Это я к тому что стилей много, думаю эти 4 только малая часть всех существующих, хотя могу и ошибаться, стилей много и каждый кодер выбирает тот который удобен ему.
Так же придерживаюсь тона при названии переменных, функций, разделения пробелами +/=/- и т.д., т.к. сам нарывался на скрипты где в названии переменных использовали что то вроде $l_gh а функции назывались $drw_n при этом комментарии в коде отсутствовали вообще.
Так же хотелось бы задать опытным кодерам вопрос, может и покажется он глупым, но всё же, предподчительно в какой кодировке писать скрипты? я юзаю utf-8.
P.S.
ИМХО - Хорошего тона, должны придерживаться все кто кодит, тем самым проявляя уважение к другим кодерам.  


Это сообщение отредактировал(а) Цербер - 16.6.2008, 10:31
PM MAIL ICQ   Вверх
nerezus
Дата 22.6.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

Одинарные кавычки работают быстрее чем двойные так как не включается интерпретатор замены.
 Это происходит при лексическом анализе, поэтому не имеет роли. Ведь на серваке по любому будет кеширование байткода.

P.S. Кстати непонятно, нахрена замену делали, неужели было влом лишние 2 условия в StateMachine вписать? Хрен этих разработчиков поймешь )

Цитата

ам описано 4 стиля (расставления фигурных скобок)
 Предпочитаю Java-style.

Код

if (condition) {
    someCode();
}


Цитата

Так же хотелось бы задать опытным кодерам вопрос, может и покажется он глупым, но всё же, предподчительно в какой кодировке писать скрипты? я юзаю utf-8.
 В однобайтовой. i18n не планируется у меня. Для i18n же utf-8 бы юзал.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MuToGeN
Дата 22.6.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


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

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



0. Логика визуализации и бизнес-логика - абсолютно разные вещи, это стоит держать отдельно друг от друга.
1. Табы или 4 пробела - это не важно, главное, чтоб другим оно не мешало.
2. По правилам кодинга (не программирования) существуют strict-стандарты для java, я стараюсь держаться именно за них.


--------------------
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   Вверх
gta4kv
Дата 22.6.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

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



Цитата

2. По правилам кодинга (не программирования) существуют strict-стандарты для java, я стараюсь держаться именно за них. 

пример в студию smile

Мой стиль вот:
Код

<?php
/**
+--------------------------------------------------------------------------
|   TestScript
|   ========================================
|   by gta4kv
|   (c) 2008 BojanScripts
|   ========================================
|   Email: [email protected]
+---------------------------------------------------------------------------
|   TestScript in not free software
+---------------------------------------------------------------------------
|   > $Date: 22-06-2008 20:24 +0400 (22 June 2008) $
|   > $Revision: 1 $
|   > $Author: gta4kv $
+---------------------------------------------------------------------------
|
|   > Date started: 22 June 2008
|   > File: class.test.php
|
+--------------------------------------------------------------------------
*/


/**
*
*  test1 class
*  general system class
*
*/
class test1 
{
        public $test;
        public $soLongTest;
        
        /**
        * doAny ()
        * this function do anything
        * @var string $var1
        * @var string $var2
        */
        public function doAny( $var, $var2 ) 
        {
                $this->test       = $var1;
                $this->soLongTest = $var2;
                return sprintf( "The hell %f added by %f", $this->test
                                                           $this->soLongTest
                                        );
                      
        }
}

$myclass = new test1(  );
print $myclass->doAny( 'post', 'gta4kv' );
?>

Пришел к нему,  как к самому удобному,  достаточно удобно его читать smile

Это сообщение отредактировал(а) gta4kv - 22.6.2008, 19:27
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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