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

Dart in 2016: The fastest growing programming language at Google, 2nd fastest growing in TIOBE Index

Dart was the fastest growing programming language at Google in 2016 with millions of lines of code written. It also made it to TIOBE Index Top 20 this month (see TIOBE's methodology).

It takes time to build something as ambitious as Dart and, in some ways, Dart is still in its infancy. But we're glad the hard work is starting to pay off.

Many thanks to our amazing community!

We're going to celebrate by ... releasing 1.22 next week (as per our usual 6 week release schedule).

AngularDart is going all Dart

Until now, the multiple language flavors of Angular 2 were written as TypeScript source, and then automatically compiled to both JavaScript and Dart. We're happy to announce that we’re splitting the Angular 2 codebase into two flavors – a Dart version and a TypeScript/JavaScript version – and creating a dedicated AngularDart team.

This is amazing news for Dart developers because:

The framework will feel more like idiomatic Dart.It will make use of Dart features that couldn't work with the TypeScript flavor. It will be faster.
This is equally great news for our TypeScript and JavaScript developers, by the way. Cleaner API, performance gains, easier contributions. Read more on the Angular blog.

Angular 2 for Dart is used by many teams at Google. Most famously by the AdWords team, but many other Google teams build large, mobile-friendly web apps. Some of the top requests from these teams were: make the API feel like Dart, provide a faster edit-refresh cycle, and improve applicat…

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…