Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Каков предпочтительный стиль для отдельных заявлений о принятии решений и действиях?
В случае языков, поддерживающих одно решение и действие без скобок, например, в следующем примере:
if (var == true)
doSomething();
Каков предпочтительный способ написания этого текста? Следует ли всегда использовать скобки, или их использование должно быть оставлено в качестве предпочтения отдельного разработчика? Кроме того, зависит ли эта практика от размера блока кода, например, в следующем примере:
if (var == 1)
doSomething(1);
else if (var > 1 && var < 10)
doSomething(2);
else
{
validate(var);
doSomething(var);
}
На самом деле это не совсем правильный ответ. Именно для этого существуют стандарты кодирования внутри компании. Если вы можете держать его последовательным по всей компании, то это будет легко читать. Мне лично нравится
if ( a == b) {
doSomething();
}
else {
doSomething();
}
но это священная война.
Я рекомендую
if(a==b)
{
doSomething();
}
потому что мне гораздо проще сделать это заранее, чем пытаться не забыть добавить фигурные скобки, когда я добавляю второе утверждение к условию успеха...
if(a==b)
doSomething();
doSomethingElse();
очень отличается от
if(a==b)
{
doSomething();
doSomethingElse();
}
дополнительную информацию смотрите в статье Джоэла
Я, как правило, использую брекеты в любое время. Вы можете получить некоторые тонкие ошибки там, где вы начали с чего-то вроде:
if(something)
DoOneThing();
else
DoItDifferently();
а затем решите добавить еще одну операцию в предложение else и забудьте завернуть его в фигурные скобки:
if(something)
DoOneThing();
else
DoItDifferently();
AlwaysGetsCalled();
AlwaysGetsCalled() всегда будет вызываться, и если вы сидите там в 3 часа ночи, задаваясь вопросом, почему ваш код ведет себя так странно, что-то подобное может ускользнуть от вас на довольно долгое время. Только по этой причине я всегда использую брекеты.
Я предпочитаю быть последовательным, например, если вы используете скобки на одном блоке, используйте скобки на всем протяжении даже с одним оператором:
if (cond1)
{
SomeOperation();
Another();
}
elseif (cond2)
{
DoSomething();
}
else
{
DoNothing();
DoAnother();
}
Но если у вас есть только несколько лайнеров:
if (cond1)
DoFirst();
elseif (cond2)
DoSecond();
else
DoElse();
Выглядит чище (если вы не возражаете против фиктивных имен методов;) таким образом, но это только я.
Это также относится к циклическим конструкциям и тому подобному:
foreach (var s as Something)
if (s == someCondition)
yield return SomeMethod(s);
Вы также должны учитывать, что это соглашение, которое может быть более подходящим для .NET (обратите внимание, что Java peepz хотел бы иметь свою первую фигурную скобку в той же строке, что и if).
Отнесите это к недостатку опыта, но за все мое семилетнее пребывание в качестве кодовой обезьяны я никогда не видел, чтобы кто-то делал ошибку, не добавляя фигурные скобки при добавлении кода в блок, который не имеет фигурных скобок. Это точно ноль раз.
И до того, как остряки доберутся до него, нет, причина не была "everyone always uses braces".
Итак, честный вопрос - я действительно хотел бы получить реальные ответы, а не просто даунвоты: это когда-нибудь происходит на самом деле?
(Edit: я слышал достаточно страшных историй аутсорсинга, чтобы немного прояснить: действительно ли это когда-нибудь происходит с компетентными программистами ?)
Я бы настоятельно рекомендовал всегда использовать брекеты, даже если они необязательны. Почему? Возьмите этот кусок кода C++ :
if (var == 1)
doSomething();
doSomethingElse();
Теперь приходит кто-то, кто на самом деле не уделяет достаточно внимания и решает, что что-то дополнительное должно произойти, если (var == 1), поэтому они делают это:
if (var == 1)
doSomething();
doSomethingExtra();
doSomethingElse();
Все это по-прежнему красиво изрезано, но это не будет делать то, что было задумано.
Всегда используя фигурные скобки, вы с большей вероятностью избежите такого рода ошибок.
Я лично поддерживаю объяснение McConnell из кода Complete.
Используйте их, когда сможете. Они повышают читабельность вашего кода и устраняют те немногие и редкие путаницы, которые могут возникнуть.
Есть одна вещь, которая более важна though....Consistency. Какой бы стиль вы ни использовали, убедитесь, что вы всегда делаете это одинаково.
Начните писать такие вещи, как:
If A == true
FunctA();
If B == "Test"
{
FunctB();
}
Вы обязательно будете искать странную ошибку, когда компилятор не поймет, что вы пытались сделать, и это будет трудно найти.
В основном найдите тот, который вам удобно писать каждый раз, и придерживайтесь его. Я действительно верю в использование разделителей блоков ('{ ' ,'}'), насколько это возможно.
Я не хочу начинать вопрос внутри другого, но есть кое-что связанное с этим, что я хочу упомянуть, чтобы заставить ваши умственные соки работать. Во-первых, было принято решение об использовании скобок. Куда вы кладете открывающий кронштейн? На той же строке, что и заявление, или под ним. Скобки с отступом или нет?
If A == false {
//calls and whatnot
}
//or
If B == "BlaBla"
{
//calls and whatnot
}
//or
If C == B
{
//calls and whatnot
}
Пожалуйста, не отвечайте на этот вопрос, так как это будет новый вопрос. Если я увижу в этом интерес, я открою новый вопрос, который вы мне зададите.
Как уже упоминали другие, выполнение оператора if в двух строках без скобок может привести к путанице:
if (a == b)
DoSomething();
DoSomethingElse(); <-- outside if statement
поэтому я помещаю его в одну строку, если могу сделать это без ущерба для читаемости:
if (a == b) DoSomething();
а в остальное время я пользуюсь брекетами.
Тернарные операторы немного отличаются. Большую часть времени я делаю их на одной линии:
var c = (a == b) ? DoSomething() : DoSomethingElse();
но иногда операторы имеют вложенные вызовы функций или выражения lambda, которые сделать однострочный оператор трудно разобрать визуально, поэтому я предпочитаю что-то вроде этого:
var c = (a == b)
? AReallyReallyLongFunctionName()
: AnotherReallyReallyLongFunctionOrStatement();
Все еще более лаконично, чем блок if/else, но легко увидеть, что происходит.
Нет правильного или неправильного способа написать это утверждение. Существует множество общепринятых стилей кодирования . Однако для меня я предпочитаю сохранять стиль кодирования на протяжении всего проекта. т.е.. Если проект использует стиль K&R, вы должны использовать K&R.
Ruby красиво устраняет один вопрос в дискуссии. Стандарт для ОДН-вкладыша является:
do_something if (a == b)
а для многострочного:
if (a == b)
do_something
do_something_else
end
Это позволяет создавать краткие однострочные операторы,но при переходе от однострочного к многострочному оператор будет вынужден реорганизоваться.
Это (пока) не доступно в Java, как и во многих других языках, AFAIK.
Соглашения Sun о коде для языка программирования Java говорят об этом :
Класс операторов if-else должен иметь следующую форму:
if (condition) { statements; } if (condition) { statements; } else { statements; } if (condition) { statements; } else if (condition) { statements; } else { statements; }
Наш босс заставляет нас ставить { } после заявления о принятии решения, несмотря ни на что, даже если это одно заявление. Это действительно раздражает, чтобы добавить две дополнительные строки. Единственным исключением являются тернарные операторы.
Я думаю, что это хорошо, что у меня есть мой монитор кода в портретной ориентации на 1200x1600.
Я склонен согласиться с Джоэлом Сполски в этой статье ( делая неправильный код неправильным) со следующим примером кода :
if (i != 0)
bar(i);
foo(i);
Фу теперь безоговорочен. А это очень плохо!
Я всегда использую скобки для формулировок решений. Это помогает поддерживать работоспособность кода и делает его менее подверженным ошибкам.
Я предпочитаю
if (cond)
{
//statement
}
даже с одним-единственным утверждением. Если вы собирались написать что-то однажды, не сомневались, что это сработает, и никогда не планировали, что другой кодер когда-либо посмотрит на этот код, идите вперед и используйте любой формат, который вы хотите. Но во что вам обойдется дополнительный брекетинг? Меньше времени в течение года, чем требуется, чтобы напечатать этот пост.
Да, я тоже люблю делать отступы в скобках до уровня блока.
Python хорош тем, что отступ определяет блок. В таком языке вопрос спорный.
Раньше я шел по линии "use curly braces always", как аппаратчик. Однако я изменил свой стиль, чтобы исключить их в однострочных условных выражениях:
if(!ok)return;
Хотя я все еще придерживаюсь мнения о том что брекеты должны быть обязательными для любого сценария мультистат:
if(!ok){
do();
that();
thing();
}
В Perl, если вы делаете простой тест, когда-нибудь вы напишете его в этой форме:
do_something if condition;
do_something unless condition;
Что может быть действительно полезно для проверки аргументов в начале подпрограммы.
sub test{
my($self,@args) = @_;
return undef unless defined $self;
# rest of code goes here
}