-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Add 'Primary constructor' to glossary #13033
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -291,6 +291,26 @@ | |||||||||||||||
| - "design" | ||||||||||||||||
| - "ui" | ||||||||||||||||
|
|
||||||||||||||||
| - term: "Primary constructor" | ||||||||||||||||
| short_description: |- | ||||||||||||||||
| A constructor declared as part of the type declaration. | ||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The phrase 'type declaration' is rather vague. It's often used to designate a type annotation (as in "the variable has a type declaration" when talking about declarations like Next, a class declaration starts at a keyword (often Similarly for mixin class declarations etc. Perhaps this would work:
Suggested change
|
||||||||||||||||
| long_description: |- | ||||||||||||||||
| A _primary constructor_ is a concise way to declare a constructor | ||||||||||||||||
| directly in the type declaration. | ||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||
|
|
||||||||||||||||
| Currently, this feature is only available for [extension types][]. | ||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is inaccurate -- primary constructors can be used for classes, extension types, and enums as well. |
||||||||||||||||
| It allows you to define the underlying representation object | ||||||||||||||||
| and bind it to a field in one step. | ||||||||||||||||
|
Comment on lines
+302
to
+303
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's really great that this glossary entry is so short. It should allow developers to get to know about the concept of a primary constructor. There would be other pages about all the details. So how do we communicate that the primary constructors of class, mixin class, and enum declarations have a large number of properties in common, and the primary constructors of extension types are different in several ways? Here is one attempt at saying very little, but still enough to give the reader a relevant hint:
Suggested change
We can't even really say "in a single declaration" when it comes to extension types, because they don't support declaring the representation variable using a regular instance variable declaration in the first place. There is simply no other way to declare the representation variable (name and type) of an extension type than having a primary constructor. |
||||||||||||||||
|
|
||||||||||||||||
| [extension types]: https://dart.dev/language/extension-types | ||||||||||||||||
| related_links: | ||||||||||||||||
| - text: "Extension types constructors" | ||||||||||||||||
| link: "https://dart.dev/language/extension-types#constructors" | ||||||||||||||||
| type: "external" | ||||||||||||||||
|
Comment on lines
+297
to
+309
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The description for primary constructors is slightly outdated. Since Dart 3.4, primary constructors are also available for classes, not just extension types. I'd suggest updating the description to include classes and adding a link to the relevant documentation for class-based primary constructors to make the glossary entry more accurate and complete. long_description: |-
A _primary constructor_ is a concise way to declare a constructor
directly in the type declaration.
Primary constructors can be used with [classes][] and [extension types][].
For classes, they allow you to define fields and initialize them from
constructor parameters in one step. For extension types, they allow you
to define the underlying representation object and bind it to a field.
[classes]: https://dart.dev/language/constructors#primary-constructors
[extension types]: https://dart.dev/language/extension-types
related_links:
- text: "Primary constructors for classes"
link: "https://dart.dev/language/constructors#primary-constructors"
type: "external"
- text: "Extension types constructors"
link: "https://dart.dev/language/extension-types#constructors"
type: "external"There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 'Dart 3.4' is not accurate, the new, generalized primary constructors feature hasn't yet been released, but it's being implemented and will definitely be released. |
||||||||||||||||
| labels: | ||||||||||||||||
| - "dart" | ||||||||||||||||
| - "language" | ||||||||||||||||
|
|
||||||||||||||||
| - term: "Prop drilling" | ||||||||||||||||
| short_description: |- | ||||||||||||||||
| The process of passing data through multiple layers of widgets | ||||||||||||||||
|
|
||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@eernstg to review as well.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the heads up!
I'll assume that this glossary entry should describe the primary constructors feature which is about to be released—it doesn't seem particularly useful to have one description of the concept for some weeks, and then updating it substantially to cover the much more general notion of primary constructors that we're about to release.