Tips for golfing in Dart

5

1

Dart is an object oriented programming language borrowing from both Java and Javascript. What general tips do you have for golfing in Dart? I'm looking for ideas that can be applied to code golf problems in general that are at least somewhat specific to Dart (e.g. "remove comments" is not an answer). Please post one tip per answer.

If a tip is similar to Java/JS, please link to the answer in the original language's thread as well if you can.

Taken mostly from Joey's Tips for Powershell

Elcan

Posted 2018-11-09T08:17:17.450

Reputation: 913

Answers

3

Variable declaration

Regular variable declaration takes 4 bytes (var) + 2 bytes/variable (i,). You can declare variables as optional named parameters for your function and shave a few bytes.

f(){var i,j,k;} //Takes 15 bytes
g({i,j,k}){}  //Takes 12 bytes

Note: This doesn't work for non-constant values, for example:

f({i=List}){}  //Works
g({i=[]}){}  //Doesn't work

f({i=0,j=0}){}  //Works
g({i=0,j=i}){}  //Doesn't work

Elcan

Posted 2018-11-09T08:17:17.450

Reputation: 913

3

Implicit parameter passing

In some cases where Dart expects a function to be declared, you can code the function elsewhere, and then just pass its name. Dart will take care of passing the value automatically. Let me illustrate :

[0,1,2,3,4,5].forEach((i) => print(i)); //Using a lambda
[0,1,2,3,4,5].forEach(print); //Using implicit parameter passing since print() expects a similar parameter

You can also use your own functions

f(List i){
    i.forEach(print); //Prints each number on a new line
}

[[0,1], [1,2]].forEach(f); //Prints 0 \n 1 \n 1 \n 2\n

If you know a lambda might be used in multiple places, for example a map(), it can be useful to make it its own function and pass it that way instead of declaring it multiple times.

Elcan

Posted 2018-11-09T08:17:17.450

Reputation: 913

Is this not just a consequence of first-class functions? (I don't know Dart) – Quelklef – 2018-11-09T12:48:47.353

Looks like it's the case. I didn't know this was more widely spread https://www.dartlang.org/guides/language/language-tour#functions-as-first-class-objects

– Elcan – 2018-11-09T12:51:08.290

2

String conversion and concatenation

Dart doesn't allow for concatenation for types other than String and doesn't implicitly convert to String like C# does for example.

It however includes a very useful way to concatenate variables without needing to use any addition operator or explicitly casting to String (using the .toString() method).

var i=0,j=1,k=2;
var s0='$j'; //'1'
var s1='$i$j$k'; //'012'
var s2='i=$i'; //'i=0'

You can also perform operations directly in the ${} section and save a few temporary variable declarations.

var i=0,j=1,k=2;
var s='${i+j+k}'; //'3'

Elcan

Posted 2018-11-09T08:17:17.450

Reputation: 913

0

Save bytes on import

When you import things you can skip the space :

import 'dart:io'
import'dart:io' //1 byte saved

OptiFine

Posted 2018-11-09T08:17:17.450

Reputation: 1