AssignmentsAreExpressions is probably defined somewhere else on this wiki, please tell me where. Anyway, they are the property of the assignment (x = y) or (x := y) returning a value.
CeeLanguage has AssignmentsAreExpressions; z = (x = y) * 2 is OK in C.
AssignmentsAreExpressions are sometimes ConsideredHarmful, because of the common noob mistake made with them:
if (x = 1) { /* always do this */ } else { /* never do this */ }... even though they intended
if (x == 1)Experienced C* developers often learn to favor:
if(1 == x)based on the notion that the compiler will catch it for them if they make a typographical error:
if(1 = x)[Just by the way, "experienced" C* developers don't create this problem for themselves in the first place.]
GoLanguage splits the difference admirably.
x := 1 # initialize new var x x = 2 # stick 2 into preexisting var x 3 == x # returns falseQuestion - is if x := 1 valid in Go?
Java also has this to an extent, though the entire expression within a conditional needs to ultimately return a boolean. The expression
while((c = System.in.read()) != -1) /* Do something if not at end of input. */will work.