[swift-evolution] Proposal: label-only constructors
ilya
ilya.nikokoshev at gmail.com
Sun Dec 13 07:03:13 CST 2015
(1) Isn't using a class function just one more symbol?
let a = Key.forRSA()
(2) Wouldn't this syntax be more logical:
Key {
init(forRSA: Void) { /* */ }
}
Key(forRSA:)
The only change compared to what we have now would be auto-generation of
().
On Sun, Dec 13, 2015 at 15:50 Drew Crawford via swift-evolution <
swift-evolution at swift.org> wrote:
> Oftentimes I want to have multiple parameterless constructors. In the
> immediate case, I want a Key for various different cryptographic algorithms:
>
> let a = Key(forRSA: true) //2048-bits
> let b = Key(forCurve25519: true) //256-bits
> let c = Key(forAES: true) //128-bits
>
> There is no "parameter" to pass here; in particular the user should not be
> expected to know off the top of their head what the key size for Curve25519
> is.
>
> With the current limits of the language, I am generally forced to vend a
> parameter and associated label (I typically use type Bool) and pass a
> "dontcare" value in, e.g. `true` in the above.
>
> I propose to eliminate this, so I can write
>
> Key {
> init(forRSA) { /* */ }
> }
> let a = Key(forRSA)
>
> This eliminates the parameter, and the associated mystery about what
> happens if you pass `false` to one of these constructors.
>
> FAQ:
>
> Q: Can't you have one constructor that takes an enum parameter?
> A: Enum parameters cannot have cases with distinct access modifiers, as
> constructors often are. Also, combining unrelated code into one
> constructor makes me sad.
>
> Q: Can't you create subclasses RSAKey, Curve25519Key etc. with distinct
> constructors?
> A: Well first of all, Key is probably a `struct`, so no, you can't create
> subclasses of it. Also, the only thing differentiating them is the
> constructor, not e.g. other overridden methods or variables, so subclassing
> feels an unnecessarily heavy abstraction.
>
> Q: Can we extend this to support arbitrary labels e.g. `init(random
> length: 2000)` vs `init(zeroed length: 2000)`, `mkdir(path,
> creatingIntermediateDirectoriesIfRequired)` and many more?
> A: Yes, although these are probably more controversial proposals than
> simply supporting multiple parameterless constructors.
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151213/6a32891a/attachment.html>
More information about the swift-evolution
mailing list