I believe the indentation is more a signal for a new scope than curly braces. 
Swift doesn’t indent its switch cases since they’re a part of the same scope, 
while nested types and methods are a new scope.

Saagar Jha

> On Mar 7, 2017, at 05:38, Derrick Ho via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> It might have to do with C history. Anything inside two curly braces usually 
> had an increased indentation level.
> 
> I always thought the switch statement was an oddball for not indenting the 
> cases.
> On Tue, Mar 7, 2017 at 1:42 AM Will Stanton via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> Hello Chris and perhaps core team members,
> 
> The comments on tab-levels for `switch` made me want to ask about the 
> considerations that went into class and protocol-level indentation.
> 
> Sorry if my wording isn’t precise, but in Objective-C, functions can (should) 
> be at the same 0-indent level as the class:
> @implementation Foo
> // No indent!
> - (void)doSomething {
> }
> @end
> 
> However, in Swift, method and nested types are indented by default:
> class Foo : Bar {
>         // Things indented!
>         enum Types {
>         }
>         func doSomething() {
>         }
> }
> 
> 
> Was the change mostly driven by the desire for protocol+class+struct+enum 
> consistency in ‘increasing’ the scope+indent level? Were there other 
> considerations?
> Why didn’t the language evolve into something like this to reduce the use of 
> horizontal whitespace, allowing class functions/types at the root/top level? 
> Like:
> @class Foo : Bar
> enum Types {
> }
> func doSomething() {
> }
> @end
> 
> 
> Regards,
> Will Stanton
> 
> > On Mar 7, 2017, at 12:52 AM, Chris Lattner via swift-evolution 
> > <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> >
> > I can understand how you might find this unnerving, but it is important to 
> > understand that Swift and Objective-C/C have different semantics when it 
> > comes to case labels:  in Swift, a case label *is* a scope, and *is* part 
> > of the switch statement.  In Objective-C, a case label is just a label, 
> > like any other goto label: it is not a scope and is not necessarily a 
> > direct child of the switch statement.
> >
> > C and Objective-C’s behavior is what leads to obscure but important things 
> > like Duff’s device (https://en.wikipedia.org/wiki/Duff's_device 
> > <https://en.wikipedia.org/wiki/Duff's_device>).
> >
> > In contrast, Swift fixes the scoping, fallthrough, and other related 
> > problems all in one fell swoop, and ensures that cases are directly nested 
> > under the switch (unlike in C, where they can be nested under other 
> > statements within the switch).  Because the case/default labels are *part 
> > of* the switch in Swift, it makes sense for them to be indented at the same 
> > level.
> >
> > While I can respect that you aesthetically have a preference for the 
> > Objective-C way of doing things, the rationale for this behavior change 
> > wasn’t arbitrary and wasn’t due to "LLVM style".  It is an important 
> > reflection of the core semantics of the language model.
> >
> > Finally, conservation of horizontal whitespace is important for 
> > comprehension of code, particularly w.r.t. readability and maintenance.  
> > This is why statements like guard exist: to reduce nesting and indentation, 
> > directing the attention of someone reading and maintaining code to the 
> > important parts.
> >
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to