Как стать автором
Обновить

Комментарии 105

Подсказывают, что если значение ставить первым, то читается хуже. Пожалуй, так.
я сейчас так пишу, сначало было странно, но теперь даже чепляет. Это хороший ход, особенно новчикам будет полезен, кто только начинает на C подобных писать.
так чем он лучше?
кроме оригинального видения и авторского подхода..
дело в том, что после таких языков как Delphi, VB новички обычно пишут
if ( $a = 5 )
{
....
}

то если они будут писать
if ( 5 = $a )
{
}
выйдет ошибка.
Ну если водитель автомобиля пересядет на мотоцикл и будет искать рычаг переключения передач где-то правее водительского места и три педали под ногами, это только его проблемы.
Так же и здесь. Переходя с одного языка на другой, надо хотя бы изучить его синтаксис.
да все изучают синтаксис, но все и ошибаются. Я например, только сейчас (спустя 2-3) года уже не делаю таких ошибок. Но раньше частенько. Тут же написано хорошо для новичков. Или вам лишь бы поспорить?
Я до сих пор иногда так косячу иногда :( За совет - +1!
Может быть так и стоить делать, только вот в большинстве фреймворков слева все-таки переменная, а справа значение и если следовать этому совету, то получается что в проекте будет 2 разных оформления условий.

Да и от таких привычек потом сложно избавиться. Насколько знаю почти все редакторы поддерживают предупреждение о возможном неправильном использовании знака равенства в условии.
PHPExpertEditor нет такой поддержки в редакторе.
В PsPAD и WeBuilder не нашел.
в ZDE не нашел
В 6м есть.
Минус мне в ноги, ноги мне в рот.
В Notepad++ нет. Так в каких есть в конце концов?!
Zend Studio и Analyze Code выдает предупреждение:
Assignment in condition

Ищите и обрящите:)
Eclipse PDT выдает:)
НЛО прилетело и опубликовало эту надпись здесь
какую такую ошибку оно может поймать? пример в студию.
пример выше
1. Если уж подписывать функции, классы и файлы, то делать это лучше сразу в формате phpDocumentor - и визуально красиво, и пригодится.
5. Отступы - личное дело каждого, то что они должны быть выровнены - ежу понятно. Но одни рекомендуют использовать табуляцию, а другие 4 пробела. И вот на счет положения фигурных скобок есть разные мнения. Одни утверждают, что надо делать так:

function killThemAll() {
...
}

А другие говорят, что надо так:

function killThemAll ()
{
...
}
Мне симпатичнее, когда открывающая фигурная на той же строке. Да и строк меньше.
С этим согласен. Так делаю еще с Паскаля (когда еще begin был).
А я думаю, что второй способ нагляднее. При большом кол-ве вложенных блоков порой сложно отследить что где. А вот если скобка на новой строке и блок начинается с отступа - искать значительно легче...
Без разницы как писать, главное чтобы по всему коду было одинаково — и отступы, и стиль скобок, и стиль переменных (TheVariable или theVariable или the_variable). Причём чаще всего стиль переменных проще использовать тот, который использует фреймворк.
видел я как-то давным давно, лет, наверное, восемь назад, программку, которая форматировала паскалевский код, добавляя табуляции или пробелы, выравнивая операторские скобки и т.п.
наверное, и для сишных языков есть подобное.
Конечно же есть, в изобилии. Но ведь лучше писать сразу красиво. В этом, кстати, не самую последнюю роль играет "интеллектуальность" редактора. Я использую vim и очень доволен тем, как он автоматически расставляет все отступы согласно настройкам.
я учился по борландовскому хелпу в Turbo Pascal :)
А есть мануал к phpDocumentor на русском?
Стили скобок и табуляция против пробелов - это холивары. Даже не стоит начинать обсуждать. Все стили верные. Поэтому я даже не скажу, как мне больше нравится.
Главное - при групповой разработке придерживаться единой стилистики оформления кода в проекте. Даже если кому-то из разработчиков выбранный стиль не нравится, надо уговорить его смириться, ведь код будет выглядеть намного аккуратнее и поддерживать его будет проще.
Стиль написание не аксиома, это индивидуальное.
Чаще всего:

function killThemAll ()
{
...
}

используют, что бы в коде было сразу видно, где начинает и кончается функция, а условия пишут так

if($flag){
...
}

Это предпочтение каждого.
Если есть желание писать в едином стиле, то можно зайти в доки на zend fremawork.
>> if (100 == $counter)
Начинающим программистам: не пишите так никогда. Потому что, на вашей будущей работе, коллеги поставят вас за это в угол.

Есть определенные стандарты, которых надо придерживаться. Такая запись даже плохо читаемая. Возьмите вместо счетчика зайцев. Получится не красиво (если 100 равно зайцам). Если брать правильную запись, то все прочитается как нельзя хорошо (если зайцев ровно 100)
Народ наоборот пишите так!!! Ваши коллеги вас по голове за это гладить будут. Нет никаких таких стандартов. А такая запись во много раз облегчает отладку.

Ибо пропуск второго знака "=" бывает очень часто, и тогда получается условие:
if($counter = 100), которое всегда равно true и ни какой ошибки не дает, а если написать наоборот if(100 = $counter), то будет ошибка, интерпретатор об этом скажет, ибо константе пытаются присвоить какое-то значение.
Пропуск второго знака бывает очень редко. К тому же на этапе тестирования эта ошибка, если и имеет место быть, то обнаруживается достаточно быстро. А вот читаемость кода от этого снижается очень сильно. Не забывайте, что по логике вы сравниваете переменную, а не значение.
По опыту пропуск второго знака довольно частая ошибка, особенно у начинающих, а читаемость не слишком снижается, это дело привычки...
Вот как раз по опыту это редкая ошибка.
А для начинающих это как раз будет поводом изучить разницу между "=", "==" и "===", а не просто ставить кучу знаков равно только потому что появилась ошибка.

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

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

P.S. По логике, при сравнении вы ориентируетесь на соблюдение/совпадение диапазонов, которые описываются константой или вычислимым значением. Именно поэтому в рутинных операциях константа является более важной.
1. У любого программиста это даже не ошибка, а опечатка (которая в подавляющем большинстве случаев исправляется тут же).
2. Для таких ошибок не надо писать ничего. Даже при беглом просмотре кода это сразу бросается в глаза.
3. Если у вас приветствуется такая форма записи, то я со своим флагом останусь на прежней работе.

p.s. Логика одна. Если я сравниваю яблоко с ежом, то сначала представляю яблоко, а потом ставлю рядом с ним ежа.
Поменять местами ежа и яблоко, и у Вас случится кризис? :)
Спорить бесполезно. Пишите как хотите.
пропуск второго знака сравнения бывает очень часто, особенно, если приходится писать параллельно на Delphi/Pascal, VBA, php и SQL.
Если к вам придёт системный архитектор и скажет писать код по-человечески, как все, то никуда вы не отвертитесь от внутренних стандартов написания кода. И в таком случае он будет прав. Потому что кодер удёт — а код останется.
никогда не ходите на плохих костылях!
отрубите себе ноги и купите хорошие костыли!
Я не знаю, как там в PHP, но GCC уже давно ловит такие ошибки (и кстати, они действительно достаточно редко встречаются).

int i;
if(i = 2)
{
printf("hello");
}

$ gcc -W -Wall test.c
test.c: In function 'main':
test.c:6: warning: suggest parentheses around assignment used as truth value
Рекомендую почитать книгу "Совершенный код", автора к сожалению сейчас не помню, там много подобных случаев рассмотрено.
Спасибо
Стив Макконнел, на столе лежит :)
А на Рапиде, или еще где-то, в PDF не лежит случайно? ;)
Лежит, отчего же не лежать.
http://rapidshare.de/files/26242673/000897.rar.html
http://www.megaupload.com/?d=04OWRZQL
Спасибо.
Такую книгу нужно в бумажном варианте иметь.
Не пишите, господа, ни так, ни этак. Сравнение переменной с вписанной в код цифрой или строкой называется хардкодингом и нарушает принципы структурного программирования. Сравнивать по хорошему надо с константой, предопределенной где-то ранее, а не в самом теле условия. Сравнивать логическую переменную с true необходимо в виде if($variable === true).

А если будете сравнивать две пременных - выгоды от предлагаемой «обратной записи» никакой, пропустите знак «=» - компилятор не ругнется, присвоится всё молча, условие сработает.
Абсолютно верно. Надо избегать так называемых "магических цифр" в коде. В идеале в коде вообще не должны встречаться числа, цифры или строки. Все они должны быть объявлены как константы с вменяемым именем. Например в этом случае

$MAX_COUNTER = 100;

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

А вообще верно сказано. Читайте книгу Стива Макконела "Совершенный код" и ишите там раздел "самодокументируюшийся код".
Логическую переменную надо сравнивать с true?!
Тогда уж лучше, как где-то советовали, на яве,

if (a.toString != 5) ...
Кххм... PHP нетипизированный язык. Любая непустая переменная приравнивается к true, если мы ставим ее в условие. Строка, число и массив - всё true. Если мы ищем сравнения с true, необходимо сравнивать по соответствию (оператор «===»). Применение подобных приемов продолжает описанную автором методику избавления от опечаток в коде, только и всего. Можно и просто if($my_boolean){echo "ДА!"}, но если почему-то $my_boolean = "Error!", то всё равно выйдет ДА!
Стараюсь придерживаться стандартов кодирования PEAR.
ссылка не вставилась - http://pear.php.net/manual/ru/standards.php
Спасибо :-) PEAR весьма по-человечески написан.
Вот в PEAR, кстати, ничего на счет if(100 == $counter) или if($conter == 100) не нашёл. Если кто видел — дайте ссылку, пожалуйста. После прочтения статьи осознал, что стоит снова задуматься над оформлением кода, пусть я и не профессиональный программист, но из уважения к этим товарищам как раз стоит аккуратно оформлять даже самые примитивные коды.
Дело в том, что соглашение о кодировании (code conventions) созданы для того, чтобы код проекта, над которым работают несколько человек, выглядел одинаково. Для каждого проекта соглашение может быть своим, на то оно и соглашение.
Вот, например, про условия:
http://xprogramming.com.ua/phpcodingstan…
Это я понимаю. Также полагаю, что соглашения о кодировании помогают код одних авторов нормально интерпретировать дугими программистами, зная code conventions первых. Меня немного мучает другой вопрос: почему не используется единый стандарт для всех?
Потому что все думают и решают задачи по разному. Если было бы возможно использовать единый стандарт, здесь сейчас не было бы споров о том, как лучше записывать условия. Ведь даже фукции php именуются не по одному принципу. Невозможно заставить всех программистов писать код одинаково. Это возможно только в рамках отдельного проекта.
Спасибо.
Я сам начинаю только начинаю писать и думаю что правильнее (100 == $counter). По своему небольшому опыту знаю, ошибки бывают, и часто. А по логике можно сразу и привыкнуть к такому написанию!!
Главное к этому не привыкать и, уже поднабравшись опыта и не путая = и ==, писать по-человечески читаемо ($counter == 100). Через год просматривая код, сами себе спасибо скажете.
Комменты к таким текстам читать вредно :) Но выскажусь.

Пункт 4 - хинт для PHP, но это же изнасилование мозга. За два дня Вы и без этого начнете писать ==.

Пункт 5 - нуууу... я предпочитаю закрывающую скобку ставить под первой буквой оператора или имени функции, а открывающую - на строке с оператором или именем функции. Бумагу экономлю :)
а в чем же изнасилование? изнасилование мозга — это отладка :)
по пункту 5 — то самое и имел в виду
Изнасилование - в части левой условия константу писать. Не это по-русски.
Не это по-русски.

А это - по-русски?
Ну опечатался человек :) Я вот все еще пишу if ($variable = 1) вместо
if ($variable == 1).
Забавно, когда человек обвиняет в нерусскости и при этом пишет не по-русски :)
Не опечатался. Я всего лишь хотел продемонстрировать на доступной аналогии, как мне режет глаза 100=Х. Печально, что это никто не понял :)
за п4. автору жирный плюс!

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

люди с которыми работал особо на такой подход не жаловались, некотрые взяли на вооружение добровольно, некоторым пришлось прививать насильственно, но в итоге практика именно такого подхода к сравнению среди большинства людей с которыми приходилось работать со временем становилась правилом хорошего тона :)
Пхоже на праворульный автомобиль :) На первый взгляд непривычно, но если помогает - почему нет?
на самом деле появилось оно из-за того, что php не ругается(или не ругался, как в новых просто не заю) на присваивание внутри IF (if ($p = 1) {...}), поэтому при использовании "блоконота" для правки иногда возникали "грабли".
наверняка сейчас уже не так актуально, поскольку многие IDE подсвечивают подобную операцию ворнингом, но тем не менее...
Блог php и так не сильно изобилует содержанием, а теперь вот у него появилась альтернатива. Это пугает: так совсем немногочисленный контент на тему php станет размазанным по всему habrahabr`у.

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

В общем: время рассудит :)

Конкретно пост понравился: предложения дельные. Спасибо.
вот если следовать рекомендации №4, а всем остальным не следовать, то получится битрикс.
Согласен :)
Алексей, может быть Вы и умеете консультировать кого-то и грамотно писать, но не надо вводить в заблуждение начинающих программистов. Лучше дать им ссылки на стандарты и растолковать их.
Несогласны с чем-то конкретным или «вообще»? Смысл этого блога в том, чтобы были обсуждения, и начинающие программисты, а также менеджеры и прочие непрограммеры, которым иногда надо что-то попрограммировать, могли бы получить ссылки на стандарты, толкования, мнения и советы от более опытных товарищей. Ответы в стиле RTFM — не для этого блога.
Для регов могу посоветовать использовать "расширенный режим", x, здорово упрощает читаемость и позволяет комментировать, жаль, мало кто про него знает :( :
$rx = "~
( # какая-то сложная часть
(xxx|yyy) # первая часть
|
(aaa | bbb) # вторая часть
)
~x";
if(preg_match($rx, $string)) ...
подробнее тут: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
Кстати по поводу счетчиков, то можно безболезненно называть счетчик как $i, это устоявшееся название для счетчиков. Естественно при вложенных циклах, лучше давать счетчикам осмысленные названия.
по вопросам документирования, именования и вообще оформления кода мне ближе стандарт ZF, неоднократно тут упоминавшийся. Очень удобно использовать формат phpdoc, который там используется вместе с редактором Zend Studio
на счет использования в условных операторах знака «=» — иногда он очень помогает, например вот в таком случае:

if ($result = getContent()) {
    print $result;
} else {
    return false;
}

ну а скобки я ставлю так:

if ($a == 1) {
    print 'Hello World!';
} else {
    return false;
}

а в функциях и классах:

public function getContent()
{
    return false;
}
Читабельность кода можно повысить, отказавшись от {}.

Например:
if ():
endif;

Аналогично: endfor, endwhile, endforeach.
Скорее понизить. И свести на нет возможность подсветки открывающей/закрывающей скобки в редакторе.
ниразу не так. писал я на бэйсике и делфи. и вот когда перешел на Си - почувствовал дзен.
для непрограаммистов хорошо написал. И программистам такое бы полезно почитать иногда.
А комменты это вообще святое - я иногда по два абзаца на строчку кода пишу - что где как посмотреть, да почему именно так, да с кросс ссылками.
Один друг предлагал вообще функции писать по другому: сначала простым русским языком (на псевдо коде) писать много комментариев - алгоритм работы, а потом между ними писать саму функцию.
пункт 3 - обязательно. на уровне "must"
пункт 5 - тоже must, табулирование уровней вложенности очень помогает
правда я используюдругую нотацию
if()
{// коммент к ифу
   код
}
а когда потом этот уровень сворачиваю - как раз коммент виден. Но тут как говрится "в чужой монастырь..." кому как удобнее

а про каунтеры.
i -наиболее частый вариант пошел от index (j,k не знаю откуда, но исторически когда i занят как раз используют сначала j а потом k). А переменные как правило лучше назвать конкретно. если переменная стоит в цикле - то и так понятно что она счетчик.
лучше $numBelok, $WorldSaversCounter и так далее или использовать венгерскую нотацию $iBelki (i - значит integer или index)

Еще кстати есть такой полезный опыт назвать логичексие переменные на "is", то есть не просто $Full, $Empty, а $isFull, $isEmpty.
Тогда очень лаконично смотрится
if($isEmpty) makeNew();
А то бывают случаи когда для Empty например используют "истина" как полный и "ложь" как пустой, а так вопрос отпадает сам собой.
(j,k не знаю откуда, но исторически когда i занят как раз используют сначала j а потом k)

это алфавит ;)
А именно i, j, k — это "устоявшиеся", для обозначения порядковых номеров членов ряда, константы в математике.
Т. е. не константы, а переменные :)
Предпочитаю j не использовать, просто иногда визуально путает, как и l(L-маленькая).
Иногда пользуюсь x,y,z. Иногда a1,a2,a3. По ситуации.
Все вышеизложенное — известно давно и всем, и насчет нормально-называемых переменных\функций, и стиля написания кода (использование отступов и т.п.). Насчет комментариев, могу даже не согласиться, вернее не во всем согласиться, смотря что пишеш и для какого использования, комментируешь для себя или подразумевается что кто-то будет в этом копаться. Слишком много комментариев — излишне.
Внимательно см. название поста.
А я не внимательно смотрел? Иными словами, imho подобные посты плодят чайников а не наоборот.
Аргументируйте.
Мое мнение нужно стимулировать начинающих разработчиков к чтению официальной документации. В которой есть ВСЕ что нужно для грамотной разработки. И я уверен самые лучшие и эффективные идеи рождались не от чтения «мануала для чайников» а от работы собственного мозга. Её (документацию) и сейчас то далеко не все удосуживаются читать, и ответы на свои вопросы ищут не в простейших справочниках функций а уже в других местах. Чтобы написать гостевую, чайники теперь не читают справочник не догадываются сами что есть цикл for, что есть foreach. Это на мой взгляд и порождает тех самых «быдлокодеров», изобретателей велосипедов и т.д. Это во первых, а во вторых мне кажеться и тема то сама весьма избита, аля «20 ошибок программиста». Не хочу оскорбить ни автора ни кого бы то нибыло, я уважаю их труд по написанию и оформлению статьи.
Стимулировать нужно. Вот кто бы еще простимулировал разработчиков документации к методически эффективному изложению.
Ну простите))) это мешно просто)
Ничего смешного. В других отраслях это поняли.
Методические пособия != документация. А отраслей можно пример?
Методически эффективное изложение != методические пособия.
ничего нового
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории