Вопрос

У вас есть последовательность функций для выполнения. Случай A: Они не зависят друг от друга. Что из этого лучше?

function main() {
  a();
  b();
  c();
}

или

function main() {
  a();
}

function a() {
  ...
  b();
}

function b() {
  ...
  c();
}

Случай B: они зависят от успешного завершения предыдущего.

function main() {
  if (a())
    if (b())
      c();
}

или

function main() {
  if (!a()) return false;
  if (!b()) return false;
  c();
}

или

function main() {
  a();
}

function a() {
  ... // maybe return false
  b();
}

function b() {
  ... // maybe return false
  c();
}

Лучше, конечно, значит более ремонторуемым и легче следовать.

Это было полезно?

Решение

Случай A: 1.
Рассуждение: поскольку ни одна из функций зависит друг от друга, вызывая их в порядке в основном, показывает логическую последовательность событий. Ваша альтернатива, где они называют следующим в конце каждой функции, просто выглядит как код Spaghetti, и трудно, чтобы кто-то читал вашу программу для выполнения.

Случай B: Ничего из вышеперечисленного.

function main() {
    return a() && b() && c();
}

Разумные рассуждения: Кажется, вы на самом деле не заботитесь о возвращенном значении, вы просто хотите рано вырваться, если одна из функций возвращает определенное значение. Вы можете вернуть «и» результат всех этих функций, и если какой-либо из этих возврат FALSE, код будет рано. Итак, если возврат FALSE, то B не будет выполнен. Размещение всех из них на одной строке легко прочитать и кратко показывает, что они зависят друг над другом.

Другие советы

Случай A: Первый вариант

Если вы используете второй вариант, вы делаете гораздо сложнее повторно использовать A, потому что вы тянете B и C автоматически.

Случай B: Зависит - сделать a, b и c Возвращать логические значения естественным путем или какое-то другое значение для проверки? У меня все еще не будет позвонить B и B позвонить C, потому что тогда вы ввели ненужную зависимость. Если возвратные значения имеют смысл, я опираюсь на вариант 2 - меньше вложенности - это хорошо.

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

Тем не менее, принимая ценность лица, случай A:

Вариант 1 показывает вид верхнего уровня алгоритма.

Вариант 2 скрывает это, вызовы B & C скрыты. Это может быть довольно много работы, чтобы обнаружить C было вызвано. Кроме того, сложнее тестировать A & B в изоляции, если они будут вызывать дальнейшие методы. Главный всегда можно проверить, если A, B и C можно издеваться.

Случай B: Общее количество аргументов в течение 1 точка выхода против нескольких точек выхода в способе. Иногда несколько точек выхода могут сделать код более проще, что делает его более ремонтом, в других случаях не очевидно, какое влияние возникло возвращение или что возвращение будет происходить, что делает его менее ремонтом.

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

Вариант 3 выглядит просто тупой для меня.

Случай A: Первый вариант

Случай B: Второй вариант

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top