| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > Правила хорошего кода |
| Автор: Wowa 2.4.2005, 15:13 |
| Давайте тут собирать правила хорошего кода. Например: 1. Не писать код работающий только с register_globals on. Вместо этого использовать $_GET[''] и $_POST[''] 2. Не называть функции непонятными для посторонних именами 3. Делать комментарии в коде, чтобы можно было легко разобраться в нем. |
| Автор: Mal Hack 2.4.2005, 15:43 |
| 4. Отступы. 5. Минимум переменных необходимых для решения задачи. 6. У функций return 7. Вывод гипертекста - один раз. |
| Автор: HalkaR 2.4.2005, 23:02 |
| 8. Отделение ввода данных в базу от вывода гиперетекста |
| Автор: Mal Hack 2.4.2005, 23:12 | ||
Я бы сказал: " отделение всего кода от вывода ьгипертекста". По сути шаблоны. Что скажешь? |
| Автор: yUAC 3.4.2005, 02:14 |
| Кстати говоря насчет вывода текста один раз не могу согласиться - это неправильно. |
| Автор: Mal Hack 3.4.2005, 10:46 | ||
Почечму? Во-первых отпадает (практически) трабла с заголовками и установкой куков. Во-вторых существенно увеличиваетс производительность скрипта. В третьих это более грамотно с точки зрения проектирования, т.к. в случае чего можно пройтись по всему гипертексту. |
| Автор: IZ@TOP 3.4.2005, 10:58 | ||||
| 9. Краткость сестра таланта. Пример:
10. Оптимизация строковых функций. Пример:
PS Пока все. |
| Автор: HalkaR 4.4.2005, 16:09 | ||||
Полностью отделить код от html очень тяжело, но естественно желательно. Я просто более мягко сформулировал. |
| Автор: IZ@TOP 4.4.2005, 16:12 |
| Слишком четкое отделение РНР кода от HTML приведет скорее всего к тому что появится еще один интерпретируемый язык, что приведет к большому снижению производительности. |
| Автор: Irokez 7.4.2005, 18:03 |
| http://pear.php.net/manual/en/standards.php |
| Автор: Mal Hack 7.4.2005, 20:01 |
| Irokez это правила составления PEAR. |
| Автор: Irokez 7.4.2005, 20:07 |
| Mal Hack по-моему стандарты написания пеар пакетов стоит взять за стандарты написания всех пхп скриптов ... |
| Автор: Mal Hack 7.4.2005, 20:12 |
| Irokez я к тому, как бы что там описывается схема структура файла PEAR |
| Автор: Irokez 7.4.2005, 20:20 |
| Mal Hack так пеар файл и есть ни что иное как грамотно написанный пхп скрипт, и по ссылке описываются как такой скрипт грамотно написать (в плане синтаксиса) |
| Автор: Mal Hack 7.4.2005, 20:32 | ||||
не факт. Многие считаю его тяжелым
Я имею ввиду (может и ошибаюсь) имел ввиду что класс должен называться так-то, сожеражть обязательно определенные свойства и методы.. |
| Автор: Irokez 7.4.2005, 20:36 | ||
| Mal Hack да нет там такого:
стандарты написания кода, а не класса, т.е. как правильно код написать |
| Автор: Mal Hack 7.4.2005, 21:45 |
| Звиняй, не прав я был. Раньше этого не замечал. |
| Автор: Irokez 8.4.2005, 19:13 |
| |
| Автор: Рыжий 30.4.2005, 23:57 |
| можно так же писать все константы прописными буквами - это как общепринятное правило уже стало |
| Автор: Илья 9.6.2005, 10:09 | ||||
Split и Explode две совершенно разные функции. И утверждать что тот кто использует Split - неопытный человек, полный бред. ;) |
| Автор: Opik 9.6.2005, 10:34 |
| Илья чаще всего так... обычно split приименяют необоснованно.. |
| Автор: IZ@TOP 9.6.2005, 11:53 |
| Илья, есть куча примеров, хотя бы на данном форуме Я сколько не делал всевозможных скриптов, ну нигде я не нашел применения этой функции |
| Автор: Ринат 3.10.2005, 05:22 |
| IZ@TOP explode не приходилось юзать? |
| Автор: IZ@TOP 4.10.2005, 10:48 |
| Ринат, прочти тему с начала, потом разбегись и ... об стену - разбег 100 метров |
| Автор: Alone 6.10.2005, 10:32 | ||||
| Я считаю, отделение логики от гипертекста - совсем не в тему. Топик создавался для сбора примеров правил хорошего кода. Со своей стороны могу подчеркнуть некоторые моменты, которых я придерживаюсь: таб - пробелами, 4 символа класс - имя класса и его конструктора с большой буквы, верблюжьим стилем ( ExampleClass() ) методы - с маленькой, верблюжьим стилем ( theMethod() ) переменные - в основном с маленькой буквы, через подчеркивание ($the_variable) фигурные скобки - ВЕЗДЕ(!) в одной строке с оператором/функцией/итд... пример
документирование кода - ОБЯЗАТЕЛЬНО! все классы, их методы, переменные... константы - большими буквами дефайны - тоже. в строках, при использовании переменных, обязательно выделяю их вот так
require/include - в скобках. это больше для красоты. require_once("MyClass.php"); А вот чего никак не возьму в привычку, так это пробелы вокруг знака = |
| Автор: IZ@TOP 10.10.2005, 13:49 | ||
Мне нравятся упрощенные конструкции условий использовать:
Добавлено @ 13:54 А в остальном полностью поддерживаю Alone, ну, за исключением пробелов, я вставляю до и после знака =. |
| Автор: Bikutoru 10.10.2005, 14:57 | ||
Полностью согласен с Alone, делаю почти один в один. Единственное исключение, так это
Исключительно ради наглядности Ну и в обязательном порядке пробелы вокруг = + - * / & && | || == != > < >= <= |
| Автор: AntonioBanderaz 13.10.2005, 23:06 | ||
| IZ@TOP Да мне тоже нравятся упр констр, но не все их понимают. Если для себя - можно, а если для кого-то? Коментировать каждую функцию, что делает, что на входе, что на выходе. Созавать в каждом классе пример использования (закоментированый) + ко всему... Не знаю относится это к правилам хорошего кода, но что правила - точно. не объединять при выводе длинные строки, время выполнения увеличивается Т.е.
забыть про exec и system! |
| Автор: o.s.a. 16.10.2005, 21:05 | ||||
Так некоторые умудряются еще и пробелы вокруг . ставить
|
| Автор: Alone 19.10.2005, 13:54 | ||
Я не хочу сказать что это излишне, я просто еще сам не привык везде ставить пробелы вокруг = Тоесть правилом хорошего кода я это как раз считаю А вдополнение ко всему сказанному я бы рекомендовал пользоваться http://www.zend.com Умопомрачительная девелоперская среда! Подойдет как профессионалу, так и начинающему. Главное не кипятиться при первых попытках работы с ней. Да она тяжеловесная, потому как писана на яве, но в этом есть смысл. Но по своему удобству / функциональности она превосходит все остальные продукты, коих можно на пальцах перечислить. Чего только стоит CodeCompletion! При обращении к объекту показывает все его методы и переменные. А phpDocumentor! Если у вас в привычке есть пунктик - документировать все классы/методы/прочие_функции, то создание хтмл варианта документации разработчика состоит из 2-3 кликов. В общем вот такие вот дела |
| Автор: -=Ustas=- 19.10.2005, 14:18 | ||
А по мне, так удобнее (и красивее) пользовать Pear стандарты:
|
| Автор: AntonioBanderaz 24.10.2005, 13:36 |
| Есть некоторые люди, которые ещё и дополнительный перенос строки ставят... ))) |
| Автор: -=Ustas=- 24.10.2005, 14:21 | ||
Т.е.? |
| Автор: Master 24.10.2005, 16:21 | ||||
всем хай
Изотоп, глядя вот на это хочеться сразу предложить отделять комменты переносами, а то когда правиш код без подсветки тяжко становиться:
|
| Автор: AntonioBanderaz 25.10.2005, 13:52 | ||||
Добавлено @ 13:53 Если что пример могу скинуть в виде ссылки... |
| Автор: -=Ustas=- 25.10.2005, 14:07 |
| AntonioBanderaz, жуть!!! |
| Автор: AntonioBanderaz 28.10.2005, 19:28 |
| Да я и сам испуг когда эт увидел... |
| Автор: wsr 14.1.2006, 00:17 | ||
Я лично при кодинге больших "приложений", предпочитаю пользоваться следующим:
По моему это лучший вариант для более удобного парсинга своего же кода в будущем! А то будет в коде куча {{{{{{{ и }}}}}}}} и попробуй разберись что к чему относится, а так все четко и понятно! |
| Автор: IBSN 15.1.2006, 01:29 | ||||
| Позвольте, отделение пробелами - увеличивает читабельность, имхо... 1.
2.
|
| Автор: IZ@TOP 16.1.2006, 02:14 |
| wsr, мне кажется что эти конструкции немного устарели. А с фигурными скобками разбираться нет проблем - ставим Zend Studio и радуемся крестикам которые эти скобки группируют (скрывают, открывают). |
| Автор: Kefir 16.1.2006, 12:20 |
| Изотоп, умм... вы меня извините, конечно, но зенд стоит 99-1499 баков стоит А вообще, хорошо оформленный код избавляет от проблемы различения '}'. Свёртывание кода, имхо, вообще не должно влиять на удобочитаемость кода. Да, и, кстати, насколько я помню комодо тоже свёртывает неплохо. |
| Автор: IZ@TOP 16.1.2006, 14:44 |
| Kefir, кто чем пользуется. Я привык к зендовскому монстру, стоит да, но я пока "триал" юзаю (хи-хи). Правильно ты сказал - как напишешь, так и прочитаешь. |
| Автор: Janus 16.1.2006, 17:48 |
| Многие редакторы могут сворачивать блоки (кажется, это называется "фолдеринг" или что-то типа этого). Например, Notepad++. Он к тому же идет под GNU GPL. |
| Автор: Mal Hack 16.1.2006, 19:19 |
| ЗЕНД тоже с 5 версии сворачивает. |
| Автор: Janus 17.1.2006, 20:01 |
| Тут говорилось о том, что он платный и я предложил бесплатную альтернативу. |
| Автор: CyClon 19.1.2006, 21:33 |
| Где-то читал, что: echo "My name is $name!"; Намного быстрее чем echo "My name is".$name."!"; И быстрее чем: echo "My name is {$name}!"; |
| Автор: Mal Hack 19.1.2006, 23:01 |
| Самое быстрое и лучше - второй вариант, затем третий, затем первый. |
| Автор: Ciber SLasH 20.1.2006, 09:39 | ||||||||||||||||||
| Я вот юзаю такой синтаксис: 1) если PHP-код идёт блоками с (X)HTML-кодом, то делаю так:
2) если есть какие-то структурированные массивы, то описываю их структуру в комментах:
3) отделяю некие псевдо-блоки кода, которые являются одной частью:
4) комментарии начинаю с большой буквы, если они находятся в новой строке, иначе — с маленькой. Выравниваю комменты, если они находятся в ближайшей видимости:
5) отделяю пробелами символы операций (меньше, больше, присвоить значений и т.д.) 6) отделяю важные блоки так:
7) описываю новые элементы с новой строки при определении массивов, но только если это логично для данных массива:
8) функции описываю так:
9) для отступов юзаю табы в размере 4 знакоместа 10) строки с использованием переменных разбиваю:
11) там, где не нужна обработка escape-последовательностей, юзаю одинарные кавычки для строк, иначе — двойные:
12) пишу код, который не зависит от register_globals, чем [новички (не все); люди которые не беспокоятся о безопасности; ленивые (которым пофигу); возможно ещё есть кто-то, кого я не включил в этот список] зачастую пренебрегают... а жаль 13) пишу в EditPlus, хотя как-нить обязательно прикуплю диск (конечно не лицензионный, денег таких нет, чтобы разбрасываться ими на такое добро) с Zend-ом ЗЫ: кстати описывание комментариев по PEAR стандартам отличается в русской и английской доке: ru: http://pear.php.net/manual/ru/standards.header.php en: http://pear.php.net/manual/en/standards.header.php Мне больше нравится так, как в английской доке |
| Автор: AztEK 20.1.2006, 12:55 |
| Читал, что лучше использовать одинарные кавычки+конканетация переменных. |
| Автор: Janus 20.1.2006, 13:00 |
| Так и есть. В этом случае не тратится лишнее время на разбор строки. |
| Автор: DENNN 20.1.2006, 13:06 | ||
Видимо из тех соображений, что парсер не тратит время, выискивая переменные в двойных кавычках. |
| Автор: Древлянин 22.1.2006, 01:37 | ||
Да, так было до 5-ой версии PHP, в 5-ой теперь обрабатывается одинаково быстро. |
| Автор: Ciber SLasH 22.1.2006, 01:48 |
| 5-я версия, это конечно хорошо, но к великому сожалению большинство хостингов сидят на 4-ёрке. |
| Автор: wsr 23.1.2006, 01:15 |
| Помоему сейчас тема с кавычками не особо актуальна, так как рано или поздно, но все равно все перейдут на PHP 5. А там как известно "все" одинаково. ИМХО. |
| Автор: idler 28.2.2006, 13:37 |
| Правила написания PEAR рулят однозначно!!! Код получается красивый, понятный, быстрый и самодокументирующийся (PEAR::phpDocumentor) |
| Автор: CyClon 1.3.2006, 21:05 | ||||
Мне PEAR не нравятся... Больше нравится такой стиль:
|
| Автор: -=Ustas=- 1.3.2006, 21:10 |
| CyClon, лучше всего привыкать к общим используемым стандартам, нежели писать так как тебе нравится |
| Автор: Ciber SLasH 1.3.2006, 23:23 | ||
Не совсем согласен. У каждого прогера свой стиль программирования. Люди все разные... клоны пока не получили широкого распространения |
| Автор: Wowa 1.3.2006, 23:48 | ||
Я тоже в таком стиле люблю писать. Занимает мало места и для меня - очень наглядно |
| Автор: Ciber SLasH 1.3.2006, 23:55 | ||
Аналогично |
| Автор: Alone 2.3.2006, 10:35 | ||
Если встерчается конструкция из более чем 2х циклических вложений - это уже повод задуматься о декомпозиции... |
| Автор: -=Ustas=- 2.3.2006, 10:40 | ||
Стандарты в любом случае должны быть! Т.к. вольное программирование - как кому нравится, становится трудным в сопровождении кода другими программистами! Личный пример: полгода назад принял некоторый проект на поддержку, так я того прогораммиста готов завалить при первой же встрече!!!!!!!! |
| Автор: CyClon 3.3.2006, 14:26 | ||
Меня просто в дрошь кидает, когда вижу такое:
Не красиво до ужаса, вот } else { совсем другое дело ;) |
| Автор: -=Ustas=- 3.3.2006, 14:58 |
| Стандарты пиар у руля!!! По-любому! |
| Автор: S.A.P. 3.3.2006, 15:31 | ||||||
для такого случая я использую
а вобще
И что тут такого ужастного?? Все наглядно и понятно. |
| Автор: Ciber SLasH 3.3.2006, 17:23 | ||||||
| Я помню когда сам писал так давно на С. У нас в универе сначала преподавали Pascal и он мне понравился до безумия. Ну и там как раз блоки операторов отделяются так:
и когда после Pascal-я начали учить C, то я старался придерживаться той структуры кода, как в Pascal-е, т.е. писал так:
но потом от такой структуры отказался, т.к. код сильно расплывается из-за лишних переводов строк. И в итоге мне приглянулась такая структура:
|
| Автор: IZ@TOP 9.3.2006, 13:17 | ||
Кому что. Мне больше с отступами нравится
|
| Автор: RomanK 30.3.2006, 19:01 | ||
| Мне тоже не нравятся стандарты PEAR. Сам делаю так: Имена переменных: все буквы маленькие, слова разделяю "_". Имя классов: Каждое слово с заглавной буквы. Без "_". Имя методов, функций - аналогично названию класса. Приватный метод: вначале "_". Название свойств: первое слово с маленькой буквы, остальные слова с большой. Без "_". Все отступы делаю табуляцией. Пример:
|
| Автор: Serkys 30.3.2006, 23:16 | ||
А я так пишу:
По мне, так очень удобно. Особо в стандарты не всматривался, пока пишу как удобно мне. Вроде все, кто смотрел мой код, врубались быстро и не жаловались. |
| Автор: skalex 6.4.2006, 12:33 | ||||||||
| Может кто писал уже, не знаю ... Вот такой код:
я всегда стараюсь записывать так:
Еще пример:
заменяю на
Разумеется, речь идет о одностроковых действиях в блоках if-else. |
| Автор: Ignat 6.4.2006, 12:56 | ||
| А кто сказал, что PEAR - это эталон? Если нашлось достаточно большое количество противников такого подхода, то что-то неладно с этим стандартом. Я сам сторонник стандартов, но стандарты, которые усложняют коммуникативность должны быть изменены, ИМХО. Когда приходится рефакторить огромное количества кода, то начинаешь плеваться от такой размазанности, т.к. страдает визуальное восприятие. Ведь код должен не только работать, но и читаться. Я всеми руками за конструкцию:
В коде: смысловые блоки компактны, четко выделены узлы ветвления, при этом отражено направление ветвления визуально (что страдает у PEAR-а). |
| Автор: CyClon 6.4.2006, 13:06 | ||||||||||||||||
Мне все больше нравятся тсандарты PEAR. Так, пересмотрев справочник я нашел там вот такие вещи:
Чем вам не нравится данный подход? Добавлено @ 13:13 Основные выдержки из мануала:
Оформление оператора if:
Оформление оператора switch:
Объявления переменных, выхов функции:
Объявление функций:
|
| Автор: Ignat 6.4.2006, 14:33 | ||||
| Протестую. Из чисто практических соображений - задолбаешься. Приведу в пример опять рефакторинг - когда приходится лечить прбитый к левому краю код, то количество выставленных табов исчисляется тысячами. Соответственно в пробелах в 4 раза больше. Тем более парсить такой код впоследствии проще.
А это красиво, но малочитабельно. Объявление из 7-8 переменных с именем разной длины приводит к неприятному эффекту, когда видишь, что присваивается, но не видишь чему. Приходится либо ставить курсор, чтобы посмотреть номер строки, либо приложить к монитору линейку =) Вот это излюбленный мной стиль. Но предпочитаю в больших блоках ставить разрыв (пустая строка) после открытия блока и перед закрытием. ИМХО, break вертикально должен совпадать с соответствующим case, т.к. по сути является его закрытием, следовательно визуально не должен "вылетать" из логики. A case и default в свою очередь должны иметь отступ от switch, чтобы не "смазывать" закрывающую скобку. Пример (живой):
Всё вышеизложенное - моё ИМХО. |
| Автор: skalex 6.4.2006, 14:37 | ||
Вообще в некоторых редакторах есть функции вылечивания такого кода (анализ и автоматическая расстановка отступов). |
| Автор: Ignat 6.4.2006, 14:42 |
| Ну рефакторинг обычно включает в себя не только расстановку отступов.... Так что это просто горькая необходимость. Иногда даже приходится убивать уже выставленные грамотно отступы, при переносе блока. Ну... мы такой роскошью не пользуемся ЗЫ А может в нём тоже это есть? |
| Автор: skalex 6.4.2006, 15:51 | ||
Нет. А жаль ... Редактор то достойный. Плохо также, что он вяло развивается ... |
| Автор: CyClon 6.4.2006, 18:08 | ||||||||||||
Если писать в блокноте - я с тобой согласен. Но если писать в том же Zend Studio или PHP Expert Editor, то там можно задать определенное кол-во пробелов. Нажал TAB - 4 пробела есть.
Тут я с тобой согласен. Да и это не правило написания - это совет.
Ну, мне вообще нравится такой стиль:
Но я все же буду опираться на стандарты
Нет, как раз-таки break не должен совпадать с case, т.к. это конструкция да и если мы напишем continue? В общем протест Мой любимый силь:
|
| Автор: Elfet 9.4.2006, 17:32 | ||
| Люблю нажимать Alt + F8 в Визуале А что деласть с кодом и с отступами если использую EOF?
Перед EOF; же нельзя ставить пробелы. |
| Автор: Alone 4.7.2006, 13:18 | ||||
4 пробела отобразятся ОДИНАКОВО в любом редакторе, в то время как tab отображается ВЕЗДЕ ПО РАЗНОМУ. Отсюда и рекомендация не использовать его в разметке кода. Знаю многие конторы, где за каждый найденый таб штрафуют. 0.5$ "Молдняк" излечивается после первой же зарплаты Добавлено @ 13:23
Кроме того там есть "Auto indent code" который, при отсутствии таб-ов, правильно расставит отступы. Кстати, табы в зенде лечу нажатием ctrl+h (заменить '\t' на '____' 4 пробела |
| Автор: AztEK 4.7.2006, 20:21 | ||
| Какие жаркие споры Джефф Элджер в своей книге "C++ For Real Programmers" писал
Почему бы эту фразу не применить к этому топику? Каждый пишет как ему удобно. Важны идеи. |
| Автор: Ignat 5.7.2006, 09:24 |
У нас в конторе такой подход называют "креатиффом". Есть товарищи, пишут очень идейно, но в коде хрен разберешься... По три-четыре оператора в строчку и все логи HEX-дампом. |
| Автор: awers 25.9.2007, 15:24 |
| Очень жаль что обсуждение остановилось на КАЖДОМУ СВОЕ. Хотелось бы прийти к более конкретному "доку по стилю написания". Даже если простым большинством голосов |
| Автор: dsCode 25.9.2007, 16:32 | ||
| Дочитал до середины, дальше, к сожалению, не осилил =) Кто бы что не говорил (про "каждому свое") - по-любому должны быть style guid'ы. Конечно, они могут быть локальными в какой-то компании, но есть и общепринятые. Код Zend'a и Pear'a - еще не эталон. Поищите нормальную достоверную, стандартизированную документацию по кодингу на PHP. Потому что существует такое понятие как "профессиональный почерк" и все ИМХИ в нем не прокатят ("я привык так-то и так-то", "так лучше" и т.д.). Локальные привычки еще ничего не значат. Вот http://forum.vingrad.ru/forum/topic-173400/anchor-entry1262981/0.html обсуждались некоторые основные принципы. Они верны, и PHP касаются тоже. P.S.: кстати, насчет сокращений: если условие одиночно, то можно (и даже более профессионально) писать так:
|
| Автор: theworldcreator 25.9.2007, 17:44 | ||||||||
Интересно. Никогда не задумывался над таким применением. Надо будет попробовать. Я последнее время, при большом объеме кода, пишу так:
А если условие слишком большое, писал его не целиком, и так понятно:
P.S. Здесь так активно рекламировали zend, что я даже скачал. Могу скинуть найденный только что keygen. Либо в личку, либо пусть модератор разрешит его здесь выложить(или хотя бы ссылку показать) |
| Автор: Vaulter 25.9.2007, 18:08 | ||||||
если $b не существует будет WARNING поэтому
смотря по контексту |
| Автор: theworldcreator 25.9.2007, 18:15 | ||||||
А разве он так не будет проверять переменную только на существование? Добавлено @ 18:21 незнаю можно ли так(скоро проверю), но должно работать:
|
| Автор: theworldcreator 25.9.2007, 18:32 | ||
Мой способ работает. Ваш
В результате $a==false, а не 3, как задумывалось. empty() работает нормально. Он просто проверяет на наличие переменной И на ее НЕ равность false, что делает функцию очень удачной для данного случая. |
| Автор: dsCode 25.9.2007, 19:33 |
| Vaulter, да речь не "о существовании" / "не существовании" переменных там каких-то (этот пример - так - до кучи написал, он тут не при чем вообще). Основная речь, я еще раз повторю - стандартизованные правила оформления кода. Мой вам совет, други, - сразу себя лучше приучать к правильному коду и избавляться от неправильных привычек (удобным вам кажется или нет, но если это не правильно - всегда будет выдавать непрофессионала). |
| Автор: awers 26.9.2007, 12:49 |
| во всяком случае, я всегда стараюсь придерживаться Zend овского стиля написания кода, искать изящные решения ... к примеру: когда я работал в одной московской конторе (поддерживал ранее созданные сурсы и создавал новые), попадались такие сайты, где .htaccess весил ~1мб, причем совершенно необоснованно, без комментов. соответственно заглядывая в php можно было потерять сознание. теперь стараюсь в любом случае, на сколько бы "наколенной" разработка не была придерживаться стандартов. этоисты в программировании - муветон! |
| Автор: SelenIT 27.9.2007, 02:55 |
Имхо, в таких выражениях для наглядности обязательно ставить скобки, чтоб не вспоминать на ходу приоритет операторов и не спотыкаться на различиях ||-or и &&-and... |
| Автор: FCCStepan 12.12.2007, 07:47 | ||
| Прочитал две страницы, и решил посеять зерно сомнения в ваших, без сомнения, светлых головах Сколько пишу на пхп, постоянно ловлю себя на мысли, что мозг не работает, тут нет ничего сложного, после 2го сайта все пишется уже подсознательно, вместе с чатами, фильмами и смс. А когда пишешь <вырезано> код, без структуры, с определением функций в функциях, с переопределением глобальных переменных, с кривыми комментариями, которые понятны только мне (на примерах и метафорах из жизни) и все еще это пополняешь названиями функций типа Audi_R8 или zzt213 (кузов новой тойота селика), то в голове приходиться держать массу всяких ассоциаций и сравнений, что делает процесс хотябы более интересным и требовательным к себе, нежели просто , простите, тупо $OB1.="bye;" echo $OB1; unset ($OB1). Нужна ли эта красота и порядочность в и без того простых кодах, когда вы пишете свое для себя под себя, и так чтобы кроме вас это пользовать никто не смог?
|
| Автор: skyboy 12.12.2007, 09:33 |
| ну, да. конечно. машина, для управления которой надо будет полгода учиться в ВУЗе - это самая что ни на есть хорошая машина, потому что заставляет думать и вспоминать, каким образом можно переключиться с первой передачи на вторую. как же. а как же ошибки? легко их отлавливать, если постоянные eval? а если функции в функциях? как быть при добавлении нового функционала через полгода? удобно? просто? без ошибок? нет, товарищ, с такими взглядами жить будет трудно... |
| Автор: bars80080 12.12.2007, 10:14 |
| значит товарищ мало кода пишет, у меня уже через месяц вылетят все ассоциации, так как и мировозрение тоже меняется, а разбираться в километрах уже малознакомого кода - проделывать работу второй раз |
| Автор: N0dwis 12.12.2007, 10:29 | ||
Не знаю, насколько сложные проекты Вы писали, но мое мнение - не очень сложные и не профессиональные. Да, если пишешь скрипт на 20 строк, то можно обзывать переменные a, b, c и т.п. но если объем кода переваливает даже за 10-20 кб, то (во всяком случае у меня), начинаются проблемы с запоминанием всех имен переменных, функций, классов и т.п. А если они еще и будут названы, как Вы предложили, то проект не будет закончен никогда! Все время уйдет на поиск и попытки написания таких имен. А если еще и пишешь не сам, а в команде - то еще дольше! Плюс дальше будут БОЛЬШИЕ проблемы с редактированием кода. Вспомнить даже через 2 - 3 дня после написания что именно делает функция с именем zzt213 (особенно если она не очень большая и используется не часто) будет проблематично. Основные усилия при написании программы должны быть направлены не на разгадывание ребусов с именами переменных, а на построение, написание и отладку логики программы. Если название переменной или функции выбрано правильно - редактировать код можно даже не зная абсолютно точно где и как переменная используется, а просто видя перед собой локальный кусок кода (серьезные изменения так лучше все-таки не делать, но для мелких - самое то). А вот как выбирать имена - это уже искусство. |
| Автор: Feldmarschall 12.12.2007, 10:47 |
| мне кажется, что FCCStepan - это то, что называеют "сетевым троллем". Человек пишет не для того, чтобы разобраться самому или посоветовать другим, а чтобы вызвать флейм. Я не думаю, что он нуждается во всех тех многочисленных советах, которые на него посыпались. Если же подходить к его заявлениям серьёзно, то есть вещи, которые невозможно объяснить - их можно понять только на собственном опыте. К примеру, все эти многочисленные заверения о том, что он сам через два дня забудет. Тем более, что он сам говорит, что "усложняет" код для развлечения. Ну развлекается человек и развлекается. Мало ли какие у кого странности. Смысл чьи-то личные тараканы в теме, посвященной технологии в целом? Впрочем, повторюсь, я всё равно не верю, что все это написано всерьёз, а не с целью развлечься. |
| Автор: N0dwis 12.12.2007, 12:14 |
| Понял! FCCStepan пишет просто crackme на php! |
| Автор: FCCStepan 12.12.2007, 12:54 |
| В каждой шутке есть доля шутки Feldmarschall, Про сетевого троля не очень понял сравнение . N0dwis, если совсем асбтрагриоваться, то можно и так сказать. Да, речь не идет о проектах, которые должны развиваться, и т.д и т.п. А если это разовый заказ на биллинговую систему, от, как потом выясняется, не очень чистоплотной компании, то почему бы и не вспомнить детство. Ладно |
| Автор: sTa1kEr 11.1.2008, 13:52 |
| FCCStepan, это называется обфускация и ею совершенно не нужно заниматься программисту самому. По теме же, можно спорить бесконечно. Однако важно одно, что бы вы всегда придерживались *одного* стиля. |
| Автор: FractalizeR 11.1.2008, 21:31 | ||
Полностью согласен. |
| Автор: source777 29.1.2008, 00:19 | ||||
Код должен иметь возможность к расширению и быть достаточно гибким + http://agilemanifesto.org/
Для шаблона, имхо, твой вариант не менее ужасен, всего 4 переменных да ещё и с заранее заданными именами, где же гибкость?
|
| Автор: CyClon 24.2.2008, 10:50 |
| Плясать нужно начинать от стандартов кодирования Zend. Если что-то сильно не нравится - используем свое. Чем более распространенный стиль написания кода вы используете, тем легче его будет читать другим кодерам. Если вы пишите в команде, не важно какие стандарты вы используете, главное чтобы все, кому нужно, без проблем разбирались в вашем коде. ИМХО "красиво" написанный код повышает "КПД" ЗЫ: Так же есть стандарты PEAR, но лично мне по душе больше Zend. Однако, вопреки стандартам Zend: 1. Не использую завершающий тег "?>" 2. Иногда использую другой стиль объявления массивов 3. Вместо "elseif" использую "else if" (C++ Style) 4. Если возникают вопросы, какую функцию использовать (напр. count или sizeof) - опираюсь на стандарты языка С++. Ссылки по теме (4 разных стандарта кодирования): http://framework.zend.com/manual/en/coding-standard.coding-style.html http://pear.php.net/manual/en/standards.php http://drupal.org/coding-standards http://tony2001.phpclub.net/doc/standard/ Выбор только за вами. |
| Автор: dsCode 24.2.2008, 12:19 | ||||
CyClon,
по-моему как раз-таки у Зенда написано НЕ использовать завершающий тег, если нет перемешки php и html (я тоже не использую ;)).
ага, а потом придет человек, который все время писал, придерживаясь Зенда (например) - и будет разбираться в вашей, понятной только вам, иероглифической каше =) P.S. вот в этом плане Python мне очень нравится - даже отступы "стандартизованы" - если в следующей строке будет не такое количество отступов, как в изначальной - компилятор выдаст ошибку =) Отличное принудительное обучение людей писать правильно =)) На такой код любо посмотреть ) К тому же некоторые (Sun (Java), Python, др.) выкладывают официальные Programming Style Guide'ы, следовать которым - ну я считаю уважением к языку. |
| Автор: CyClon 24.2.2008, 13:53 | ||||||||
Ну, я конечно не имел ввиду код без отступов, писанный человеками-обсуксаторами ЗЫ: Сейчас перечитывал все 4 стандарта, все разные Что не понравилось в PEAR сейчас: 1) Использование "elseif" (я использую "else if" 2) Синтаксис оператора switch (здесь я использую Zend-Style) Плюс ко всему, не могу определиться с именованием. Очень все стандарты разные, причем у каждого именования свои плюсы и минусы. В классах использовать сокращения типа HTML в верхнем регистре делает названия классов непотяными (Например: HTMLFormBuilder, HTMLToXML). Использование только первый заглавной буквы - некрасивыми (HtmlFormBuilder, HtmlToXml). Однако, скорее придется использовать второй вариант. Далее с функциями и переменными. В одном из стандартов призывают использовать C-Style имена переменных и функций ($var_name, $life_time, get_file(), set_value()), да бы не путать их с чем-то там ЗЫ: Пока писал, даже немного определился со "своими стандартами". Пора бы уже твердо это усвоить и писать годами код в одном стиле. Ну, и наконец, вспомнил про include. Тут то же, что и с константами слева, и заверщающим тегом. Наверно буду использовать include_once и require_once и работать на "максимальную защиту от дурака а-ля случайных ошибок". Однако, include/require являются такими же конструкциями (а не функциями) языка, как и return. Тут я опять стал на перепутье - использовать скобки или нет? С-Style:
Или же:
В общем, больная тема, уже надоела Добавлено @ 13:57 Кстати, иногда встречал такое написание кода:
Кто как смотрит на доп. пробелы по бокам внутри скобок? |
| Автор: bars80080 26.2.2008, 12:32 | ||||
совершенно не согласен, у меня внимание разбегается, а код зрительно распадается для меня оптимально иметь пробелы вокруг таких элементов как: = == === + - / но никак не скобок ещё и фигурные скобки
так по-моему оптимально |
| Автор: Aikus 26.2.2008, 13:56 | ||
| Уф дочитал. Много интересного узнал. Всё замечательно, т.е. есть замечания: вы напрасно развили тему как писать
Это как раз то, что можно оставить на откуп программеру или кодеру (в завивимости от квалификации). Гораздо важнее чтобы эту конструкцию не сокращали, т.к. тогда теряется прозрачность кода. Естественно важно как именовать функции, но гораздо важнее создать структуру кода, и не с помощью большого дерева подкрепляемых файлов (include "file.php"), а с помощью создания модулей (в моём понимании функции, классы). А если писать монолитный код, то хоть как ты именуй функции и пиши if then else, с ростом кода потеряется его смысл. Да и если писать такие вот модули, то инклудить можно будет в одном месте (в начале). Также, очень важно проектирование, частично затронуто абзацем выше, т.е. формирование заголовков, внутренних ссылок и т.д в проекте. P.S. со времен java я делаю мануалы во время написания кода, используя самописную утилиту по образу и подобию javah |
| Автор: MeIsGremlin 11.6.2008, 17:38 | ||||
Одинарные кавычки работают быстрее чем двойные так как не включается интерпретатор замены. Поэтому
Будет работать быстрее чем тоже самое в двойных кавычках. Рекомендую в фунциях, условиях и различных операторах использовать использовать именно одинарные кавычки. например
Максимально отделить программирование от гипертекста. Чтоб функции расчета, баз данных, создания, обработки возвращали лишь код. А вывод гипертекста или определения переменных шаблона было только в однои месте. Так легче отладку делать, читать код и заменять в случае чего вывод. Не надо лазить по инклюдам и другим файлам. Текст ошибок и сообщений, и вообще весь текст более менне статического назначения естественно лучше хранить отдельно в файле. Куда потом может зайти любой человек дорабатывающий проект и изменить "проффессор" на "профессор" без поиска по проекту или лазания по коду. Лучше разрабатывать код с включенными warnings, notices и тд. Так видней недоработки. И код будет правильней. |
| Автор: Feldmarschall 11.6.2008, 20:06 |
| Хехе, одинарные кавычки - это уже мем. Ну, и диагноз, разумеется =) В остальном все правильно. Впрочем, если вчитаться - то тоже видно, что понимания нет, а есть зазубренные правила. Какой такой код функции должны возвращать? Какая разница - по инклюдам "лазить" или по шаблонам? Про хранение всех сообщений в отдельном файле мысль правильная, но требует определенного понимания и полного пересмотра архитектуры, разумеется. |
| Автор: boogi 12.6.2008, 00:11 |
| И всё-таки отделение кода от гипертекста это "правило" тесно связано с поставленной задачей. От себя добавлю (если этого не было) как можно меньше регулярных выражений. sizeof() быстрее и красивее count() как можно проще индексы массивов (числовые лучше всего) |
| Автор: Feldmarschall 12.6.2008, 00:18 |
| хехе, ещё один =) sizeof(), даже если бы она не была одной и той же функцией, что и count(), все равно не была бы быстрее или медленнее. То же самое и с массивами. да делайте те индексы ,которые удобнее. Если раз в сто лет этот индекс станет узким местом - переделаете. когда ж вы поймете, что ахиллес все-таки перегонит черепаху? |
| Автор: boogi 12.6.2008, 00:24 | ||||
хоть какая-то нелогическая отпимизация никогда не мешала. представь 10к^2 обращение к массиву
тем более что займет это всё ровным счетом минимум времени...( я про оптимизацию xD ) Добавлено через 10 минут и 15 секунд Если можно отнести к правилу хорошего кода, для серьёзного проекта, то это несомненно: Кэширование повторно используемых данных внутри классов, запросов |
| Автор: Feldmarschall 12.6.2008, 00:37 |
| Если эта страна и погибнет, то только из-за таких "мыслителей". И ведь на полном серьезе обсуждается, каким концом разбивать яйцо. Со времен Свифта ни-че-го не изменилось. Понять действительно важные вещи в состоянии единицы. А остальные будут заниматься оптимизацией длины имен переменных |
| Автор: boogi 12.6.2008, 00:40 | ||
При чем тут это, философ? Посмотри на название топика. И лучше не пытайся прыгнуть выше головы. PS: Я буду только рад если та страна про которую ты говоришь погибнет. |
| Автор: Sannis 12.6.2008, 00:52 |
Видимо имелось в виду, что функции модели должны возвращать только данные или код результата(не в смысле php код), т.е. не должны возвращать "Выполненно успешно", а лучше "success" или какое-то заранее определённое значение. Сам же я хотел такой вопрос задать, из области не очень повседневной: Принято (обычно/часто вижу такое) приватные методы называть с подчёркиванием в начале и маленькими буквами, тогда как публичные - с использованием больших(в верблюжьей или иной нотации - не важно). В часности, в php4 это часто применялось, чтобы можно было сразу видеть, какие методы предназначены для вызова извне, а какие выполняют утилитарные функции и вызываются другими методами класса. Столкнулся с тем, что как бы не хотелось, но в некотором классе набралось довольно болшое количество публичных методов, причём часть из них, тем не менее, также вызывается в других из низ. При этом эти методы я не могу сделать приватными в силу того, что они иногда мной применяются-таки в остальной части скрипта, хотя и довольно редко. Использует ли кто-то специальные способы разделения методов класса "по частоте использования" путем именования специальным образом? |
| Автор: Fortop 12.6.2008, 02:31 |
Не могу представить. Зачем нам 100млн обращений к массиву? По типу операций и возвращаемым результатам - да. По частоте нет. например getSomethingList - возвращает массив getSomethings - возвращает массив объектов Something updateSomething - обновляет Something Добавлено через 4 минуты и 41 секунду Sannis, Имеется класс для работы с базой, примерно 250 методов работать во всяких блокнотах - сложновато. В Zend Studio - нормально. |
| Автор: Sannis 12.6.2008, 12:15 |
| Преимущества IDE я уже оценил) Что-ж, спасибо, пока не буду размышлять, не очень-то они и мешают. |
| Автор: Цербер 16.6.2008, 10:29 | ||
| Почитал всю тему, очень интересно читать такие дисскусии и обсуждения, а особенно для новичков. Сам на php пишу относительно не так давно, но стараюсь читать как можно больше инфы касающейся php. Когда начинал прочитал одну очень интересную книжку PHP5 на примерах (М.Кузнецов, И.Симдянов,С.Голышев) откуда впринципе и узнал про стили программирования(о чём даже представления не имел, до того момента) там описано 4 стиля (расставления фигурных скобок)
И для себя наиболее удобным и читабельным посчитал Стиль GNU. Это я к тому что стилей много, думаю эти 4 только малая часть всех существующих, хотя могу и ошибаться, стилей много и каждый кодер выбирает тот который удобен ему. Так же придерживаюсь тона при названии переменных, функций, разделения пробелами +/=/- и т.д., т.к. сам нарывался на скрипты где в названии переменных использовали что то вроде $l_gh а функции назывались $drw_n при этом комментарии в коде отсутствовали вообще. Так же хотелось бы задать опытным кодерам вопрос, может и покажется он глупым, но всё же, предподчительно в какой кодировке писать скрипты? я юзаю utf-8. P.S. ИМХО - Хорошего тона, должны придерживаться все кто кодит, тем самым проявляя уважение к другим кодерам. |
| Автор: nerezus 22.6.2008, 10:33 | ||||||||
P.S. Кстати непонятно, нахрена замену делали, неужели было влом лишние 2 условия в StateMachine вписать? Хрен этих разработчиков поймешь )
|
| Автор: MuToGeN 22.6.2008, 14:54 |
| 0. Логика визуализации и бизнес-логика - абсолютно разные вещи, это стоит держать отдельно друг от друга. 1. Табы или 4 пробела - это не важно, главное, чтоб другим оно не мешало. 2. По правилам кодинга (не программирования) существуют strict-стандарты для java, я стараюсь держаться именно за них. |
| Автор: gta4kv 22.6.2008, 19:18 | ||||
пример в студию Мой стиль вот:
Пришел к нему, как к самому удобному, достаточно удобно его читать |
| Автор: MuToGeN 23.6.2008, 07:29 | ||||
Ну, к примеру, отделять ключевые слова от остального пробелами и пользовать { } для любых блоков, даже если они состоят из одной строки, т.е.
Если функция/метод требует большое кол-во параметров, то не писать все в одну строку, т.е. что-то вроде
На этом, естественно, оно не заканчивается. Любой программист может написать что-то, понятное машине, но только хороший программист может написать код, понятный другому программисту. Подобные вещи как раз делают все более читабельным для других. |
| Автор: MuToGeN 23.6.2008, 07:54 |
Те, кто копался в исходниках e-commerce и помнит строки размером в несколько килобайт с 8ю - 10ю закрывающимися скобками в конце (выглядит как идиотский смайлик, кстати), меня точно поймут. |
| Автор: MuToGeN 26.6.2008, 09:31 | ||
Проглядел по-внимательнее тему...
Тут есть и другая крайность (греха таить не буду, несколько лет назад сам страдал подобным) - к примеру, алиасы для имен стандартных функций, создаваемые ради того, чтоб меньше топтать клаву пальцами. Cause i dont like typing. Уже давно понял, что по имени функции или переменной должен быть понятен ее логический смысл. Другими словами, о какой оптимизации может идти речь, если к разработке подключится новый человек и будет смотреть на исходники как баран на новые ворота. |
| Автор: Resha 23.10.2008, 10:46 |
| Правила хорошего кода превратились в попытку навязать свои стандарты окружающим P.S. Использование бикапитализации для классов, кэмел-кейс для методов и андерскора для переменных - это изврат почище вилок для салата, рыбы, мяса и пасты |
| Автор: Resha 23.10.2008, 11:29 | ||
sizeof() не может быть ни быстрее, ни красивее count(). Хотя бы потому, что sizeof - алиас count'а, а не наоборот. Про скорость вообще ничего говорить не буду - это не разные функции, это разные имена одной и той же функции. Про цифровые индексы тоже очень порадовало. Тогда давайте и в классах свойства называть p1, p2, p3 и т.п. Вообще, ассоциативный массив с цифровыми индексами - это революционное решение |
| Автор: zeusakm 26.10.2008, 00:14 | ||||
| Итак мальчики перестаньте мериться чл***ми продолжим. Правило №10. В случаях когда массивы незначительные меняем:
на:
А да и еще №8 можно сделать Abstract_Connection_DBS - соответственно MySQL, PostgreSQL и если надо Oracle =) Добавлено через 2 минуты и 4 секунды Ой блин sorry смотрел первую или смотрите первую =)) |
| Автор: awers 26.10.2008, 02:54 | ||
В больших блоках очень удобно использовать не {} а к примеру
Добавлено через 2 минуты и 46 секунд эх. забыл. мы это уже в прошлом году обсуждали |
| Автор: awers 26.10.2008, 23:32 | ||
| 1) Хотелось бы послушать обоснование минусам 2) А вы разберитесь с кодом где
и т.д. |
| Автор: QryStaL 30.10.2008, 13:34 | ||
И никаких end... не нужно. А если не делать отступов на вложенных блоках, то вообще кошмар получится =) |
| Автор: awers 30.10.2008, 14:08 |
| отступы я просто не стал тут ставить, но сам факт, когда в таких блоках по 150 - 200 строк в которых тоже разное попадается - не очень удобно видеть {} |
| Автор: QryStaL 30.10.2008, 15:17 |
надо разбивать на мелкие функции / методы |
| Автор: mxt 16.11.2008, 00:04 | ||||||||
Нет, так не известно точно что происходит: обьявление нового массива или приваение значение массиву. Вот так понятнее
|
| Автор: youri 1.12.2008, 04:34 | ||||||||||||||||||||||||||||||
я бы выбрал читабельность один раз - все подготовить, и за один print вывести? не знаю, не понятно зачем такое правило
ну я бы выбрал первый вариант, так как он читабельнее, правда регулярные выражения там не нужны или, возможно, это можно было бы одним регэкспом заменить
главное не отказаться от ifов ;-)
я бы хотел увидеть пример, когда бы конкатенация стала заметна на общем фоне я думаю им можно найти применение, но если то же можно выполнить средствами пхп, то ими и стоит воспользоваться
ну я думаю, дело было не в стиле, а как минимум в его отсутствии
здесь профеcсионализм, похоже, заключается в краткости в ущерб читабельности, я за читабельность)
ну от себя добавлю, что не ставлю { в отдельной строке, потому что это почти пустая строка, а пустыми строками я разделяю код на блоки, двумя пустыми строками - методы а вообще, так как человек может запомнить 7+/-2 элемента, я пришел к выводу, что оптимальное количество элементов в строке - 7, строк в блоке - 7, блоков в методе - 7, функций в классе - 7, строк в файле - 200, оптимальный размер файла - 3 КБ ну и не могу не согласится |
| Автор: MoLeX 6.5.2009, 06:10 | ||
|
| Автор: nichnikov 14.5.2009, 10:19 |
| Не писать двойные кавычки где можно обойтись одними |
| Автор: IZ@TOP 28.5.2009, 12:53 |
Экономия воздуха? |
| Автор: bars80080 28.5.2009, 13:52 |
правила хорошего кода |
| Автор: MoLeX 28.5.2009, 14:02 |
сам начинаю так себя приучать) |
| Автор: Elfet 28.5.2009, 15:18 |
| объясните про кавычки? какая разница? где и как использовать? |
| Автор: Kirsan 28.5.2009, 16:08 | ||
Если строка в себе не содержит переменных, то предпочтительнее использовать одинарные кавычки. Если содержит, то кому как удобнее - конкатенация или же строка в двойных кавычках с переменными внутри. |
| Автор: bars80080 28.5.2009, 17:49 | ||
правила хорошего кода - как раз одинарных в двойных переменные видны гораздо хуже (не всякий редактор берёт), а главное это порождает дополнительный пас для ошибок |
| Автор: Kirsan 28.5.2009, 18:18 | ||||
Да, я сам предпочитаю склеивать строки. Ещё видел вариант в задании оператору echo нескольких параметров. Такой изврат, ИМХО
|
| Автор: Elfet 28.5.2009, 19:18 |
| Kirsan, почемУ? Потому что-то кто то так уже привык писать? |
| Автор: bars80080 28.5.2009, 19:20 |
"правила хорошего кода" - это не документированный свод инструкций, а просто элементарное уважение к остальным программистам, которое выражается в написание понятного и легко усваиваемого кода |
| Автор: Elfet 28.5.2009, 19:32 |
| Я просто думал что есть какая-то техническая обоснованность такого правила. Выходит что это просто нотация? |
| Автор: bars80080 28.5.2009, 20:16 |
есть, и её тебе расписали. литералы в двойных кавычках проверяются на наличие переменных внутри них в отличие от одинарных кавычек. это естественно увеличивает время обработки этих строк. однако, в общем времени выполнения скриптов эти потери составляют ничтожные доли от тяжеловесных кодовых вывертов, как-то не оптимизированные запросы или большие объёмы гоняемых туда-сюда данных но это в принципе не важно. ведь развёрнутый код, выполненный в правилах хорошего тона грамотно, т.е. с отступами, не захламлёнными строками, большими комментариями весит больше и так же увеличивает время обработки (хотя и незначительно) по сравнению с сжатым кодом ,набранным чцть ли не в одной строке с короткими невнятными названиями переменных и функций. но с каким кодом будет легче работать? и это уже не семечки |
| Автор: MoLeX 29.5.2009, 05:56 | ||
предпочитаю тчк
|
| Автор: youri 30.5.2009, 03:03 |
| по сути, согласен с Feldmarschall - http://forum.vingrad.ru/forum/topic-47445/anchor-entry1546336/105.html (только не про страну и не про единицы) |
| Автор: bars80080 30.5.2009, 11:38 | ||
| youri, имхо, взгляд на эту проблему очень сильно зависит от того сколько вам приходится ворочать тонн чужого кода. когда сталкиваешься с таким:
|
| Автор: Elfet 30.5.2009, 12:19 |
| bars80080, такой бы обфуксатор иметь |
| Автор: nerezus 30.5.2009, 14:05 | ||||||
На спичка не сэкономишь, а конкатенация длинной строки твоим способом будет нечитаема.
Zend Framework Documentation, пункт B.4.2.3. Для подстановки переменных используются двойные.
А так конечно можно сказать, что PHP какашка, так как его блокнот не подсвечивает. |
| Автор: youri 31.5.2009, 04:06 | ||
я не имел в виду, что нужно писать как прийдется: стиль кодирования - это положительно, только лучшего нету а в этой теме много субъективных моментов и ненужных оптимизаций, имхо p.s. кроме того, тема то ли нечетко задана, то ли очень обширная. Правила хорошего кода касаются только оформления? |
| Автор: bars80080 31.5.2009, 09:21 | ||||
а я говорю наоборот
ну и кто они после этого? главный критерий, то что твой код будет быстро и эффективно воспринят другим человеком |
| Автор: youri 31.5.2009, 10:05 |
и кто прав? (а спорим не подеретесь |
| Автор: nerezus 31.5.2009, 11:42 | ||
Я как-то больше доверяю себе и создателям PHP, чем Васе Пупкину в твоем лице. Ничего личного, только профессиональное. Понимаешь, ускорение кода на 0%(не забываем про кэширование байткода) с проигрышем читаемости - это плохо. А если твоя IDE - блокнот, а не IDE - то это ТВОИ проблемы. |
| Автор: youri 31.5.2009, 11:46 | ||
а откуда информация про читаемость (что читабельнее)? |
| Автор: bars80080 31.5.2009, 13:34 | ||||
а я как-то больше доверяю личным наблюдениям, а не чужому мнению. когда очередной раз здесь скидывают класс по БД с малопонятными конструкциями типа $db->fetch_row(), я спрашиваю себя, нафига вообще было писать такой код, который ни капельки не облегчает процесс написания? но все пользуются, я им не возражаю. но это не значит, что я должен брать тот же класс и юзать его когда начинал, то у меня все скрипты писались на базе Котерова (его подключатель библиотек, его мейловый класс, класс работы с БД и прочее). постепенно я отказался от всего, даже от его dump, потому что находил (либо писал) более удачные, компактные и эффективные вещи. может где-то проигрывали в универсальности, но зато без того абсурда, чем они изобиловали, увеличивая и время работы в разы, и нагружая БД, и не отдавая нужной эффективности не знаю что там из себя представляют IDE, всё что слышу о них порождает идею о пушке и воробьях. смысла в них вообще не вижу, если создание сайта у меня занимает всего 5 минут, путём копирования предыдущей версии. а далее дизайн, контент и размещение блоков. т.е. ничего общего с программированием на пхп.
да, именно так. и использование двойных кавычек - проигрыш в читаемости кода |
| Автор: nerezus 31.5.2009, 13:42 | ||||||
Потому что уже есть куча стандартных ОО-вариантов.
Расскажи, как с сотнями файлов в блокноте работать ) Очень интересно ;)
|
| Автор: youri 31.5.2009, 13:50 | ||
и что мы видим? Правила оформления кода субъективны (большей частью) - кто к чему привык, вы сами это отлично продемонстрировали
там так и написано, что "двойные кавычки для большинства читабельнее"? |
| Автор: source777 31.5.2009, 14:04 | ||||
С чего вдруг? Синтаксис PHP близок к синтаксису С++, следовательно всем людям знакомым с С++ будет гораздо легче читать код, в котором строки-литералы обрамлены двойными кавычками, а символы-литералы - одинарными. По той же причине лучше не использовать конструкции, включающие в себя : endif, : endforeach, etc. вместо {}.
Ну так если твоя работа вообще не связана с программированием на пхп, то с какой стати ты навязываешь своё мнение в теме, связанной с программированием на пхп?
|
| Автор: bars80080 31.5.2009, 14:07 | ||||||
нет. объём чистого кодинга на модуль - максимум 100кБ, и то это был жуткий аврал и нафигачивания одной новой компоненты на другую, т.е. архитектуры вообще не было. а так 10-30 кБ
а кто сказал, что я работаю в блокноте? простенький редактор с подсветкой и закладочками сверху. больше пяти за раз открываю только в случае когда ищу что-нибудь зрительное (т.е. когда в поисковик нельзя вогнать) хм, интересно, что это за дикий кодинг в котором приходится работать с сотней файлов одновременно? у меня обычно открыт пхп-скрипт, хтмл-шаблон, js-скрипт, css-лист. в принципе всё
что-то не видно ссылки. есть понятие привычки, а есть понятие удобства, не надо путать, я тоже вначале делал как завещал великий ... (фиг знает, кто там был в начале, но судя по всему суеверие очень живуче). я долго писал двойными кавычками, потом решил перейти на одинарные, вначале было неудобно, но за пару недель полностью перестроился. ошибок в разы уменьшилось. во-первых из-за такой банальности, что меньше чёрточек мельтешит перед глазами, во-вторых, кристально чётко отслеживается где переменная/константа/массив, а где литерал, также неожиданно перестроились строки кода. тут надо пояснить. при постоянных соединениях конкатенацией отдельных частей, естественно получается разбитие строк по точке, в отличие от двойных кавычек, где либо происходит уход строки за край экрана, либо съезд на следующую строку со зрительной разбивкой табовой структуры, либо введением разрыва страницы, который разрывает структуру уже в html-исходнике. короче это надо видеть и ощутить, а не слушать открыв рот других, только потому что это "уважаемые" программисты из серьёзных проектов. |
| Автор: source777 31.5.2009, 14:07 | ||
|
| Автор: bars80080 31.5.2009, 14:08 | ||
читаем выше, написал почему я отошёл от двойных |
| Автор: source777 31.5.2009, 14:13 | ||
ты не смешивай в одну кучу выбор вида кавычек и выбор между конкатенацией и интерполяцией, они не связанны совершенно. Да и длина строк не связана с выбором между конкатенацией и интерполяцией. Т.е. твой редактор не подсвечивал строки с двойными кавычками и интерполированные в них переменные? Смени редактор, он жестоко тебя ограничивает! |
| Автор: bars80080 31.5.2009, 14:15 | ||||||||
не знаю лично ни одного кодера из C, который бы перешёл на пхп
работа прямым образом связана с пхп, так как новые модули то писать надо. а моя ремарка относится к эффективности IDE
я вообще никаких подобных дикостей не использую. я пишу $db->select($sql); и получаю нужный мне массив данных упорядоченный в нужном порядке, с нужным количеством строк, да ещё и залогированный если нужно
имхо, если человек занимается одновременно разными направлениями, то если он не является гением, то возникает вопрос о качественности его работы в отдельном направлении. именно по этой причине я не стал даже соваться в asp и .net, т.к. хотел всё-таки подняться над уровнем примитивов в пхп а при отдельныз разработках, то перестроится на другой синтаксис не представляет труда. мы же не пишем в пхп := , и при этом не испытываем никакого дискомфорта при переходе на другие системы? |
| Автор: source777 31.5.2009, 14:16 |
Я почитал, единственная крайне субъективная причина "меньше чёрточек мельтешит перед глазами", всё остальное вообще с видом кавычек не связано(конкатенацию с двойными кавычками никто не запрещал применять). |
| Автор: bars80080 31.5.2009, 14:23 | ||||
понятия не имею, что ты понимаешь здесь под интерполяцией. если мы берём отдельные, да ещё большие куски текста без наличия в нём переменных, то вообще не понимаю, зачем их пихать в код. это уже либо контент, либо набор служебных строк, который просто надо вынести в отдельный шаблон
пробовал несколько, ерунда полная. основная причина - слишком умные, да без простейших фич. помнится один понравился, но создатели не добавили всего одну настройку - регулятор подсветки. я везде её настраиваю под себя. слишком умность проявляется в беспардонном наезде относительно дефолтных кодировок, каких-то дурацких анализов файлов, встраивании спойлеров, где их не просили. у меня даже возникла такая мысль, что все сторонники utf8 вынужденно стали переходить под неё из-за таких редакторов, подменяя своё мнение чужим |
| Автор: source777 31.5.2009, 14:28 | ||||||||
А мы оказывается про кодеров говорим? Я то думал про нормальных программистов, которые язык выбирают под конкретную задачу, а не переходят с одного на другой.
ну это тот же велосипед, только в профиль. Почитай про http://github.com/kla/php-activerecord/tree/master.
Я про это и написал: "синтасисы либо минимально отличались, либо кардинально", если брать пару Delphi - PHP, то различие в синтаксисе кардинальное, а если С++ - PHP, то надо сводить различия к минимуму, т.к. кардинального отличия не получится, как не старайся. |
| Автор: bars80080 31.5.2009, 14:29 | ||
так бессмысленно её применять с двойными кавычками. мы же здесь не правила использования обсуждаем, а манеру кодинга человеком. зачем бить строку на части без нужды? а если она уже разбита, то у человека автоматом потянется рука нажать enter именно в этом месте это называется удобство, быстрота написания и чтения, а вместе читабельность или правила хорошего кода для машины пофигу как мы пишем, её даже лучше если будет меньше комментариев, пробелов, имена переменных короче... всё это для удобства человеческого глаза. |
| Автор: source777 31.5.2009, 14:33 |
| Интерполяция - подстановка значений переменных в строку, вместо их идентификаторов, аля "val = $val" -> "val = 5". Это не я придумал так называть данный механизм Добавлено через 1 минуту и 18 секунд с чего это ты взял? |
| Автор: bars80080 31.5.2009, 14:37 | ||||||||||
а мы оказывается говорим про разные задачи? я думал в теме мы обсуждаем вэб-проекты основанные на пхп. это во-первых, во-вторых, если речь идёт не о крупной IT-компании, то я бы остерёгся обращать в компанию или даже одному человеку, где на дверях написано: сделаем всё. по причинам выше уже описанным насколько я помню, google не занимается написанием контроллеров для станков? ну не знаю, если для тебя $db->select($sql) и $s = $db->select($sql); while($db->fetch_row($s)) { $b = .... } одно и тоже, то не знаю даже что и говорить
вооот, а мне тут советуют озираться на "специалистов" я особо читать не стал. что ты мне хотел показать, кроме того, что там человек пользуется одинарными кавычками?
это уже что-то из: я вижу разницу между #ccccc8 и #ccccca, а я нет Добавлено через 3 минуты и 6 секунд
не знаю, в моём понимании интерполяция - придумывание промежуточных значений на базе уже существующих. тоже не я придумал и что ты хотел сказать? я и не заикался о замене
а зачем лишний раз разрывать строку, если переменная так и просится остаться внутри литерала? |
| Автор: youri 31.5.2009, 14:44 | ||||||||
очень важные фразы, и не надо это оправдывать "удобнее чтобы их синтасисы либо минимально отличались, либо кардинально". Ведь если ты на чем-то пишешь, то в результате "перестраиваешься", вне зависимости с какого языка на какой перешел. Или на протяжении всей последующей жизни неправильные кавычки подтормаживают тебя при чтении исходников?
похоже за этим стоит серьезное научное исследование а рядом причины использовать двойные кавычки
для кого-то связаны |
| Автор: source777 31.5.2009, 14:49 | ||||
веб-проекты можно делать не только на пхп, поэтому надо чётко разделять понятия пхп-кодер и веб-программист, в этих понятиях крайне мало общего.
И то и то велосипед с квадратными колёсами, да ёще и raw-SQL на входе, ужос короче, лучше с подобным кодом дела не иметь.
Добавлено через 5 минут и 50 секунд это их проблемы. Смысл в том, что использование тех или иных кавычек никак не должно входить в "Правила хорошего кода", это личное дело каждого и никакого улучшения читабельности при использовании одинарных кавычек нет, поэтому я против того навязывания одинарных кавычек, которое развернули в этой теме. |
| Автор: youri 31.5.2009, 14:56 |
| итого, 3 точки зрения по поводу того, какие правила лучше <погорячился> |
| Автор: source777 31.5.2009, 14:56 |
| как ты догадался, оно ж секретное! |
| Автор: youri 31.5.2009, 15:01 |
| откуда вообще вот это взялось? http://framework.zend.com/manual/en/coding-standard.coding-style.html http://pear.php.net/manual/en/standards.php http://drupal.org/coding-standards http://tony2001.phpclub.net/doc/standard/ казалось бы придумали для php одни правила - так нет же, свои придумывают пожалуйста, объясните зачем им каждому свои правила? |
| Автор: nerezus 31.5.2009, 15:02 | ||||||||||||||||
Естественно открыто ~7 файлов одновременно, остальные учавствуют в автодополнении кода и подсказках.
Хотя ты возможно путаешь C и C++, это абсолютно разные языки.
Добавлено через 9 минут и 3 секунды
|
| Автор: bars80080 31.5.2009, 15:42 | ||||||||
ну у меня не десять голов, чтобы над десятью модулями работать. разбивка на файлы - это прежде всего выделения отдельных смысловых частей. зачем мешать работу с БД и какой-нибудь новостной визард? работаю над одним модулем, его и открыл, когда надо будет над другим - открою его. первый уже будет не нужен, можно закрыть
страх какой. т.е. выполнение одного клика пользователя вызывает движуху по нескольким сотням файлов? уже отписался
забавно, порождает интересные размышления об избыточности изучения этого языка
|
| Автор: Elfet 31.5.2009, 17:30 | ||
Что то тут я не очень понял? Что за велосипед? Я, например, DbSimple пользуюсь, там тоже на это похоже. А этот активрекорд, как мне показалось - шаг назад. |
| Автор: nerezus 31.5.2009, 17:34 | ||||
Сейчас 2009 год, сервер арендовать на месяц дешевле, чем программисту день работы оплатить. И, кстати, советую почитать что-то про оптимизацию ;)
Update: http://rsdn.ru/article/philosophy/Optimization.xml |
| Автор: bars80080 31.5.2009, 17:48 | ||
мне читать про оптимизацию? тут кто-то жаловался, что лишний десяток инклудов заметно сказывается на времени работы скриптов а я ещё думаю, почему vz.ru надо сидеть ждать полминуты пока загрузится, почему mail.ru вешает мне браузер. думал количество посетителей много, а проблемы возможно в корне |
| Автор: nerezus 31.5.2009, 17:55 | ||
|
| Автор: source777 31.5.2009, 18:19 | ||
|
| Автор: Elfet 31.5.2009, 19:02 |
| source777, что это за набор паттернов? Тот класс для работы с БД, что ты показывал до этого как я понял не использует SQL, за место него работает объектная модель? Я думаю, что это неправильно, так как не зря же придумали SQL? Могли бы и сразу делать объектно, без всяких других языков. |
| Автор: bars80080 31.5.2009, 19:15 | ||
да что за статья-то? и ты хочешь сказать, что десять файлов подключать лучше, чем один того же объёма? |
| Автор: nerezus 31.5.2009, 19:25 | ||
И кстати не забывай, что php-файл после компиляции кэшируется при правильной настройке PHP ;) |
| Автор: source777 31.5.2009, 19:35 | ||||
PoEAA.
Но даже при использовании реляционных СУБД уже давно всем понятно, что SQL никак не вяжется с современным объектно-ориентированным программированием, поэтому все запросы должны быть изолированы в одном месте, а не разбросаны хаотичными вкраплениями по всему коду. |
| Автор: Elfet 31.5.2009, 20:42 |
| source777, а есть ещё альтернативы ActiveRecordBase? |
| Автор: Wowa 31.5.2009, 21:30 | ||
Ну код же надо разделять. А пихать всё в один файл нельзя, т.к. тогда куча лишнего грузиться будет. Байт-код пхп-файлов в памяти кешируется и подключение должно быть более-менее быстрым. Хотя конечно тоже время занимает и пара сотня файлов это перебор, но от подключения нескольких десятков файлов имхо никуда не уйти. |
| Автор: source777 31.5.2009, 22:20 |
| Есть, по ссылке выше смотри пункт Data Source Architectural Patterns. |
| Автор: SneG0K 31.5.2009, 22:24 |
| Хороший код должен быть: 1) Хорошо читаемым 2) Хорошо документированным 3) Хорошо оптимизированным Имхо. требования к написанию меняются от команды к команде... |
| Автор: youri 31.5.2009, 22:50 |
+1 вот зайдет сюда пару таких команд и будут довольно протичоречивые правила (т.е. они уже противоречивые) т.е. надо либо рассматривать эту тему как набор всяких правил, из которых человек выберет, что ему по душе либо искать правила, с которыми будут все согласны (только мало таких будет) |
| Автор: bars80080 31.5.2009, 23:26 |
так я ж про то и говорю, сто файлов подключаются одновременно. это же с ума сойти |
| Автор: Wowa 31.5.2009, 23:27 |
| Кстати, рекламируемая тут ActiveRecordBase как раз подразумевает создание большого кол-ва файлов. По файлу на класс объекта. |
| Автор: SneG0K 31.5.2009, 23:29 | ||
Это не с ума сойти, а хороший API интерфейс, наверное |
| Автор: nerezus 31.5.2009, 23:47 | ||
|
| Автор: source777 1.6.2009, 11:16 |
| APC |
| Автор: SneG0K 1.6.2009, 11:21 |
А это уже вина администраторов. |
| Автор: realPROme 2.6.2009, 14:43 |
| незнаю, насколько это считается правилом хорошего тона...)) константы пишу СТРОЧНЫМИ, как уже говорили, а названия переменных для массивов начинаю с символа подчеркивания, а-ля $_array привычка такая пошла, походу, с $_GET/POST |
| Автор: SneG0K 2.6.2009, 15:04 |
| А я просто обзываю переменные и массивы понятно |
| Автор: Serkys 2.6.2009, 22:30 |
Не думаю, что это хорошая мысль. Подчёркиванием предваряются private и protected свойства класса. Можете посмотреть в сторону венгерской нотации, если вам удобно выносить тип переменной в её имя, но это тоже не лучшая мысль с точки зрения рефакторинга. |
| Автор: mogul82 8.6.2009, 01:17 |
| Я пишу как мне любимому нравиться, а на мнения др. кто там будет работать с моим кодом мне насрать. |
| Автор: nerezus 8.6.2009, 01:48 | ||
|
| Автор: mogul82 8.6.2009, 10:13 | ||
Да я ващето им и работаю 2 года. Переделал кучу сайтов. |
| Автор: bars80080 8.6.2009, 10:41 |
ну, вот как попадёт в руки творение такого же товарища как ты, станешь последователем древней секты е*аллы, так и поймёшь, что к чему |
| Автор: MoLeX 8.6.2009, 12:17 | ||
|
| Автор: nerezus 8.6.2009, 12:44 | ||
|
| Автор: Cheburek 5.7.2009, 20:25 | ||
А я взял за основу http://www.rsdn.ru/article/mag/200401/codestyle.XML. Только с фигурными скобками мне все-таки удобнее писать:
|
| Автор: LittleFuntik 7.7.2009, 15:55 |
| А мне все-равно. Главное, что-бы все работало красиво и быстро. Просто у меня для каждого настроения свой стандарт написания кода |
| Автор: godson 16.7.2009, 11:45 | ||||||||
ИМХО хорошим стандартом (для PHP 5) писать строки так:
Насчет require_once: желательно написать autoload фукнцию (опять же для PHP5) и множество require пропадут из кода Добавлено через 9 минут Еще хорошим правилом является добавление префиксов к именам переменных Например
|
| Автор: nerezus 16.7.2009, 12:09 | ||
В виндовых апи остались пережитки. Гораздо проще возвращаемый тип функции описать, а IDE сама тип подскажет. Тем более как будешь объекты именовать? someClassSomeInstance?) |