4 ms·
Does it also solve the variable scope issue? I moved away from PHP a while ago, but all this sounds like a step in the right direction. if (true) { $a=1; } ec
by benguild 10y ago
Does it also solve the variable scope issue? I moved away from PHP a while ago, but all this sounds like a step in the right direction.
if (true) { $a=1; }
echo($a); // outputs 1
- cjhanks 10y agoThat scope logic is normal in many interpreted languages. I love it in Python.
- haimez 10y agoPython does support block scoping- so no- it doesn't work there. Also, if you need to use variables in outer scopes, it's ok to declare them there. There is literally, and I mean this, literally- no possible justification for using inner-scoped variables in an outer scope that they weren't declared in.
- cjhanks 10y agoif 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.
- kyriakos 10y agoA decent IDE such as phpstorm will flag that with a warning (assuming $a wasn't already defined before)