#java #android
#java #Android
Вопрос:
Я создаю приложение, в котором мне приходится перебирать массив объектов, и для каждого из них я вызываю вспомогательную функцию.
В этой вспомогательной функции мне нужно передать переменную другой вспомогательной функции.
Мой вопрос в том, является ли плохой практикой инициализировать эту переменную в первой вспомогательной функции каждый раз?
В основном:
Пример 1: Инициализация b в funcA
funcA(byte[] bytes) {
...
byte b = bytes[0];
funcB(b);
}
while(...) {
byte[] bytes;
funcA(bytes);
}
или
Пример 2. Инициализируйте b снаружи и просто переназначите
byte b;
funcA(byte[] bytes) {
...
b = bytes[0];
funcB(b);
}
while(...) {
byte[] bytes;
funcA(bytes);
}
Что лучше? (Я вызываю funcA примерно 20-30 раз) Я полагаю, я мог бы просто сделать funcB(bytes[0])
, но я хочу присвоить ее переменной для удобства чтения.
Комментарии:
1. Функция должна возвращать новое значение и оставлять старое значение в покое.
Ответ №1:
Плохой практикой является не инициализировать эту переменную во вспомогательной функции каждый раз.
В общем, переменные должны быть определены в максимально узкой области видимости. Более эффективно определять переменные только там, где они используются, и не сохранять переменные, когда они не используются. «Создание новой переменной здесь» в основном бесплатное; оно просто становится частью памяти, выделенной в стеке для этой функции.
Комментарии:
1. Ха, почему я об этом не подумал, это имеет смысл .. спасибо
Ответ №2:
Проблемы с производительностью почти никогда не должны влиять на дизайн вашей системы. Сначала убедитесь, что ваш код имеет смысл с логической точки зрения, и реализуйте его соответствующим образом, а затем измерьте фактическое время выполнения, использование памяти и т. Д.
В вашем случае этот массив должен быть определен и инициализирован там, где это необходимо. Я предполагаю, что вы передаете в нем некоторые значения, поэтому имеет смысл объявить его в while
и передать дальше funcA
. Если вы собираетесь передать пустой неинициализированный объект в свою функцию, есть большая вероятность, что вы делаете что-то очень неправильное, и на самом деле нет никакой необходимости передавать этот объект вообще.
Комментарии:
1. О, конечно, сначала я присваиваю байты чему-то, я просто полностью урезал свой код для этого вопроса.
2. Тогда для
byte
вашего третьего варианта лучше всего просто передать егоin place
, нет необходимости создавать переменную, чтобы использовать ее один раз в качестве аргумента функции. На самом деле это противоположно удобочитаемости. Анонимные переменные — это круто, и, что более важно, они четко указывают, где они используются. Объявление любой переменной вglobal
области видимости, как правило, плохо, поскольку вы не можете знать, где они используются, не отслеживая их вручную.