Что такое хорошее соглашение об именах для методов, которые выполняют условные действия? - PullRequest
20 голосов
/ 01 июля 2010

Допустим, у меня есть метод, Foo(). Есть только определенные моменты, когда Foo() подходит, как определено методом ShouldFooNow(). Однако во многих случаях программа должна учитывать, подходит ли Foo() в данный момент. Поэтому вместо того, чтобы писать:

if ShouldFooNow():
   Foo()

везде, я просто превращаю это в одну функцию:

def __name():
    if ShouldFooNow():
       Foo()

Каким было бы хорошее название для этого метода? Мне трудно придумать хорошую конвенцию. IfNecessaryFoo() неудобно, особенно если Foo() имеет более длинное имя. DoFooIfShould()? Еще более неловко.

Какой стиль имен лучше?

Ответы [ 4 ]

17 голосов
/ 01 июля 2010

Я думаю, вы довольно близки. Поместите действие / намерение в начало названия метода, чтобы упростить алфавитный поиск. Если бы я писал что-то подобное, я бы подумал

FooIfNecessary()
FooIfRequired()

Скажем, например,

ElevatePermissionsIfNecessary()
1 голос
/ 01 июля 2010

Я недавно начал использовать соглашение:

FooIf(args, bool);

Где аргументы - это любые аргументы, которые принимает метод, и bool либо ожидает логическое значение, либо Func некоторого вида, который разрешается в логическое значение. Затем в рамках этого метода я проверяю bool и запускаю логику. Сводит такие утверждения к одной строчке и выглядит чистым для меня.

Пример в моем коде C # для регистрации:

public void WarnIf<T>(T value, string message, Func<T, bool> isTrue)
{
  if (isTrue(value)) _log.Warn(message);
}

Тогда я бы назвал это что-то вроде:

WarnIf(someObject, "This is a warning message to be logged.", s => s.SomeCondition == true);

(Этот абонент может быть не прав, но вы понимаете, у меня сейчас нет кода перед собой.)

0 голосов
/ 05 февраля 2019

Ответ Михаэля Петротты (IfNecessary или IfRequired суффикс) хорош, но я предпочитаю более короткую альтернативу: IfNeeded.

ElevatePermissionsIfNeeded()

И если вы хотите что-то еще более короткое, я бы рассмотрелпрефикс типа May или Might:

MayElevatePermissions()
MightElevatePermissions()
0 голосов
/ 01 июля 2010

Вы можете использовать EnsureFoo().

Например, метод EnsurePermissions() при необходимости выполнит соответствующее действие. Если права доступа уже верны, метод ничего не сделает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...