Как выполнить сразу два события jquery [duplicate]

Да. Если вы вызываете вызов ThreadA, тогда не нужно вызывать метод start, а метод run - это вызов после вызова класса ThreadA. Но если использовать ThreadB-вызов, тогда необходимо создать начальный поток для метода вызова. Если у вас есть дополнительная помощь, ответьте мне.

165
задан 5 revs, 4 users 80% 19 August 2016 в 17:07
поделиться

27 ответов

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

Линии (почти) свободны, минимизируя количество строк в вашем коде, не должны быть объективными .

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

173
ответ дан 2 revs 19 August 2018 в 05:26
поделиться
  • 1
    Конечно, это очень субъективно. Оставляя их когда-то, улучшается читаемость. – Brian Knoblauch 11 December 2008 в 16:50
  • 2
    Правда, если я когда-либо покидаю скобки, я держу одну линию, как говорили другие. Я был укушен слишком много раз, но несколько строк безрезультатно. Даже если вы знаете, что нужно это сделать, он все равно может вас достать. – James McMahon 11 December 2008 в 16:54
  • 3
    Конечно, это грубо, но я думаю, что самая большая проблема для сопровождающих - это то, что они добавят вторую строку и не поймут, что это не является частью условного оператора, даже если это ДЕЙСТВИТЕЛЬНО выглядит так, как должно быть. – danieltalsky 12 December 2008 в 06:48
  • 4
    Мне не нравится один стиль лайнера, потому что я всегда ищу тело цикла ниже. – Nosredna 19 June 2009 в 01:28
  • 5
    Как бывший программист на Java, я должен полностью согласиться с автоматическим форматированием, являющимся реальным ответом на проблему. Вам даже не нужно, чтобы ваш редактор автоматически добавлял фигурные скобки - автоматическое отступы сами по себе могут помочь избежать неоднозначностей. Конечно, теперь, когда я переключился на Python, я стал использоваться для форматирования моего кода в первую очередь. – Alan Plum 5 February 2010 в 01:04
  • 6
    Я считаю, что стиль с одним лайнером более раздражает, чем полезен, потому что (особенно в глубоком гнездовании - тьфу) утверждение может быть легко преодолено, и может возникнуть путаница. Я почти исключительно использую такие однозадачные ifs для проверки ввода (то есть ранние возвращения) или управления контуром (например, игнорирование нерелевантных имен файлов в проходах файловой системы), хотя пустые строки помогают отключить их от основного кода. – Alan Plum 5 February 2010 в 01:10
  • 7
    Я не понимаю. У вас есть переменная, которая управляет отладкой (debugEnabled), и вы все еще используете комментарии для отключения отладки ??? Почему вы не установили debugEnabled в false? – Igor Popov 26 December 2010 в 15:30
  • 8
    Я чувствую то же самое о брекетах. Все дело в сложности. В идеале у нас будет только один блок. Это то, что я называю читабельностью, а не ненужными скобками. – Igor Popov 26 December 2010 в 15:43
  • 9
    Это не совсем сценарий, но вы делаете хороший момент. Глупые вещи (например, не установка отладки в false) действительно создают тонкие и глупые ошибки, которые сложнее найти, чем «очевидные». ошибок. В этом случае использование брекетов не помогло. – OscarRyz 27 December 2010 в 21:37
  • 10
    Однострочный стиль также скрывает панель () от охвата тестирования. Это будет выглядеть даже если foo всегда ложно. – Bohumil Janda 13 November 2013 в 12:02
  • 11
    Это еще один способ сказать: «если бы источник включал фигурные скобки, я бы не потратил время во время отладки». - добавление брекетов тривиально просто и позволяет избежать ловушек для следующего человека. Единственный аргумент против «читаемости», которая довольно незначительна, учитывая, что это случай, когда что-то неявно происходит, если вы их опустите. – Andrew Theken 28 August 2014 в 14:28
  • 12
    @igor Как насчет того, что они просто хотели удалить одну строку регистрации не всех строк ведения журнала? – gman 24 March 2017 в 06:10
174
ответ дан 2 revs 30 October 2018 в 17:23
поделиться
174
ответ дан 2 revs 30 October 2018 в 17:23
поделиться

Скорость чтения ...

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

if (condition)
{
    DoSomething();
}

DoSomethingElse();

Чуть быстрее, чем я читал:

if (condition) DoSomething();

DoSomethingElse();

Я читал его немного медленнее, если он выглядит так:

if (condition) DoSomething();
DoSomethingElse();

Я читал это значительно медленнее, чем предыдущее:

if (condition) 
    DoSomething();
DoSomethingElse();

, потому что я не могу не прочитать его снова вслух и удивляться, если автор намеревался:

if (condition)
{
    DoSomething();
    DoSomethingElse();
}

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

if (condition) 
    DoSomething();
    DoSomethingElse();
153
ответ дан 2 revs 19 August 2018 в 05:26
поделиться
  • 1
    Конечно, это очень субъективно. Оставляя их когда-то, улучшается читаемость. – Brian Knoblauch 11 December 2008 в 16:50
  • 2
    Правда, если я когда-либо покидаю скобки, я держу одну линию, как говорили другие. Я был укушен слишком много раз, но несколько строк безрезультатно. Даже если вы знаете, что нужно это сделать, он все равно может вас достать. – James McMahon 11 December 2008 в 16:54
  • 3
    Я не понимаю, почему это было понижено, это экономит одну строку для каждой пары кронштейнов, которые я использую все время – Eric 12 December 2008 в 00:08
  • 4
    Конечно, это грубо, но я думаю, что самая большая проблема для сопровождающих - это то, что они добавят вторую строку и не поймут, что это не является частью условного оператора, даже если это ДЕЙСТВИТЕЛЬНО выглядит так, как должно быть. – danieltalsky 12 December 2008 в 06:48
  • 5
    Это более широко известно как стиль K & amp; R. Основываясь на книге «Язык программирования C» Кернигана и Ричи: ru.wikipedia.org/wiki/The_C_Programming_Language_ (книга) . И это не должно вас устраивать. – jmucchiello 19 December 2008 в 04:05
  • 6
    Благодаря! Я подумал, что это был просто личный вкус. Я использовал этот синтаксис, раздражающий себя, но я принял его после прочтения Code Complete и действительно наслаждаюсь этим сейчас. – Nathan Prather 9 January 2009 в 17:57
  • 7
    Мне не нравится один стиль лайнера, потому что я всегда ищу тело цикла ниже. – Nosredna 19 June 2009 в 01:28
  • 8
    я читал все ответы выше этого мышления и почему никто еще этого не предложил? & quot; Это приводит к тому, что замыкающий кронштейн выравнивается с блоком, который он закрывает, то есть «если» или "while" и т. д., а не бессмысленный "{". +1. – nickf 19 June 2009 в 01:39
  • 9
    Проблема решена, когда в вашем 4-м примере вы просто положили пустую строку после того, как оператор будет отделять ее от DoSomethingElse (). Это то, что я делаю, и читаемость практически такая же, как и в первом примере (если не лучше; -P) Другое дело, что размещение строк в группах по 2 или 3 значительно облегчает читаемость, вы просто просматриваете код намного быстрее. – Piotr Owsiak 19 August 2009 в 01:17
  • 10
    Может быть, это потому, что я привык к Python, но вставляя первую фигурную фигуру в ту же строку, что и оператор if, позволяет мне читать + понимать это еще быстрее. – Ponkadoodle 24 January 2010 в 03:30
  • 11
    Проблема с бесхитростным стилем заставляет вас тратить драгоценную концентрацию на размышления о том, есть ли у блока брекеты, а не более важные вещи. Это само по себе является достаточно хорошей причиной для использования простейшего возможного соглашения, которое всегда является скобкой. – Nate C-K 5 February 2010 в 01:02
  • 12
    Как бывший программист на Java, я должен полностью согласиться с автоматическим форматированием, являющимся реальным ответом на проблему. Вам даже не нужно, чтобы ваш редактор автоматически добавлял фигурные скобки - автоматическое отступы сами по себе могут помочь избежать неоднозначностей. Конечно, теперь, когда я переключился на Python, я стал использоваться для форматирования моего кода в первую очередь. – Alan Plum 5 February 2010 в 01:04
  • 13
    Я считаю, что стиль с одним лайнером более раздражает, чем полезен, потому что (особенно в глубоком гнездовании - тьфу) утверждение может быть легко преодолено, и может возникнуть путаница. Я почти исключительно использую такие однозадачные ifs для проверки ввода (то есть ранние возвращения) или управления контуром (например, игнорирование нерелевантных имен файлов в проходах файловой системы), хотя пустые строки помогают отключить их от основного кода. – Alan Plum 5 February 2010 в 01:10
  • 14
    Я не понимаю. У вас есть переменная, которая управляет отладкой (debugEnabled), и вы все еще используете комментарии для отключения отладки ??? Почему вы не установили debugEnabled в false? – Igor Popov 26 December 2010 в 15:30
  • 15
    Я чувствую то же самое о брекетах. Все дело в сложности. В идеале у нас будет только один блок. Это то, что я называю читабельностью, а не ненужными скобками. – Igor Popov 26 December 2010 в 15:43
  • 16
    Это не совсем сценарий, но вы делаете хороший момент. Глупые вещи (например, не установка отладки в false) действительно создают тонкие и глупые ошибки, которые сложнее найти, чем «очевидные». ошибок. В этом случае использование брекетов не помогло. – OscarRyz 27 December 2010 в 21:37
  • 17
    Скобки являются явными по своей природе. Я буду придерживаться этого, спасибо. – TheOptimusPrimus 4 September 2013 в 15:39
  • 18
    В последнем случае выследите оригинального автора и отшлепайте его ...;) – Per Lundberg 6 November 2013 в 22:37
  • 19
    Однострочный стиль также скрывает панель () от охвата тестирования. Это будет выглядеть даже если foo всегда ложно. – Bohumil Janda 13 November 2013 в 12:02
  • 20
    Если открытые фигурные скобки всегда помещаются в строки сами по себе, тогда if, за которым следует одна отступы, может быть визуально распознано как управление одним утверждением без каких-либо привязок. Таким образом, стиль open-brace-by-yourself сохраняет пробелы в ситуации, когда оператор if управляет тем, что семантически является одним действием (в отличие от последовательности шагов, которая состоит только из одного шага). Например, if (someCondition) / `throw new SomeException (...)`. – supercat 15 August 2014 в 16:29
  • 21
    Это еще один способ сказать: «если бы источник включал фигурные скобки, я бы не потратил время во время отладки». - добавление брекетов тривиально просто и позволяет избежать ловушек для следующего человека. Единственный аргумент против «читаемости», которая довольно незначительна, учитывая, что это случай, когда что-то неявно происходит, если вы их опустите. – Andrew Theken 28 August 2014 в 14:28
  • 22
    @igor Как насчет того, что они просто хотели удалить одну строку регистрации не всех строк ведения журнала? – gman 24 March 2017 в 06:10

Я иногда использую самый нижний код (несколько с помощью операторов), но кроме этого я всегда добавляю фигурные скобки. Я просто нахожу, что он делает код более понятным. Это явно очевидно из большего, чем просто отступа, что оператор является частью блока (и, следовательно, вероятно, является частью if и т. Д.).

Я видел укус

if (...)
    foo();
    bar();

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

Конечно, если вы используете «скобки в конце строки», это уменьшает лишние строки, но мне лично не нравится этот стиль в любом случае. (Я использую его на работе и считаю его менее неприятным, чем я ожидал, но это все еще немного неприятно.)

10
ответ дан 2 revs, 2 users 95% 19 August 2018 в 05:26
поделиться
  • 1
    Я всегда утверждаю, что согласованность важнее фактического стиля, почему мы должны делать исключение только в случае использования? – Bob 11 December 2008 в 16:58
  • 2
    @Bob: Хорошая мысль, и я делаю это только время от времени. Я не хотел бы притворяться, что у меня есть фактические причины. На самом деле, есть разумная причина: вложенность (и только в том, что касается использования) довольно очевидна, и вы все равно получаете a блок. Я не могу сразу увидеть опасность. – Jon Skeet 11 December 2008 в 17:05
  • 3
    Это не означает, что не любая опасность, конечно. – Jon Skeet 11 December 2008 в 17:06
  • 4
    Лучшее решение этой ошибки: используйте Python. (Шучу, конечно.) – Joel Wietelmann 11 December 2008 в 18:28

Хорошо, это старый вопрос, на который был дан ответ на смерть. Мне есть что добавить.

Сначала я просто должен сказать ИСПОЛЬЗОВАТЬ БРАКЫ. Они могут помочь только читабельности, а читаемость (для вас самих и для других!) Должна быть очень высокой в ​​списке приоритетов, если вы не пишете сборку. Нечитаемый код всегда, всегда приводит к ошибкам. Если вы обнаружите, что фигурные скобки заставляют ваш код занимать слишком много места, ваши методы, вероятно, слишком велики. [Или g1]

Теперь для моего добавления: Существует проблема с этим:

Теперь, если вы делаете это правильно, g2]

if (foo) bar();

Попробуйте установить точку останова, которая будет нажата, только если bar () будет запущен. Вы можете сделать это на C #, поместив курсор во вторую половину кода, но это не очевидно и немного больно. В C ++ вы не могли этого сделать вообще. По этой причине один из наших самых старших разработчиков, работающих над кодом на C ++, настаивает на том, чтобы по этой причине разбивать «if» заявления на две строки. И я согласен с ним.

Так сделайте это:

if (foo)
{
    bar(); //It is easy to put a breakpoint here, and that is useful.
}
10
ответ дан 3 revs 19 August 2018 в 05:26
поделиться
  • 1
    Плохие примеры. В обоих случаях я бы включил эту линию 200 в цикл в свой собственный метод или, желательно, несколько методов. – Adam Jaskiewicz 11 December 2008 в 17:02
  • 2
    Правда, но это происходит. Кроме того, в любой момент, когда блок больше, чем у экрана читателя, вы получите эту проблему. И вы не можете контролировать высоту экрана вашего считывателя кода. Они могли видеть только пару строк с каждой стороны. – rampion 11 December 2008 в 17:45
  • 3
    Это происходит. Это не означает, что должен произойти. – Adam Jaskiewicz 11 December 2008 в 18:48
  • 4
    Щелкните правой кнопкой мыши на панели и выберите Вставить точку останова ... Не сложно. Знай свои инструменты. – Bob 19 June 2009 в 01:50
  • 5
    Щелчок правой кнопкой мыши на индикаторной панели ничего не делает; вы имеете в виду щелчок правой кнопкой мыши по тексту? В любом случае, если вы хотите, чтобы точка останова была нажата, когда «if» утверждение верно, и "bar ()" находится в отдельной строке, вы можете поместить курсор в любую точку этой строки и нажать F9, или щелкните левой кнопкой мыши по значению поля. Если, однако, весь код находится в одной строке, вы должны поместить курсор на строку () & quot; или щелкните правой кнопкой мыши именно там, прежде чем нажимать F9, и щелчок по краю индикатора не будет работать (помещает точку останова на «если»). Это не «сложно», но это требует меньшей концентрации, когда код находится на двух строках. – stone 19 June 2009 в 20:36
  • 6
    О, ха-ха, щелкните правой кнопкой мыши на & quot; bar (). & Quot; Вы имели в виду текст. Попался. Конечно, или просто нажмите F9 ... – stone 19 June 2009 в 20:40
  • 7
    & gt; & gt ;, вы должны поместить курсор на & quot; bar () & quot; или щелкните правой кнопкой мыши именно там, прежде чем нажимать F9 (я имел в виду положение курсора именно там, прежде чем нажимать F9 или щелкнуть правой кнопкой мыши) – stone 19 June 2009 в 20:42
  • 8
    @AdamJaskiewicz Право. Это происходит. Мы должны думать о том, что делает , а не о том, что должно . Если бы мы могли ограничиться тем, что должно , нам не нужно будет беспокоиться о ошибках. – Beska 16 August 2012 в 13:45

Если это что-то маленькое, напишите его следующим образом:

if(foo()) bar();

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

52
ответ дан Adam Jaskiewicz 19 August 2018 в 05:26
поделиться
  • 1
    да, это то, что я тоже делаю. Это заставляет вас добавлять фигурные скобки, если вы добавляете еще одну строку, и довольно ясно видеть, что bar () на самом деле является частью if, так что плохие вещи произойдут, если вы просто прокомментируете это. – jalf 11 December 2008 в 17:37
  • 2
    Тем не менее, это не очень дружелюбный к отладчику. Как настроить точку останова на панели «quot»? часть? – Nemanja Trifunovic 11 December 2008 в 20:17
  • 3
    @Nemanja: просто наведите курсор на bar (); и нажмите F9. Оба VS2005 и VS2008 обрабатывают точки прерывания внутри линии, если они являются отдельными «операторами». – GalacticCowboy 11 December 2008 в 20:52
  • 4
    GalanticCowboy: Есть больше условий, чем вы знаете. :-) – user 11 December 2008 в 23:25
  • 5
    Конечно, но поскольку контекст C #, это должно охватывать значительную часть пользователей ... – GalacticCowboy 12 December 2008 в 01:18

Я согласен с тем, что «если вы достаточно умны, чтобы заставить кого-то платить вам за код, вы должны быть достаточно умны, чтобы не полагаться исключительно на отступ, чтобы увидеть поток кода».

Однако ... ошибки могут быть сделаны, и эта боль - это отладка ... особенно если вы смотрите на чужой код.

10
ответ дан chills42 19 August 2018 в 05:26
поделиться

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

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

if(x < y)
    x = y;
else
    y = x;

И еще один такой:

if(x < y)
{
    x = y;
    x++;
}
else
{
    y = x;
    y++;
}

Я предпочитаю просто выбрать один общий стиль и придерживаться его:)

8
ответ дан Christopher McAtackney 19 August 2018 в 05:26
поделиться

Допустим, у вас есть код:

if (foo)
    bar();

, а затем кто-то еще приходит и добавляет:

if (foo)
    snafu();
    bar();

Согласно тому, как это написано, bar (); теперь выполняется безоговорочно. Включая фигурные скобки, вы предотвращаете такую ​​случайную ошибку. Код должен быть написан таким образом, чтобы сделать такие ошибки сложными или невозможными. Если бы я делал обзор кода и видел отсутствующие фигурные скобки, особенно разбросанные по нескольким строкам, я бы создал дефект. В тех случаях, когда это оправдано, держите его на одной линии, чтобы вероятность сделать такую ​​ошибку снова сведена к минимуму.

6
ответ дан Elie 19 August 2018 в 05:26
поделиться
  • 1
    Этот вопрос уже был сделан в этом вопросе. – Mike Scott 11 December 2008 в 16:46
  • 2
    На самом деле не совсем. Да, он упомянул о возможностях такого рода ошибок, но я говорил о том, чтобы сделать ваш код ошибкой и устранить вероятность ошибки как часть лучших практик. – Elie 11 December 2008 в 16:50
  • 3
    Есть ли такая вещь, как код ошибки? – Bob 11 December 2008 в 16:56
  • 4
    @Bob, только в RAID-системах. – Robert S. 11 December 2008 в 16:58
  • 5
    Нет, но вы можете усложнить ситуацию. Читайте «Лучшие секреты обзора коллегиального обзора». Джейсон Коэн (см. ссылку на стороне некоторых страниц здесь), чтобы лучше понять, почему вы это делаете. – Elie 11 December 2008 в 17:07

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

Еще одна веская причина всегда используя фигурные скобки, помимо того, что кто-то добавляет второй оператор в if, может произойти что-то подобное:

if(a)
   if(b)
     c();
else
   d();

Вы заметили, что предложение else на самом деле относится к «if (b)»? Вы, вероятно, сделали это, но можете ли вы кому-либо быть знакомы с этой информацией?

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

45
ответ дан FredV 19 August 2018 в 05:26
поделиться
  • 1
    Это один из двух случаев, когда я использую фигурные скобки. В противном случае нет. – Andrei Rînea 17 December 2008 в 02:56
  • 2
    Это должно быть написано так, как будто (a & amp; b) ... во-первых, имеет значение. – alexander.biskop 20 February 2013 в 12:55
  • 3
    @ alexander.biskop: Конечно, нет, поскольку это дает else блокировать другое значение (!a || !b), чем либо с (!a), либо без (a && !b) добавленных фигурных скобок. – Ben Voigt 30 July 2013 в 19:47
  • 4
    @Ben Voigt: Верно! Попал на это ;-) Половина года и два назад, кто-то осознает, что я сделал неправильно ... Думаю, я не уделял достаточного внимания деталям, главным образом потому, что намерение, стоявшее за моим комментарием, было иным, чем указание технически правильное преобразование этого if-предложения. Я имел в виду, что вложенные inline if-утверждения обычно уменьшают удобочитаемость (и особенно прослеживаемость потока управления) значительно imho и, следовательно, скорее следует объединить в одно утверждение (или вообще обойти). ура – alexander.biskop 30 July 2013 в 20:39
  • 5
    @ alexander.biskop: В то же время отладка проще с вложенными ifs с более простыми условиями, поскольку вы можете сделать один шаг на каждом. – Ben Voigt 30 July 2013 в 20:42

Чтобы быть тупым, я вижу это как:

Хорошие программисты програмируют оборону, Bad программисты этого не делают.

Так как есть несколько примеров выше, и мой собственный подобный опыт с связанными ошибками чтобы забыть скобки, я узнал, как трудно ВСЕГДА ОТКРЫТЬ БРАКЫ.

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

Джоэл даже упоминает об этом в Нарушение неправильного кода

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

13
ответ дан gman 19 August 2018 в 05:26
поделиться
  • 1
    Если открытые фигурные скобки помещаются на линии сами по себе, то любое место, в котором две или более строк отступаются без пары скобок, будет выглядеть неправильно, равно как и любая несогласованная скобка. Такое использование будет стоить пустую строку в тех случаях, когда оператор if управляет блоком, но избегает необходимости в блоке в случаях, когда оператор if управляет одним действием, а не блоком. – supercat 15 August 2014 в 16:32

Линии дешевы. Мощность процессора дешева.

Как правило, если я не разрабатываю какое-то абсолютно критичное для ресурса / скорость приложение, я бы всегда ошибался на стороне написания кода, который является

( a) Легко для любого другого разработчика следить за тем, что я делаю

(b) Комментировать определенные части кода, которые могут ему понадобиться

(c) Легко отлаживать, если что-то пойдет не так

(d) Легко модифицировать, если это необходимо в будущем (например, добавление / удаление кода)

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

Отключив фигурные скобки в большинстве случаев, для меня это делает (b), (c) и (d) более сложно (отметим, что это не невозможно). Я бы сказал, что использование фигурных скобок или нет не влияет на (a).

33
ответ дан Jayden 19 August 2018 в 05:26
поделиться
  • 1
    Ваше последнее утверждение о (а) - мнение, что большое количество разработчиков, включая другие плакаты здесь, будут спорить. – Kelly S. French 7 August 2012 в 16:35

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

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

Если у меня есть однострочный , Я обычно форматирую его следующим образом:

if( some_condition ) { do_some_operation; }

Если строка слишком громоздка, то используйте следующее:

if( some_condition )
{
    do_some_operation;
}
3
ответ дан Jordan Parmer 19 August 2018 в 05:26
поделиться

В большинстве случаев он укореняется в качестве стандарта кодирования, будь то для компании или проекта FOSS.

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

Также представьте, что кто-то идет между Python и языком Cish более одного раза в день ... В Python отступ является частью блок-симпозиумы языка, и было бы довольно легко сделать ошибку, как вы цитируете.

4
ответ дан joshperry 19 August 2018 в 05:26
поделиться
  • 1
    +1 для комментария о python. Я всегда удивляюсь, как «глупо» Я могу быть, когда постоянно переключаюсь между языками. – Kena 11 December 2008 в 17:22

Используйте какое-то личное мнение.

if (foo)
  bar();

отлично работает. Если вы действительно не беспокоитесь о том, что идиоты вносят что-то подобное позже:

if (foo)
  bar();
  baz();

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

Взамен это намного более читаемо.

Остальное время:

if (foo) {
  bar();
  baz();
}

Который был моим фаворитом, насколько я помню. Дополнительно:

if (foo) {
  bar();
  baz();
} else {
  qux();
}

Работает для меня.

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

7
ответ дан lally 19 August 2018 в 05:26
поделиться
  • 1
    Единственный раз, когда я предпочитаю первый стиль, - это когда мне нужно немедленно вернуться или выбросить ошибку, если что-то не так. Как if (parameter == null) return null;. – nawfal 3 February 2014 в 20:12

Я был большим сторонником «фигурных скобок - это НЕОБХОДИМО!», но, начиная с принятия модульного тестирования, я обнаружил, что мои модульные тесты защищают бесцельные заявления из сценариев, таких как:

if (foo)
    snafu();
    bar();

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

В качестве альтернативы, для чего-то вроде выше, я бы предположил, что это выглядит так:

if (foo) snafu();

Таким образом, разработчик, которому нужно добавить bar () в условие, будет более склонным распознавать отсутствие фигурных скобок и добавить их.

7
ответ дан Liggy 19 August 2018 в 05:26
поделиться
  • 1
    Вы сказали «Мне это не нужно». затем дал повод для его использования: читаемость! – tvanfosson 11 December 2008 в 16:50
  • 2
    Я бы не стал полагаться на Unit Test, чтобы найти это. Возможно, LINT, Unit test no! – Kristen 28 February 2009 в 08:00
  • 3
    @Kristen - Идея модульного теста заключается в утверждении поведения метода. Если поведение изменится (как описано выше), произойдет единичный тест. Я не вижу в этом проблемы. – Liggy 27 November 2009 в 15:05
  • 4
    Но зачем полагаться на Unit Test, чтобы забрать очевидное, что должно быть исправлено перед выходом в UT? – Andrew 27 September 2012 в 11:24

Я думаю, что это вопрос руководящих принципов для проекта, над которым вы работаете, и личного вкуса.

Я обычно опускаю их, когда они не нужны, за исключением некоторых случаев, подобных следующим:

if (something)
    just one statement; // i find this ugly
else
{
    // many
    // lines
    // of code
}

Я предпочитаю

if (something)
{
    just one statement; // looks better:)
}
else
{
    // many
    // lines
    // of code
}
22
ответ дан Maghis 19 August 2018 в 05:26
поделиться

Это не всегда считается плохой практикой. Mono Project Coding Guidelines предлагает не использовать фигурные скобки, если это необязательно. То же самое для стандартов кодирования GNU . Я думаю, что это вопрос личного вкуса, как всегда, со стандартами кодирования.

35
ответ дан Manuel Ceron 19 August 2018 в 05:26
поделиться
  • 1
    Глядя на код Mono кажется мне foreign мне после прочтения всего руководства. – Sung Kim 23 October 2009 в 04:44
  • 2
    +1 для информационных – sehe 25 April 2011 в 21:41

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

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

Я вижу это как аргумент для if ( foo == 0 ) vs if ( 0 == foo ). Последнее может предотвратить ошибки для новых программистов (и, возможно, даже изредка для ветеранов), в то время как первое проще быстро читать и понимать, когда вы поддерживаете код.

5
ответ дан Marc Charbonneau 19 August 2018 в 05:26
поделиться

Я очень доволен:

foreach (Foo f in foos)
  foreach (Bar b in bars)
    if (f.Equals(b))
      return true;

return false;

Лично я не понимаю, почему

foreach (Foo f in foos)
{
  foreach (Bar b in bars)
  {
    if (f.Equals(b))
    {
      return true;
    }
  }
}

return false;

читаем больше.

Да, строки бесплатны, но почему мне приходится прокручивать страницы и страницы кода, когда это может быть вдвое меньше?

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

Кроме того, я всегда помещает скобки для вложенных if, где у меня есть вложенный

if (condition1)
  if (condition2)
    doSomething();
  else (condition2)
    doSomethingElse();

vs

if (condition1)
  if (condition2)
    doSomething();
else (condition2)
  doSomethingElse();

ужасно запутанно, поэтому я всегда пишу его как:

if (condition1)
{
  if (condition2)
    doSomething();
  else (condition2)
    doSomethingElse();
}

По возможности я использую тернарные операторы, но I never гнездятся в них .

13
ответ дан Ozzah 19 August 2018 в 05:26
поделиться
  • 1
    просто видел, что это почти происходит в моем коде :) понял, что я посмотрю вокруг, и вот и вот ... это уже там :) – Noctis 21 November 2014 в 03:00

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

6
ответ дан plinth 19 August 2018 в 05:26
поделиться

Одной из основных проблем является то, что у вас есть области однострочных и не-одного лайнеров, а также разделение с контрольным статусом (for, if, что у вас есть) и конец статута.

Например:

for (...)
{
  for (...)
    for (...) 
    {
      // a couple pages of code
    }
  // which for block is ending here?  A good text editor will tell you, 
  // but it's not obvious when you're reading the code
}
7
ответ дан rampion 19 August 2018 в 05:26
поделиться
  • 1
    Почему в любом случае у вас есть пара страниц кода в цикле for? – Adam Jaskiewicz 11 December 2008 в 17:04
  • 2
    b / c Я нечувствительный ком, и я одержим тем, что избавляюсь от «стоимости». вызовов функций. :) – rampion 11 December 2008 в 17:43
  • 3
    Обычно пара страниц кода должна быть в отдельной функции. – Jonathan Leffler 11 December 2008 в 21:10
  • 4
    извините, я имел в виду, что я играл роль такого комья. Тем не менее, я считаю, что та же проблема может возникать для более коротких регионов, если смотреть через небольшой видовой экран. И это вне контроля кодера. – rampion 12 December 2008 в 04:15

Один из примеров, когда это может вас укусить, - это в старые времена макросов C / C ++. Я знаю, что это вопрос C #, но часто стандарты кодирования переносятся без оснований, по которым стандарт был создан в первую очередь.

Если вы не очень осторожны при создании своих макросов, вы можете закончить что вызывает проблемы с операторами if, которые не используют {}.

#define BADLY_MADE_MACRO(x) function1(x); function2(x);

if (myCondition) BADLY_MADE_MACRO(myValue)

Теперь, не поймите меня неправильно, я не говорю, что вы всегда должны {} просто избегать этого проблема в C / C ++, но из-за этого мне пришлось иметь дело с некоторыми очень странными ошибками.

15
ответ дан Torlack 19 August 2018 в 05:26
поделиться
  • 1
    если только весь код объявил себя таковым ... sigh – Nathan Strong 12 December 2008 в 00:17

Я предпочитаю ясность, которую предлагает фигурная скобка. Вы точно знаете, что имеется в виду, и не нужно догадываться, если кто-то просто ушел и оставил их (и представил ошибку). Единственный раз, когда я опускаю их, я устанавливаю if и action в одной строке. Я тоже не очень часто это делаю. Я фактически предпочитаю, чтобы пробелы вводились, вставляя фигурные скобки в свою линию, хотя из-за лет программирования K & amp; R C, заканчивая линию с помощью скобки, я должен работать, чтобы преодолеть, если среда IDE не обеспечивает это для меня.

if (condition) action();  // ok by me

if (condition) // normal/standard for me
{
   action();
}
35
ответ дан tvanfosson 19 August 2018 в 05:26
поделиться

Из трех условных обозначений:

if(addCurleyBraces()) bugFreeSofware.hooray();

и:

if(addCurleyBraces())
    bugFreeSofware.hooray();

и (которые представляют собой любой стиль отступа с использованием открытия и закрывающей скобки):

if(addCurleyBraces()) {
    bugFreeSofware.hooray();
}

Я предпочитаю последний вариант:

  • Мне легче читать, если все if-инструкции записаны единообразным способом.
  • Это может сделать программное обеспечение немного более надежным и без ошибок. Однако у всех современных редакторов IDE и продвинутых текстовых редакторов есть хорошие функции автоматического отступов, которые, как я думаю, каждый должен использовать, пока он не испортит форматирование комментариев или не идет против командных стандартов (во многих случаях можно создать настраиваемую схему форматирования и поделиться им с командой). Моя точка зрения заключается в том, что если правильно выполнить отступ, риск введения ошибки немного уменьшается.
  • Я предпочитаю, чтобы логическое выражение и оператор (ы) выполнялись для разных строк. Мне нравится отмечать строку для целей отладки. Даже если я использую среду IDE, где я могу отметить инструкцию и шаг за ней, это интерактивная операция, и я могу забыть, где я начал отлаживать или, по крайней мере, мне потребуется немного времени, чтобы пройти через код несколько раз (как я должен отмечать позицию вручную каждый раз во время отладки).
9
ответ дан user14070 19 August 2018 в 05:26
поделиться

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

if(x == y)
   for(/* loop */)
   {
      //200 lines
   }

//rampion's example:
for(/* loop */)
{
   for(/* loop */)
      for(/* loop */)
      {
         //several lines
      }
}

В противном случае у меня нет проблем с ним.

10
ответ дан 3 revs 19 August 2018 в 05:26
поделиться
  • 1
    Плохие примеры. В обоих случаях я бы включил эту линию 200 в цикл в свой собственный метод или, желательно, несколько методов. – Adam Jaskiewicz 11 December 2008 в 17:02
  • 2
    Правда, но это происходит. Кроме того, в любой момент, когда блок больше, чем у экрана читателя, вы получите эту проблему. И вы не можете контролировать высоту экрана вашего считывателя кода. Они могли видеть только пару строк с каждой стороны. – rampion 11 December 2008 в 17:45
  • 3
    Это происходит. Это не означает, что должен произойти. – Adam Jaskiewicz 11 December 2008 в 18:48
  • 4
    @AdamJaskiewicz Право. Это происходит. Мы должны думать о том, что делает , а не о том, что должно . Если бы мы могли ограничиться тем, что должно , нам не нужно будет беспокоиться о ошибках. – Beska 16 August 2012 в 13:45
Другие вопросы по тегам:

Похожие вопросы: