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.

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…

AngularDart 4

AngularDart v4 is now available. We've been busy since the release angular2 v3.1.0 in May. Not only did we "drop the 2", but we also improved the compiler and tightened up the framework to give you smaller code, we updated the package structure to improve usability, and we added several new features. Check out the updated documentation to get started.
Just angular Upgrading to v4 will require more than updating your version constraint. The package has changed names (back) to angular – dropping the 2. You'll need to update your pubspec.yaml and the corresponding imports in your code. In most instances, find-and-replace should do the trick. Going forward, the package will be called package:angular. We'll just update the version number.
Smaller code The updated compiler in 4.0 allows type-based optimizations that not only improve runtime performance but generate better code because we are able to strongly type templates. A big result of the update is that many ap…

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…