Вниз  Java-программирование (1-ые посты)
- 11.04.2015 / 22:22
Kalter
  Пользователь

Kalter 
Сейчас: Offline
AHiLLA, то есть?.. Dimon638 распиал же всё: ты в условии присваиваешь переменной значение, а затем проверяешь, является ли оно истинным.

Вот здесь да, компилятор выскажет своё недовольство. В условии сначала присваивается переменной test значение, а затем только проверяется выражение. Так как там int, вместо boolean, такой код не скомпилируется.
  1. int test;
  2. if (test = 0) {
  3.     // TODO: add code
  4. }

Здесь аналогичный случай, только этот код компилируется... В условии сначала переменной test присваивается значение false, а затем эта переменная проверяется на истинность. Так как это переменная логического типа (в отличии от примера выше), то этот код скомпилируется.
  1. boolean test;
  2. if (test = false) {
  3.     // TODO: add code
  4. }

Кстати, я в NetBeans как-то включал настройку, чтобы он предупреждал меня о таких ошибках.
__________________
 Homo homini penis est.

Изменено Kalter (11.04 / 22:23) (всего 1 раз)
- 12.04.2015 / 14:28
AHiLLA
  Пользователь

AHiLLA 
Сейчас: Offline
Kalter, ну вроде понял :gg: короч надо читать учебники, а то я простых вещей не знаю.
- 12.04.2015 / 15:09
Oak
  Пользователь

Oak 
Сейчас: Offline
AHiLLA, все выражения возвращают какой-то результат. Функции возвращают свой результат, оператор сравнения возвращает true или false.
Дело в том, что присваивание — тоже выражение, и тоже возвращает значение. Это значение — присвоенное значение.

Не помню, чтобы в учебниках по Java это обсуждалось.
__________________
 Эль Презеденте

Изменено Oak (13.04 / 06:21) (всего 3 раза)
- 12.04.2015 / 15:38
AHiLLA
  Пользователь

AHiLLA 
Сейчас: Offline
Oak, я просто не думал, что даже в условии присваивание будет "присваивать", ну теперь понял короч что такое эти "=" и "==".
- 12.04.2015 / 21:42
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
В таких случаях говорят, что присваивание право-ассоциативно, то есть выполняется сначала самое правое присваивание. В Java присваивание также возвращает значение правого операнда.
  1. a = b = c = 7;
  2.  
  3. // то же, что и
  4. a = (b = (c = 7));
  5.  
  6. // или подробнее
  7. c = 7;
  8. b = 7;
  9. a = 7;

В C++ есть операция вывода в поток, которая выглядит так: cout << 5; И часто бывает удобно вывести сразу несколько значений:
  1. cout << "Result: " << 25 << "\n";  // Result: 25\n

И на самом деле эта операция уже лево-ассоциативна, и возвращает свой левый операнд. В данном случае это cout.
  1. ((cout << "Result: ") << 25) << "\n";

В математике, если некоторая операция (или функция) одновременно является лево-ассоциативной и право-ассоциативной, то её называют просто ассоциативной.

Выражается это тем, что порядок выполнения операций не влияет на результат. Например, сложение ассоциативно:


Надеюсь, это несколько прояснило ситуацию. Ассоциативность тех или иных операций указывается зачастую в официальной документации языка.

Изменено Ксакеп (13.04 / 08:14) (всего 1 раз)
- 12.04.2015 / 22:03
Oak
  Пользователь

Oak 
Сейчас: Offline
Ксакеп, ассоциативность связана с группировкой операндов и последовательностью применения операторов к ним, а не с возвращаемым значениям.
Если я не прав, то пруф.
__________________
 Эль Презеденте
- 13.04.2015 / 02:33
DominaN
  Пользователь

DominaN 
Сейчас: Offline
На самом деле конпелятору насрать, гдп именно присваивается значение. Просто выражениe
  1. boolean b;
  2. if ((b = 1 > 0)) print("ololo");
симплифицируется до
  1. if ((b = true)) print("ololo");
  1. if (b) print("ololo");
Что допустимо с точки зрения синтаксиса, а вот
  1. int i;
  2. if ((i = 1 + 2)) print("ololo");
Симплифицируется как
  1. if ((i = 3)) print("ololo");
  1. if (i) print("ololo");
Что не допускается, так как в яве только boolean переменные могут представлять логические выражения. В С, кстати с этим проблем нет, там 0 и 1 представляют false и true, соответственно, и могут быть использованы в качестве логических выражений
- 13.04.2015 / 06:20
Oak
  Пользователь

Oak 
Сейчас: Offline
DominaN, мы об этом тут уже вторую страницу говорим, а до тебя только дошло?
__________________
 Эль Презеденте
- 13.04.2015 / 08:07
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Oak, вообще говоря прав. Подкорректирую.
- 13.04.2015 / 22:54
Gaucer
  Пользователь

Gaucer 
Сейчас: Offline
Тоже подумываю учить яву.. Для написания игорей под андроид. Что посоветуете почитать для начала?
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)