Функции в Dart можно записывать как в стандартном представлении, так и используя краткую форму описания (если позволяет код).
Также как и других языках функции могут содержать позиционные и именные параметры, среди которых могут быть необязательные и с заданными значением по-умолчанию.
Рассмотрим всё в коде:
void printValue ( String value ) {
print ( 'Value: $value' );
}
printValue ( 'Test!' ); // Value: Test!
var listValue = <String>[ 'Hello' , 'world' , 'Dart' ];
listValue.forEach ( printValue );
// Value: Hello
// Value: world
// Value: Dart
// Стандартная запись функции
listValue.forEach ( ( v ) {
print ( 'Value Full: $v' );
} );
// Value Full: Hello
// Value Full: world
// Value Full: Dart
// Краткая запись функции
listValue.forEach ( ( v ) => print ( 'Value Short: $v' ) );
// Value Short: Hello
// Value Short: world
// Value Short: Dart
// Функция в переменной
var toUp = ( v ) => print ( 'Value toUpperCase: ${v.toUpperCase()}' );
toUp ( 'Lesson' ); // Value toUpperCase: LESSON
listValue.forEach ( toUp );
// Value toUpperCase: HELLO
// Value toUpperCase: WORLD
// Value toUpperCase: DART
// Функция с именными параметрами
String getPeople ( { String lastname , String firstname , int age , bool isMan = true } ) {
return "${lastname.toUpperCase()} $firstname, $age y.o., ${isMan ? 'Man' : 'Women'}";
}
print ( getPeople ( age : 31 , lastname : 'Marchenko' , firstname : 'Alexey' ) ); // MARCHENKO Alexey, 31 y.o., Man
// Функция с позиционными параметрами, в том числе необязательными
void printChat ( String username , String message , [ bool isModer , bool isAdmin = false ] ) {
// Если мы объявили значение по-умолчанию, проверка на null не нужна
if ( isAdmin == true )
username = 'Admin ${username.toUpperCase()}';
// Если мы не объявили значение по-умолчанию, проверка на null необходима для избежания ошибок
else if ( isModer != null && isModer == true )
username = 'Moder $username';
print ( '$username: $message' );
}
printChat ( 'fioru' , 'Hello, people!' , true , true ); // Admin FIORU: Hello, people!
printChat ( 'user' , 'Hi, fioru!' ); // user: Hi, fioru!
printChat ( 'Alex' , ':)' , true ); // Moder Alex: :)
// Функция со сложными параметрами
void printScoreAndLang ( {
List<int> scores = const [1,2,3,4,5,6,7,8,9,10],
Map lang = const { 'php' : 'PHP' , 'dart' : 'Dart' , 'js' : 'JavaScript' }
} ) {
print ( 'Scores: $scores' );
print ( 'Lang: $lang' );
}
printScoreAndLang ( );
// Scores: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// Lang: {php: PHP, dart: Dart, js: JavaScript}