[swift-evolution] [Proposal Draft] Flexible memberwise initialization
    Joe Groff 
    jgroff at apple.com
       
    Thu Dec 24 11:11:29 CST 2015
    
    
  
> On Dec 24, 2015, at 5:41 AM, Matthew Johnson via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> 
> Sent from my iPad
> 
>> On Dec 24, 2015, at 5:46 AM, Thorsten Seitz <tseitz42 at icloud.com> wrote:
>> 
>> 
>>> Am 22.12.2015 um 18:30 schrieb Matthew Johnson <matthew at anandabits.com>:
>>> 
>>> My proposal is specifically suggesting that we treat “initial value” as a default rather than an initialization that always happens.  IMO the current behavior is limiting and problematic in a number of ways.
>>> 
>>> If we make the change I am suggesting double initialization / assignment will not happen. 
>> 
>> Ah, ok! 
>> 
>> I'm a bit uneasy about overloading the initial-value-syntax with a new meaning, though.
>> 
>> -Thorsten
> 
> This was pulled from the latest draft of the proposal.  Please take a look at the current draft and let me know if you like the new solution better.
I wonder whether we could avoid the problems of mixing up inline initialization and default initializer parameterization by taking a different approach. Sorry if this has been discussed and I missed it, but Scala and Kotlin both support a compact function-like class declaration syntax for simple "case classes". We could adopt something similar for our structs and classes, so that:
public struct Vec4(x: Double, y: Double, z: Double, w: Double = 1.0) { }
expanded to:
public struct Vec4 {
  public let x: Double
  public let y: Double
  public let z: Double
  public let w: Double // NB: No inline initializer
  // Default argument in struct decl becomes default argument in initializer
  public init(x: Double, y: Double, z: Double, w: Double = 1.0) {
    self.x = x
    self.y = y
    /* you get the idea */
  }
}
(and you could presumably stick `var` on parameters to make the corresponding properties `var`s instead of `let`s, if you wanted). That collects all the information you want to know about the members and their initialization together in one place, and the syntax naturally suggests function-like semantics for `=` expressions rather than inline-initializer-like semantics.
-Joe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151224/00020eb8/attachment.html>
    
    
More information about the swift-evolution
mailing list