関数 – Dart逆引きリファレンス

2012.04.02

関数(Functions)

関数を定義したい

戻り値の型 関数名( パラメータ ) { 処理 }」のように定義します。

String hello(String name) {
  return 'Hello, ${name}!';
}

Dartでは戻り値の型指定は任意であるため省略が可能です。

hello(name) {
  return 'Hello, ${name}!';
}

戻り値を指定したい

キーワード「return」を用いて値を返してあげます。

hello(name) { return 'Hello, ${name}!'; }
hello('Dart'); // == 'Hello, Dart!'

値を返さない関数は「null」が返ります。

((){})(); // == null

関数を短縮形で記述することもできます。

isZero(num) => num == 0;
isZero(1); // == false
isZero(0); // == true

関数を変数に代入して利用したい

無名関数を変数に代入します。

var hello = (name) {
  return 'Hello, ${name}!';
};
hello('Dart'); // == 'Hello, Dart!'

短縮形でシンプルに記述することも可能です。

var hello = (name) => 'Hello, ${name}!';

関数にオプションパラメータを用意したい

オプションとなるパラメータを「[]」で囲みます。

var func = (param, [opt_param1, opt_param2]) {
  var result = param;
  if (opt_param1 != null) {
    result += opt_param1;
  }
  if (opt_param2 != null) {
    result += opt_param2;
  }
  return result;
};
func('hoge', 'piyo'); // == 'hogepiyo'

関数のパラメータにデフォルト値を指定したい

オプションパラメータに値を代入する記述を行います。

var func = (param, [opt_param1='hoge', opt_param2='hoge']) => param + opt_param1 + opt_param2;
func('hoge', 'piyo'); // == 'hogepiyohoge'

名前付きパラメータを使用したい

関数を呼び出す際、「オプションパラメータ名:値」という形式を指定します。

var func = (param, [opt_param1='hoge', opt_param2='hoge']) => param + opt_param1 + opt_param2;
func('hoge', opt_param2: 'fuga', opt_param1: 'piyo'); // == 'hogepiyofuga'

可変長引数を使用したい

Dartでは可変長引数はサポートされません。

アクセッサメソッドを定義したい

ゲットメソッドであれば「get」キーワード、セットメソッドであれば「set」キーワードを、関数名の前に記述することでアクセッサを定義することができます。

class Hello {
  String _name;
  String get name() => _name;
  void set name(String value) {
    _name = value;
  }
}

void main() {
  Hello hello = new Hello();
  hello.name = 'Dart';
  print('Hello, ${hello.name}!');
}

Dart Editorは、インスタンス変数名のPrefixに「_(アンダースコア)」があるとプライベートな変数であると解釈します。
※候補左端のアイコンが緑丸から赤丸になります。

上記例でいえば_nameへのアクセスは可能なので、あくまでも「プライベート変数的に定義した」という意思表示に止まることに注意しましょう。