LoginSignup
5
4

More than 3 years have passed since last update.

Dart で Hello World

Posted at

Dart を Homebrew で macOS にインストールする

Homebrew を使って Dart をインストールする。
インストール方法は Dart 公式ドキュメントの Get the Dart SDK | Dart を参考にした。

$ brew tap dart-lang/dart
$ brew install dart
$ which dart
/usr/local/bin/dart

$ dart --version
Dart VM version: 2.7.0 (Fri Dec 6 16:26:51 2019 +0100) on "macos_x64"

Hello World

以下の内容の hello.dart というファイルを用意する。

hello.dart
void main() {
  print('Hello, World!');
}

dart コマンドで実行する。

$ dart hello.dart
Hello, World!

参考:

ネイティブの実行ファイルを生成する

dart2native コマンドでスタンドアローンの実行ファイルを生成することができる。

$ dart2native hello.dart -o hello
Generated: /Users/alice/hello

生成された実行ファイルは単体で実行することが可能。

$ ./hello 
Hello, World!

ドキュメントによると、書いたプログラム自体のネイティブコードだけでなく、型チェックとガベージコレクションの処理をする Dart ランタイムが含まれているとのこと。

dart2native | Dart

A standalone executable is native machine code that’s compiled from the specified Dart file and its dependencies, plus a small Dart runtime that handles type checking and garbage collection.

各種処理

ソースコードは Dart programming language | Dart トップページで提示されているものを使用した。

関数を使う

以下の内容の functions.dart というファイルを用意する。

functions.dart
// A function declaration.
int timesTwo(int x) {
  return x * 2;
}

// Arrow syntax is shorthand for `{ return expr; }`.
int timesFour(int x) => timesTwo(timesTwo(x));

// Functions are objects.
int runTwice(int x, Function f) {
  for (var i = 0; i < 2; i++) {
    x = f(x);
  }
  return x;
}

main() {
  print("4 times two is ${timesTwo(4)}");
  print("4 times four is ${timesFour(4)}");
  print("2 x 2 x 2 is ${runTwice(2, timesTwo)}");
}

実行結果。

$ dart functions.dart 
4 times two is 8
4 times four is 16
2 x 2 x 2 is 8

if else 文とループ処理

if-and-loop.dart
bool isEven(int x) {
  // An if-else statement.
  if (x % 2 == 0) {
    return true;
  } else {
    return false;
  }
}

List<int> getEvenNumbers(Iterable<int> numbers) {
  var evenNumbers = <int>[];

  // A for-in loop.
  for (var i in numbers) {
    // A single-line if statement.
    if (isEven(i)) evenNumbers.add(i);
  }

  return evenNumbers;
}

main() {
  var numbers = List.generate(10, (i) => i);
  print(getEvenNumbers(numbers));
}

実行結果。

$ dart if-and-loop.dart 
[0, 2, 4, 6, 8]

配列、連想配列、集合

collection.dart
// A list literal.
var lostNumbers = [4, 8, 15, 16, 23, 42];

// A map literal.
var nobleGases = {
  'He': 'Helium',
  'Ne': 'Neon',
  'Ar': 'Argon',
};

// A set literal.
var frogs = {
  'Tree',
  'Poison dart',
  'Glass',
};

main() {
  print(lostNumbers.last);
  print(nobleGases['Ne']);
  print(frogs.difference({'Poison dart'}));
}

実行結果。

$ dart collection.dart 
42
Neon
{Tree, Glass}

参考:

クラス

classes.dart
// Abstract classes can't be instantiated.
abstract class Item {
  use();
}

// Classes can implement other classes.
class Chest<T> implements Item {
  List<T> contents;

  // Constructors can assign arguments to instance variables using `this`.
  Chest(this.contents);

  use() => print("$this has ${contents.length} items.");
}

class Sword implements Item {
  int damage = 5;

  use() => print("$this dealt $damage damage.");
}

// Classes can extend other classes.
class DiamondSword extends Sword {
  int damage = 50;
}

main() {
  // The 'new' keyword is optional.
  var chest = Chest<Item>([
    DiamondSword(),
    Sword(),
  ]);

  chest.use();

  for (var item in chest.contents) {
    item.use();
  }
}

実行結果。

$ dart classes.dart 
Instance of 'Chest<Item>' has 2 items.
Instance of 'DiamondSword' dealt 50 damage.
Instance of 'Sword' dealt 5 damage.

参考資料

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4