1/Путь к первому мобильному приложению. Часть 1.2 - Изучаем язык Dart: Функции

Функции в 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}