Каков более оптимальный вариант? [закрытый]

С Vagrant теперь вы можете иметь Docker в качестве поставщика. http://docs.vagrantup.com/v2/docker/ . Поставщик Docker может использоваться вместо VirtualBox или VMware.

Обратите внимание, что вы также можете использовать Docker для обеспечения Vagrant. Это сильно отличается от использования Docker в качестве провайдера. http://docs.vagrantup.com/v2/provisioning/docker.html

Это означает, что вы можете заменить Chef или Puppet на Докер. Вы можете использовать такие комбинации, как Docker в качестве провайдера (VM) с Chef в качестве провайдера. Или вы можете использовать VirtualBox в качестве провайдера и Docker в качестве провайдера.

9
задан Jon Seigel 4 April 2010 в 15:33
поделиться

9 ответов

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

procedure MyProc(Eval: Boolean);  
begin  
   if Eval then  
      begin  
         /* do stuff */  
         /* do more stuff */  
      end;

  /* no Exit needed, but now we got what I think unpleasing code:
  having a indentation level and a begin-end statement */
end;

скажем:

procedure MyProc(Eval: Boolean);  
begin  
   if Eval then  
   begin  
      /* do stuff */  
      /* do more stuff */  
   end;

  /* no Exit needed, but now we got what I think unpleasing code:
  having a indentation level and a begin-end statement */
end;
1
ответ дан 4 December 2019 в 06:23
поделиться

Бывают случаи, когда подходит любой метод. Однако обычно первый предлагает более читаемый код и лучший поток управления. Я не очень знаком с программированием на Delphi, но в C # я всегда стараюсь по возможности использовать первое. Судя по всему, я не вижу причин, по которым подход должен отличаться в Delphi.

Чтобы перечислить некоторые из преимуществ:

  • Нет необходимости делать отступ в последующем коде.
  • Легче расширить на несколько условий. (Просто добавьте дополнительные операторы if, а не логические операторы, что сделает ситуацию более ясной в ИМО.)
  • Идея, что вы «отказываетесь» от метода, а не выбираете его, более эстетична, поскольку следующий код должен выполняться в «нормальный» случай.

Тем не менее, бывают ситуации, когда второй вариант более уместен. В частности,

16
ответ дан 4 December 2019 в 06:23
поделиться

Я думаю, это вопрос предпочтений. Однако, если у вас есть ряд проверок, которые вы должны выполнить перед тем, как выполнять «настоящую работу», тогда первая форма (IMO) выглядит аккуратнее, и ее легче отслеживать. Например:

procedure MyProc(Eval: Boolean);
begin
    if not Eval then
        Exit;
    if not Eval2 then
        Exit;
    /* do stuff */
    /* do more stuff */ 
end;

vs

procedure MyProc(Eval: Boolean);
begin
    if Eval then
    begin
        if Eval2 then
        begin
            /* do stuff */
            /* do more stuff */
        end;
    end;
end;
10
ответ дан 4 December 2019 в 06:23
поделиться

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

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

У меня были люди, которые реорганизовали код, который я написал следовать «правилам», и это почти всегда заканчивалось трясиной нечитаемого кода из-за чрезмерных отступов. Надо было либо оставить все, либо сделать как следует,

4
ответ дан 4 December 2019 в 06:23
поделиться

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

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

И, кажется, используется много, учитывая тот факт, что exit (returnvalue) был добавлен в D2009 (и FPC имеет его в течение десяти лет)

3
ответ дан 4 December 2019 в 06:23
поделиться

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

2
ответ дан 4 December 2019 в 06:23
поделиться

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

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

Со временем эта функция будет видоизменена и исправлена ​​ошибками и улучшениями. Вы с большей вероятностью внесете новую ошибку при использовании второго подхода, чем первого, потому что быстрый выход очевиден с самого начала, на вашем лице, и вам не нужно беспокоиться о том, что он «забыл» 50 строк функции. По моему опыту внедрения ошибок, конечно.

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

0
ответ дан 4 December 2019 в 06:23
поделиться

На мой взгляд, ни то, ни другое не является правильным ответом.

Правильным решением было бы включить в процедуру только части «делать что-нибудь» и «делать больше». Затем оберните вызов процедуры в оператор if, вызывая его только при необходимости.

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

0
ответ дан 4 December 2019 в 06:23
поделиться

I prefer:

if not Eval then Exit;

because the code looks cleaner that way.

3
ответ дан 4 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

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