4 ms·
if predicate: A = 3 else: A = 5 B = A / 2 ... Why forward declare A = None?
by cjhanks 10y ago
if predicate:
A = 3
else:
A = 5
B = A / 2
...
Why forward declare A = None?
- haimez 10y agoBecause it announces that you intend to use the name 'A' in the current scope after some assignment happens in a nested one. It's intentional. It /can/ be useful, but it should be opt-in. JavaScript had to figure this out with their 'var' declaration scoping too. Also, try: A = (predicate) ? 3 : 5 Or, in a language that embraces expressions instead of statements: val A = if (predicate) { 3 } else { 5 } These are all more intentional, concise, and readable than allowing variables to outlive their scope by default.
- ucho 10y agoJava has also alternative approach: final a; if (predicate) { a = 3; } else { a = 5; } `final` makes it possible for variable to be assigned exactly once. Verbose but useful when "?:" is not a good fit.