Skip to main content

Dart syntax changes landing soon, update your code

With the release of M1, the Dart team is preparing to remove some of the old syntax that was deprecated. Kasper Lund, engineer on Dart, writes about the upcoming changes and how you can migrate your code.

Note: Dart Editor has a nice Clean Up feature that can automatically update your code for many situations.



Kasper writes:

We're ready to start removing the syntax we deprecated in M1. The
annoying thing is that you may have to update your code. The good
thing is that the replacement syntax is already in place and you can
use it today. Here's a brief list of the deprecated syntax that we
will be removing shortly.


Remove old getter syntax

We're getting rid of the old getter syntax so going forward you will
no longer be allowed to have parentheses after your getters. If you
use:

   get length() => 42;

you'll need to change that to:

   get length => 42;


Remove member/constructor conflict support

Your named constructors can no longer have the same name as a member
of your class. They share a namespace. If you have code like this:

   class C {
     C.named();
     named();
   }

then you'll need to rename one of them.


Remove old optional parameter syntax

You will no longer be able to pass optional parameters that are put in
[brackets] by name; they can only be passed positional. If you want to
have named optional parameters you need to put them in {braces} in
your method declaration. Be aware that the parameter names become part
of you API so try to spend as much time on picking good names for your
optional named parameters as you spend on picking good method names.
See Régis' write up for more info.



Remove abstract modifier on methods

Methods are abstract if they do not have an implementation (does not
apply to constructors). You should be able to just remove the abstract
keyword in front of your methods.


Remove interface declarations

The support for explicit interfaces has been replaced by implied
interfaces -- usually of abstract classes. If you have an interface in
your code like this:

   interface I {
     foo();
     bar();
   }

you should be able to replace that with an abstract class (its
interface will still be implementable):

   abstract class I {
     foo();
     bar();
   }


Remove old library/import/source syntax

The old #library, #import, and #source directives have been replaced
by library, import, and part. Additionally, you'll need to mark your
part files as parts using the 'part of' syntax. If you had something
like this before:

   #library('whatnot');
   #import('other.dart', prefix: 'other');
   #source('src.dart');

you will have to change it to:

   library whatnot;
   import 'other.dart' as other;
   part 'src.dart';

and you'll have to add a line to the beginning of src.dart:

   part of whatnot;
   ...


Remove ===

The support for === and !== is about to go away. If you have an expression like:

   (a === b) && (c !== d)

you can change it to:

   identical(a, b) && !identical(c, d)

The identical function is defined in the dart:core library which is
automatically imported everywhere. We usually prefer using the ==
operator instead of calling the identical function, so unless you're
really going for an identity check you may want to translate uses of
=== to ==.


Remove Dynamic

The special Dynamic type has been renamed to dynamic.

You can read more about these and other M1 language changes. As always, we encourage you to join our mailing list, ask questions on Stack Overflow, and file feature requests and bug reports.

Comments

Popular posts from this blog

Const, Static, Final, Oh my!

Posted by Seth Ladd

(This is an "oldie but a goodie" misc@dartlang.org post originally written by Bob Nystrom. It is being posted here as the explanations still ring true.)

Bob writes:


"static", "final", and "const" mean entirely distinct things in Dart:

"static" means a member is available on the class itself instead of on instances of the class. That's all it means, and it isn't used for anything else. static modifies *members*.

"final" means single-assignment: a final variable or field *must* have an initializer. Once assigned a value, a final variable's value cannot be changed. final modifies *variables*.

"const" has a meaning that's a bit more complex and subtle in Dart. const modifies *values*. You can use it when creating collections, like const [1, 2, 3], and when constructing objects (instead of new) like const Point(2, 3). Here, const means that the object's entire deep state can be determ…

Dart 1.12 Released, with Null-Aware Operators and more

Dart 1.12.0 is now released! It contains the new null-aware operators language feature, and enhancements to pub, Observatory, dartdoc, and much more.

Null-aware operators

The new null-aware operators help you reduce the amount of code required to work with references that are potentially null. This feature is a collection of syntactic sugar for traversing (potentially null) object calls, conditionally setting a variable, and evaluating two (potentially null) expressions.

Click or tap the red Run button below to see them in action.

??

  if null operator. `expr1 ?? expr2` evaluates to `expr1` if not `null`, otherwise `expr2`.


??=

  null-aware assignment. `v ??= expr` causes `v` to be assigned `expr` only if `v` is `null`.

x?.p

  null-aware access. `x?.p` evaluates to `x.p` if `x` is not `null`, otherwise evaluates to `null`.

x?.m()

  null-aware method invocation. `x?.m()` invokes `m` only if `x` is not `null`.

Learn more about Dart's null-aware operators in our Language Tour.

.packages fi…

The new AdWords UI uses Dart — we asked why

Google just announced a re-designed AdWords experience. In case you’re not familiar with AdWords: businesses use it to advertise on google.com and partner websites. Advertising makes up majority of Google’s revenue, so when Google decides to completely redo the customer-facing front end to it, it’s a big deal. The Dart team is proud to say that this new front end is built with Dart and Angular 2. Whenever you asked us whether Google is ‘even using Dart for anything,’ this is what we had in mind but couldn’t say aloud. Until now. We asked Joshy Joseph, the primary technical lead on the project, some questions. Joshy is focusing on things like infrastructure, application latency and development velocity, so he’s the right person to ask about Dart.Q: What exactly did we launch on Monday?It’s a complete redesign of the AdWords customer experience that is rolling out slowly as a test to a small initial set of advertisers. The most noticeable thing is probably the Material Design look and f…