🐰

【Dart】関数を引数として渡す基本的な使い方から見るforEach文

2020/12/03に公開

関数を変数として引数で渡す匿名関数(Functionクラス)の基本的な使い方から見ると、

forEach文が理解しやすかったです。

(関数を別途自分で用意することを省略できる。)

【Dart】制御フロー文

forEach文の理解

void forEach(void f(E element)) {
  for (E element in this) f(element);
}

基本例①

  • testOutput関数
    • 「callback」として、関数を引数として受け取る
    • StringのListから一つずつ取り出し、「callback」の引数として実行
void testOutput(void Function(String) callback) {
  final list = ['A', 'B', 'C'];
  for (final item in list) {
    callback(item);
  }
}

void main() {
  testOutput((String s) => print(s));
}

実行結果

A
B
C

基本例②

  • 基本例①からStringのリストを外に出した場合
void testOutput(List<String> list, void Function(String) callback) {
  for (final item in list) {
    callback(item);
  }
}

void main() {
  final list = ['A', 'B', 'C'];
  testOutput(list, (String s) => print(s));
}

実行結果

A
B
C

forEach利用

  • forEach文を実行
    • Listの中身を一つ一つ引数とした関数を反復実行
void main() {
  final list = ['A', 'B', 'C'];
  list.forEach((String s) => print(s));
}

実行結果

A
B
C
  • 備考①
    • 関数の内容少し修正し、実行
void main() {
  final list = ['A', 'B', 'C'];
  list.forEach((String s) => print(s.toLowerCase()));
}

実行結果

a
b
c
  • 備考②
    • 複数行の関数を実行
void main() {
  final list = ['A', 'B', 'C'];
  list.forEach((String s) {
    print('TEST');
    print(s);
  });
}

実行結果

TEST
A
TEST
B
TEST
C
  • 備考③
    • forEachを利用するListに合った関数を渡して実行
      • この場合は、Stringを引数とするvoid関数
void testOutputString(String s) {
  print(s);
}

void main() {
  final list = ['A', 'B', 'C'];
  list.forEach(testOutputString);
}

実行結果

A
B
C
  • 備考④
    • mapでも同様
void main() {
  final map = {'A': 100, 'B': 200, 'C': 100};
  map.forEach((String key, int value) {
    print('$key, $value');
  });
}

実行結果

A, 100
B, 200
C, 100

Discussion