#java #android
#java #Android
Вопрос:
Я в некотором замешательстве, я думаю, этот вопрос просто зависит от предпочтений, я просто хочу понять разницу в следующем коде.
if (IsRegistered() == true) ...
public boolean IsRegistered()
{
private boolean status = false;
// blah blah code here
return status;
}
против
isRegistered = IsRegistered();
if (isRegistered)
Я знаю, что оба будут работать, я не педантичен, но я просто хочу понять, чтобы я знал свой путь.
Комментарии:
1. Первый вариант не рекомендуется. Это должно быть просто
if (IsRegistered())
. Кроме того, старайтесь следовать соглашениям об именовании Java: используйтеmixedCase
для методов / переменных и используйтеCamelCase
для классов / интерфейсов.2. исключительно для удобства чтения
3. Кстати, в методе у вас не было бы указания переменной как частной
Ответ №1:
if (isRegistered() == true) ...
Это подробно, поскольку вы знаете, что если он вернет true, он это сделает, если нет, то не будет. Таким образом, это то же самое, что делать:
if (isRegistered()) ...
Что он делает, это просто получение возвращаемого логического значения из метода и проверка условия в операторе if.
Теперь, если вы хотите снова проверить логическое значение, вам нужно будет повторно вызвать метод (который, возможно, должен выполнить что-то сложное, чтобы вернуть это значение), НО если вы сначала присвоите его переменной, а затем проверите условие, вот так:
boolean isRegistered = isRegistered();
if (isRegistered)...
Позже в коде вы можете просто сделать это снова, не вызывая этот метод снова.
if (isRegistered)... // n lines later.
следовательно, избегая повторного выполнения процесса.
В конце концов, это в значительной степени зависит от того, что вам нужно сделать.
Комментарии:
1. Распаковка метода не повысит производительность при повторном вызове, поскольку интерпретатор Java «умный», а локальные переменные (несколько вызовов одного и того же метода) сохраняются до тех пор, пока GC не соберет мусор. В этом случае было бы лучше использовать
IsRegistered()
все время.2.
which may have to do something complex to return that value
иit depends on what you are doing
вроде как подразумевает это.3. Приятно, похоже, что OP никогда не указывал достаточно того, что он пытается сделать, чтобы было введено полезное решение.
4. Да, это может сильно отличаться, когда они задают действительно открытый вопрос xD.
5. @Unihedron — это был действительно открытый вопрос, потому что я не знаю, как он называется, в любом случае, я просто хочу прояснить облако в моей голове относительно того, какой из них лучше и рекомендуется. Действительно, когда я прокручиваю страницу вниз, чтобы прочитать ответы, я понимаю, насколько открытым был вопрос, это привело к множеству интерпретаций. Но, как указывалось, «это зависит от того, что вы делаете», было достаточно, чтобы выбросить вопрос в щебень. Спасибо.
Ответ №2:
Когда вы вызываете метод, который имеет возвращаемый тип, не являющийся void, сам метод преобразуется в значение таким же образом, как и при использовании переменной. Вы можете либо использовать это значение напрямую, либо присвоить его переменной и использовать это.
Ответ №3:
Просто используйте:
if ( IsRegistered() )
Это наиболее читаемый код. Наличие переменной для «распаковки» метода не принесет никакой пользы; компилятор подбирает ее и заменяет в самом управляющем коде на этапе внутренней оптимизации.
Кроме того, производительность вашего IsRegistered()
метода, когда самооптимизация машин отложена в сторону, зависит от того, как работает ваш «мой код здесь»:
source : {
private boolean status = false;
// blah blah code here
return status;
}
optimization-passed : {
return false; // When internal code does not modify "status"
preturn _status; // When internal code modifies "status"
}