@Urukhayy

Пара вопросов. Стоит ли так использовать функции? Как лучше завершать выполнение функции?

1) Допустим есть 3 участка в коде, которые требуют одинаковый код, состоящий из 5-10 строчек. Причем результат выполнения данного кода является число.
Что лучше, в 3 места копировать один и тот же фрагмент, или создать функцию и вернуть число? А если таких функций будет очень много?

2) Можно ли завершать выполнение функции возвратами?
if(a == b) return print("test");
// код, если a != b
return 1;


// vs

if(a != b)
{
// действие
}
else print("test");

А если таких вложений будет много?
  • Вопрос задан
  • 393 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
1) Лучше создать функцию. Еще лучше - хорошо исследовать архитектуру задачи.
2) return - штатный способ выхода из функции. Это чуть лучше километров вложенных условий.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
mudrenokanton
@mudrenokanton
frontend dev
Советую задавать вопрос более конкретно.
1. Если вы придерживаетесь парадигмы ООП, то копировать текст в любом случае негоже. Тем более если результат функции не зависит от переменных класса. Напишите static класс, реализуйте там нужный вам метод, и вызывайте его где угодно без создания экземпляров.
2. Тоже не совсем понятно. В первом случае у вас функция возвращает функцию, во втором у вас ничего не возвращается, а просто идет набор инструкций. Логично сравнивать эти 2 варианта:
public string Func(int a, int b) {
   if (a == b) return "test";
   return "error";
}

public string Func2(int a, int b) {
   string text = (a == b) ? text = "test" : text = "eroor";
   return text;
}

я за 2 вариант, потому что по коду не надо искать где был выход из функции, но это дело вкуса
Ответ написан
Комментировать
zo0m
@zo0m
full stack developer
Если вам хочется получить "самодокументируемый" код, сложные и не очевидные проверки выносите в функции.

function checkUser(user) {
    return (user != null && user.name != null && user.role == 'admin')
}

function checkSetupConfig(params) {
    var isValid = false;
    if (checkUser(params.user) || params.installationPath != null) {
        isValid = true;
    }
    /// тут могут быть еще проверки ... 
    return isValid;
}

function setup(params)
{
    if (checkSetupConfig(params)) {
        //
    }
}


писать 1 return в конце, или внутри if-ов тоже их расставлять - чистая вкусовщина и зависит от команды.

Например, когда я был на проекте с огромным количеством легаси, и встречались методы классов на 100-300 строк(что есть плохой дизайн, но все же), то 1 return в конце, облегчал assessment. Можно сразу смотреть вниз и понимать что выкидывается из метода.
Особенно актуально для нетипизированных языков типа JS. Когда в разных местах return может возвращать что угодно, число, объект с ошибкой, строку.

И еще, возвращать код завершения -- плохой тон, если в вашем коде "1" --- несет какой-то смысловой смысл, то лучше сделайте enum, или собирайте объект типа:
var validationResult = {
    isValid : fale,
    errorMessage :  'User not logged in',
    // errorCode :  'UE001',  // лучше коды делать строками, и читабельными, но можно и 1
    errorCode : 1
}
Ответ написан
Комментировать
Mrrl
@Mrrl
Заводчик кардиганов
Если a и b глобальные, то лучше сделать одну глобальную функцию, которая на них будет смотреть:
int CmpAB(int same,int diff){ return a==b ? same : diff; }

и положить её рядом с переменными. Потом туда же перетаскивать и другие обращения к ним. Глядишь, и соберётся класс с какими-нибудь осмысленными свойствами.
return - вещь хорошая, но если возвращать значение, то в нём должен быть смысл. Ради сокращения пары скобок придумывать тип возврата не стоит. Так что
if(a == b){
   print("test");
   return;
}
// код, если a != b
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы