Возможна ли встроенная операция «предварительного назначения»? - PullRequest
1 голос
/ 26 октября 2011

Видя, что мое понимание терминологии информатики отсутствует, потерпите меня и поправьте меня, если ошибочно назовете концепцию CS.

Есть ли способ сделать что-то, что я бы назвал "встроенным пост-присваиванием" для переменных? По сути, это противоположный поток «встроенного предварительного назначения». Например:

// some random number
int currentNumber = 0;

// e.g. of inline pre-assignment (assigns 5 to var before entering function)
doSomethingOnNumber(currentNumber = 5);

// e.g. of envisioned inline "post-assignment" 
// (assigns 5 to var after entering function)
doSomethingOnNumber(5 = currentNumber);

// And yes, I know I could just do something like:
doSomethingOnNumber(currentNumber);
currentNumber = 5;

// But that is rather boring ;D

Это может быть сумасшедший вопрос (видя, что знак равенства - это просто: присваивает данные правой руки переменной левой руки), но, может быть, есть какая-то Java-инфраструктура, которая может это предварительно преобразовать?

Основным способом, которым это было бы полезно, было бы что-то вроде:

private int myNum = 0;

public int resetNum (int newNum) {
    return myNum;

    myNum = newNum; // (this never happens because of the return)
}

Хотя для хорошего дизайна не нужно иметь что-то подобное, у вас может быть спецификация метода, которая требует, чтобы он сбрасывал счетчик и возвращал его значение.

Ответы [ 3 ]

4 голосов
/ 26 октября 2011

Самое близкое, что вы можете получить, это использовать операторы pre ((in | de) crement (++ | --).

int currentNumber = 0;

// pre-increment (function receives 1)
doSomethingOnNumber(++currentNumber);

// vs
currentNumber = 0;

// post-increment (function receives 0)
doSomethingOnNumber(currentNumber++);

В общем, «скучный» кодболее желательный, чем «умный» код.Скучный код, как правило, становится понятнее, проще и проще в обслуживании.

1 голос
/ 26 октября 2011

Пусть метод возвращает требуемое значение:

currentNumber = doSomethingOnNumber(currentNumber);

Если вызывающий сайт знает требуемое значение, передайте его методу:

currentNumber = doSomethingOnNumber(currentNumber, 5);
0 голосов
/ 12 сентября 2012

Решение, которое я придумал для вышеупомянутой ситуации:

private int myNum = 0; 

public int resetNum (int newNum) {
    try {
        return myNum; 
    } finally {
        myNum = newNum; //this happens despite return because of the finally clause
    }
}

Я не уверен, что это действительно работает, потому что у меня еще не было возможности проверить это, и я относительно новичок в Java.

...