Страницы

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

суббота, 11 января 2020 г.

fst += (sec - (sec = fst)); нет ли здесь неопределенности?

#java #swap


нормальный ли это способ дать переменным обменяться значениями без использования
третьей? fst и sec в шапке обычные int переменные, пишу на java. Выглядит, будто есть
неопределенность, но попробовал в пузырьке в качестве swap делать это, и сортировка
прошла верно.
    


Ответы

Ответ 1



Неопределенности в коде нет (и я не знаю, может ли она быть вообще в синтаксически правильном коде на java). При условии, что fst и sec -- примитивные числовые типы, этот код действительно осуществляет обмен значений. Другое дело, что это может быть неочевидно и может быть понято неправильно, т.е. код не является неопределенным, но является непрозрачным. Читаемость, ясность кода -- в подавляющем большинстве случаев важнее, чем его эффективность. К тому же я не думаю, что у такого кода есть преимущество в эффективности перед традиционным int tmp = a; a = b; b = tmp; так что я бы не стал так писать. И я бы не пришел в восторг и не одобрил бы автора, если бы мне пришлось такое читать.

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

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