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 false Question - 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. ---- CategoryCodingIssues