LINUX.ORG.RU

Интересует ваше мнение по поводу использования {}

 


0

1

Тут возник спор с компанией, которая принимает мою работу, по поводу моего повсеместного использования {}

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

1) если используешь {} легче дебажить - для этого просто нужно вставить необходимую сроку внутрь блока, обычно хватает ctr+c. Если же не использовать их - то при поиске ошибок нужно все равно их вставлять, делать дополнительное форматирование и потом назад убирать - я считаю это дурной работой.

2) удобно группировать код при длинном листинге в моей любимой ide netbeans

3) уменьшается возможность глупой ошибки при удалении строки кода или когда лоханулся и не поставил ; Сразу получаешь ошибку.

Или я не прав?

неужели настолько ухудшается читаемость кода чтоб предъявлять претензии?

Перемещено JB из talks

★★

Последнее исправление: JB (всего исправлений: 4)

[ЖЫР]
begin
end.
[/ЖЫР]
Вот так гораздо лучше и читабельней.

StReLoK ☆☆
()
Последнее исправление: StReLoK (всего исправлений: 1)
Ответ на: комментарий от webmak

Нет. Он не адекватен. Хотя бы из-за дурного Coding Style. Если бы он требовал от тебя всюду ставить скобочки, а ты бы этого не делал, то адекватным был бы заказчик.

peregrine ★★★★★
()

Пора повышать самооценку. Шаг №1. Представь, что они все — говно.

anonymous
()
Ответ на: комментарий от proud_anon

goto fail.

Плюсую. Не надо экономить на символах когда это приводит к таким рискам. Впрочем, яббл спасла бы любая статическая проверка кода если бы они её использовали. Отсюла вторая беда: люди не используют линтеры и проверки :(.

true_admin ★★★★★
()
Ответ на: комментарий от webmak

Правильно! Значит больше не к чему было прикопаться, как к стилю. Требуй бабла, и шли их подальше.

nexfwall ★★★★
()
Последнее исправление: nexfwall (всего исправлений: 1)

возник спор с компанией ... неужели настолько ухудшается читаемость кода чтоб предъявлять претензии?

А что тебе в той компании ответили на этот вопрос?

APVS
()
Ответ на: комментарий от APVS

ну раз возник спор, значит минимум две точки зрения) моя - что не ухудшается и ихняя - ухудшается.

webmak ★★
() автор топика
Последнее исправление: webmak (всего исправлений: 2)
Ответ на: комментарий от webmak

изначально никто не требовал, а дали лиш ТЗ. Значит им было побарабану как выглядит код, а нужно решение.

Тогда повышай тариф. За увеличение трудоемкости выполнения задачи.

APVS
()
Ответ на: комментарий от nexfwall

Эх, я бы сказал что есть -Wall и clang-analyzer, но они оказались слабее чем я думал. В частности, случай с goto и вообще unreachable code у меня они не нашли.

Но splint с задачей справился. Это не coverity и не pvs-studio, но тоже неплохо. Потом, платные тулзени в том или ином виде можно получить во временное пользование. Уж прогнать проверку-то перед релизом можно.

Я каюсь, я сам зачастую пренебрегаю проверкой, но там где это действительно важно я вешаю pre-commit hook на линтер. Для питона это очень помогает.

true_admin ★★★★★
()
Последнее исправление: true_admin (всего исправлений: 1)
Ответ на: комментарий от Deleted

Код — это результат

Наркоман - еще мягко сказано :))) И главное, чувак пишет и не стесняется...

anonymous
()

Вопрос не технический, вопрос организационный. Решается принятыми в организации стандартами кодирования, плохи они или хороши.

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

hobbit ★★★★★
()

Странные заказчики. Насколько помню, и в MISRA, и в штатовских требованиях к ПО для авионики скобки обязательны. Я раньше тоже их не ставил, из эстетических соображений, но, когда в очередной раз влепил баг вида:

if (smth)
    do_smth();
    and_smth(); // добавил эту строку, забыв про скобки
— плюнул на эстетику и ставлю везде. Да, ошибка глупая и в нормальных условиях при внимательном редактировании допускается редко. Но — бывают случаи, когда код приходится править прямо на объекте, на ходу, мерзнущими пальцами и с недосыпа...

alegz ★★★★★
()
Последнее исправление: alegz (всего исправлений: 1)

Придерживаюсь того же мнения. Несколько раз сталкивался с совершенно глупыми ошибками в виде случайно установленного <;>. С тех пор стараюсь использовать блоки{}.

saibogo ★★★★
()

Предпочитаю.

if (true){
  blah;
}
или даже
if (true)
{
  blah;
}
Но рулит конечно соглашение о стиле кодирования принятое в фирме. Правда в паре фирм сам и составлял такой документ для народа.

Grindz
()
Последнее исправление: Grindz (всего исправлений: 1)

Если php, то http://www.php-fig.org/psr/psr-2/ же? http://www.php-fig.org/ тут список тех кто подписался, это считай все более-менее значимые php проекты. Посмотрел пример, С++, тут конечно да, когда доходит до стандарта кодирования то вокруг сплошное кряканье утят.

Tark ★★
()
Последнее исправление: Tark (всего исправлений: 1)

ИМХО.

Скобки это блок кода. А неблоков сейчас просто нет. И блок необходимо выделять. Не на ассемблере же в конце концов пишем. Да и там какбе принято выделять части кода (хотя бы пустыми строками).

Если программист считает, что вызов единственной подпрограммы типа форка или запуска подпроцесса это одно действие, то это не программист.

С другой стороны простое присваивание (элементарному типу, такому как int) вроде бы не должно требовать блока кода... Но тогда его можно заменить условным оператором ?:. Нахера городить if?

Про циклы я вообще молчу - это всегда блоки кода.

Так что тут я не вижу спора между опытными программистами «юзать скобки везде или как». Я вижу молодых и зелёных, которые пытаются бороться с опытом старших из-за играющего гормона. Со временем это проходит. К сожалению до прохождения новички успевают наследить в жж, швабре и подобных помойках. В результате новое поколение получает мифическое подтверждение своим мыслям и бросается в бой с большими силами.

ziemin ★★
()

Тут возник спор с компанией, которая принимает мою работу, по поводу моего повсеместного использования {}

очень удобно ИМХО {}

int i=17;

// Over9000 строк

i++;// хрен поймёшь ☹
emulek
()
Ответ на: комментарий от morse

Они — заказчики, ты — исполнитель. Те не прав априори.

пусть этот говнокод кто-то другой поддерживает, тогда нормально.

emulek
()
Ответ на: комментарий от webmak

по офомрлению кода.

это НЕ ОФОРМЛЕНИЕ.

{

//

}// нету кода? сюрприз, выполняется деструкторы.
в обычной сишке такого не бывает, освободить немного int'ов недорого.

emulek
()
Ответ на: комментарий от webmak

Указанные сроки сдержал - все работает - не устраивает только код. Его править нехочу и вообще ближайшие два дня вообще работать не хочу.

а потом понадобится новая фича, и ВНЕЗАПНО заломят немалую цену ибо говнокод правится сложно. Т.ч. ты неправ.

emulek
()

Анонимус имеет мнение

что в питоне такой фигни не было бы.

anonymous
()
Ответ на: комментарий от Tark

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

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

Но там если прочитать - то не конторы, а стотрудники тех контор подписались)

webmak ★★
() автор топика
Последнее исправление: webmak (всего исправлений: 2)
Ответ на: комментарий от Tark

и пробив по гуглу имя сотрудника интересующей меня конторы - всплывает коммик, а не авторитетный программист(

webmak ★★
() автор топика
Ответ на: комментарий от webmak

Это да, но я погуглил предварительно, там большинство контор поддерживают PSR-2, либо стандарт основанный на нем, что конечно хуже.

Tark ★★
()
Ответ на: комментарий от ziemin

Но тогда его можно заменить условным оператором ?:. Нахера городить if?

типа этого?

SELECT crs.id_cart_rule
			FROM '._DB_PREFIX_.'cart_rule_shop crs
			WHERE crs.id_cart_rule = '.(int)$this->id.'
			AND crs.id_shop = '.(int)$context->shop->id);
			if (!$id_cart_rule)
				return (!$display_error) ? false : Tools::displayError('You cannot use this voucher');

и насколько там веселья вырастит?

Это я нашел еще короткий кусок, а там есть и длинные, сделать ошибку как два пальца.

webmak ★★
() автор топика
Ответ на: комментарий от webmak

Это я нашел еще короткий кусок, а там есть и длинные, сделать ошибку как два пальца.

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

Хотя ладно. Так уж и быть буду считать тебя школьником.

ziemin ★★
()
Ответ на: комментарий от ziemin

Считай как хочеш. Читается нормально. Я говорю об увеличении вероятности сделать ошибку, оссобено когда внутри этого еще делать конкатенацию строк(

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

И опять же неудобства при отлове ошибок - все равно нужно ставить скобки, а потом возвращать все в сад.

webmak ★★
() автор топика
Последнее исправление: webmak (всего исправлений: 1)
Ответ на: комментарий от ziemin

вот вариант веселее

SELECT `quantity`
			FROM `'._DB_PREFIX_.'customization`
			WHERE `id_cart` = '.(int)$this->id.'
			AND `id_product` = '.(int)$id_product.'
			AND `id_product_attribute` = '.(int)$id_product_attribute.'
			'.((int)$id_address_delivery ? 'AND `id_address_delivery` = '.(int)$id_address_delivery : ((int)$customer_address->id ? 'AND `id_address_delivery` = '.(int)$customer_address->id : '')));

и в подобном, я еще циклы встречал

не знаю как тебе, но это мне уже тяжело читать, нужно четко ориентироватся по скобкам.

webmak ★★
() автор топика
Последнее исправление: webmak (всего исправлений: 3)
Ответ на: комментарий от webmak
SELECT `quantity`
			FROM `'._DB_PREFIX_.'customization`
			WHERE `id_cart` = '.(int)$this->id.'
			AND `id_product` = '.(int)$id_product.'
			AND `id_product_attribute` = '.(int)$id_product_attribute.'
			'.((int)$id_address_delivery ? 'AND `id_address_delivery` = '.(int)$id_address_delivery : ((int)$customer_address->id ? 'AND `id_address_delivery` = '.(int)$customer_address->id : '')));

Это не реальное выражение. Пропущена кавычка. Как я на это должен реагировать?

ziemin ★★
()
Последнее исправление: ziemin (всего исправлений: 1)
Ответ на: комментарий от webmak

такой vendor lock in? А если им просто тупо код не собрать на новый сервер?

emulek
()
Ответ на: комментарий от imul

полистай выше: при } в C++ выполняется деструктор того, что внутри. Ну и вообще, если существование переменной ограничено блоком, вероятность того, что переменная выше(ниже) как-то юзалась равна нулю. Т.ч. блоки избавляют от неожиданностей.

emulek
()
Ответ на: комментарий от imul

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

что значит «не годится»?

emulek
()

Смотря в каком языке, смотря в каком случае, смотря как писать. Куда лучше смотрится:

if (err) return next(err);
чем
if (err) {
  return next(err);
}
Но в данном примере оба варианта смотрятся нормально и вполне читабельно. Просто дело вкуса.

Но, например, дико бесит вот такое:

// какой-то код
if (true) {
  // какой-то код
  if (true) {
    // какой-то код
    if (true) {
      // какой-то код
      if (true) {
        // какой-то код
      }
    }
  }
}
return false;
вместо того, чтобы писать линейно и без вложенности:
// какой-то код

if (!true) return false;

// какой-то код

if (!true) return false;

// какой-то код

if (!true) return false;

// какой-то код

Black_Roland ★★★★
()
Последнее исправление: Black_Roland (всего исправлений: 2)
Ответ на: комментарий от webmak

а теперь их тим лид начал выпендриватся, что мол я херово код оформил. Я собственнику все объяснил, он все принял.

Да и пусть выпендривается, чем бы дитя не тешилось... Главное, что сделал всё как надо и что приняли работу. Обидно, конечно, но тебе же не детей с ними крестить.

sT331h0rs3 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.