Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Как укоротить код с обнулением возвращаемого значения?

#java #любой_язык


Стало интересно, можно ли заменить данный код как то покороче? без использования
временной переменной 
Мне нужно по возвращению значения "сбрасывать" его же

private static int a;
a = ...;
public static int foo() {
    int t = a;
    a = 0;
    return t;
}


Вопрос из разряда "как поменять числа местами без использования мат.операторов"
    


Ответы

Ответ 1



Не думаю что имеет смысл делать подобные "оптимизации", но можно еще так поизвращаться: public static int foo() { try { return a; } finally { a = 0; } }

Ответ 2



Ваш код вполне норм, я только рекомендовал бы чуть расширить интерфейс до полноценного getSet: private static int v = 0; public static int getReset() { return getSet(0); } public static int getSet(int a) { int t = v; v = a; return v; } public static void main(String args[]) { v = 42; System.out.printf("%d, %d", getReset(), getReset()); } Однако, если мсье желает извращений, всегда можно выполнить нечто вроде: public static int getReset() { return v + (v=0); } public static int getSet(int a) { return v + (v=a)-a; } // Могут быть проблемы с переполнением, но могут и не быть, я не уверен :) Ну и классическое решение с атомарностью операции: private static final AtomicReference v = new AtomicReference<>(); public static int getReset() { return getSet(0); } public static int getSet(int a) { return v.getAndSet(a); } public static void main(String args[]) { v.set(42); System.out.printf("%d, %d", getReset(), getReset()); }

Ответ 3



private static AtomicInteger a = new AtomicInteger(...); public static int foo() { return a.getAndSet(0); }

Комментариев нет:

Отправить комментарий