Menu
Coddy logo textTech

無名関数

CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 44/65。

これまで、calculateTotalprintMessage のような名前を持つ関数を作成してきました。しかし、特定のタスクのためだけに単純な関数が必要な場合があり、それに名前を付けるのが不要に感じることがあります。ここで匿名関数が役に立ちます。

匿名関数とは、名前のない関数のことです。必要な場所に直接定義するため、短時間の使い捨ての操作においてコードをより簡潔に記述できます。構文は単純で、パラメータリストの後に関数本体を記述するだけです:

(parameter) {
  // 関数本体
}

匿名関数は、リストのメソッドで使用する場合に特に便利です。例えば、リストの各項目を出力するために個別の名前付き関数を作成する代わりに、forEach メソッドで直接匿名関数を使用できます。

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print(fruit);
});

このアプローチは、特に関数のロジックが単純で、プログラムの他の場所で再利用されない場合に、コードをクリーンで集中した状態に保ちます。

challenge icon

チャレンジ

簡単

無名関数を使用して従業員名のリストを処理するプログラムを作成してください。このプログラムでは、forEach メソッドで無名関数を使用して、リストの各要素に対して異なる操作を行う方法を実演します。

  1. カンマで区切られた従業員名を含む文字列入力を読み取ります(例:"Alice,Bob,Charlie,Diana")。
  2. split() メソッドを使用して、入力文字列を個々の名前のリストに分割します。
  3. forEach メソッドと無名関数を使用して、各従業員名にウェルカムメッセージを添えて出力します。
  4. 別の無名関数を伴う forEach メソッドを使用して、各従業員名を大文字で出力します。
  5. 3つ目の無名関数を伴う forEach メソッドを使用して、各従業員名とその文字数を出力します。

例えば、入力が "Alice,Bob,Charlie" の場合、プログラムは次のように出力する必要があります:

Processing employee list: Alice,Bob,Charlie
===========================================
Welcome Messages:
Welcome to the team, Alice!
Welcome to the team, Bob!
Welcome to the team, Charlie!
===========================================
Names in Uppercase:
ALICE
BOB
CHARLIE
===========================================
Name Lengths:
Alice has 5 characters
Bob has 3 characters
Charlie has 7 characters

入力が "John,Sarah" の場合、プログラムは次のように出力する必要があります:

Processing employee list: John,Sarah
===========================================
Welcome Messages:
Welcome to the team, John!
Welcome to the team, Sarah!
===========================================
Names in Uppercase:
JOHN
SARAH
===========================================
Name Lengths:
John has 4 characters
Sarah has 5 characters

プログラムでは、それぞれ独自の無名関数を持つ3つの個別の forEach メソッド呼び出しを使用する必要があります。無名関数は、名前を付けずにインラインで定義する必要があります。各無名関数は、現在の従業員名を表す単一のパラメータを受け取り、指定された操作を実行する必要があります。文字列補間を使用して、出力メッセージを上記のとおり正確にフォーマットしてください。

チートシート

匿名関数は、名前のない関数であり、必要な場所で直接定義されます。構文は、パラメータリストの後に関数本体が続きます:

(parameter) {
  // 関数本体
}

匿名関数は、forEachのようなリストメソッドで特に便利です:

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print(fruit);
});

このアプローチにより、他で再利用されない単純な一回限りの操作に対して、コードをクリーンで集中した状態に保つことができます。

自分で試してみよう

import 'dart:io';

void main() {
  // 従業員名を含む入力文字列を読み取ります
  String? input = stdin.readLineSync();
  
  // 入力を名前のリストに分割します
  List<String> employeeNames = input!.split(',');
  
  // 初期の処理メッセージを出力します
  print('Processing employee list: $input');
  print('===========================================');
  
  // TODO: 以下にコードを記述してください
  // 無名関数を使用してforEachを使い、以下を行います:
  // 1. 歓迎メッセージを出力する
  // 2. 名前を大文字で出力する  
  // 3. 名前の長さを出力する
  
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン