Вообще говоря, вы хотите сделать свой код более читабельным. Обычно хорошей идеей является извлечение фрагментов кода для функций, чтобы избежать длинных или глубоко вложенных функций, и предоставление самообъяснимых имен, которые проясняют цельчасти кода:
loop(expr0) ->
case expr1 of
true ->
A = do_something(expr2);
false->
A = do_something_else(expr3)
end,
loop(expr4(A)).
do_something(E) ->
case E of
true -> ...;
false -> ...
end
do_something_else(E) ->
case E of
true -> ...;
false -> ...
end
Теперь случайный читатель знает, что ваша функция делает что-то , если expr1 истинно, и что-то еще , если expr1 ложно.Хорошие соглашения об именах очень помогают здесь.Вы также можете сделать это с комментариями, но код никогда не устареет, и, следовательно, его легче поддерживать.Я также нахожу короткие функции, которые легче читать, чем действительно простые функции.Даже если у этих длинных функций есть встроенные комментарии.
Как только вы четко заявите, что делает ваша функция, вы можете захотеть сократить код.Короткий код легче читать и поддерживать, но не слишком сокращайте его, используя «умные» конструкции, иначе вы его затените, что противоположно тому, что вы хотите.Вы можете начать с использования сопоставления с образцом в функциональных заголовках:
loop(expr0) ->
case expr1 of
true ->
A = do_something(expr2);
false->
A = do_something_else(expr3)
end,
loop(expr4(A)).
do_something(true) -> ...;
do_something(false) -> ....
do_something_else(true) -> ...;
do_something_else(false) -> ....
Затем вы можете избежать повторения A в основной функции (кроме переменных, ограниченных вложенными операторами, это функция, которая мне всегда не нравилась)
loop(expr0) ->
A = case expr1 of
true -> do_something(expr2);
false-> do_something_else(expr3)
end,
loop(expr4(A)).
do_something(true) -> ...;
do_something(false) -> ....
do_something_else(true) -> ...;
do_something_else(false) -> ....
И я думаю, что именно для этого куска кода.Имея больше контекста, вы также можете использовать некоторые абстракции, чтобы уменьшить дублирование, но будьте осторожны при абстрагировании, если вы переусердствуете с ним, вы снова затенете код, потеряв преимущество в обслуживании, которое вы ожидали получить, удалив аналогичный код.*