Dart基础-函数

简介: <div class="markdown_views"><h2 id="函数">函数</h2><p>下面是一个函数的例子</p><pre class="prettyprint"><code class=" hljs applescript">void printNumber(num <span class="hljs-type">number</span>) {

函数

下面是一个函数的例子

void printNumber(num number) {
  print('The number is $number.');
}

虽然参考文档建议指定参数和返回值的类型,但是你可以不指定

printNumber(number) {
  print('The number is $number.');
}

如果函数只有一个表达式,你可以使用速写语法

void printNumber(num number) => print('The number is $number.');

=> expr; 是 { return expr;} 的简写语法,下面是调用函数的例子

printNumber(123);

可选参数

一个函数可以有两种参数:可选的和必需的,必需参数放在前面,后面跟可选参数
可选参数可以是位置参数或命名参数,两种都可以有默认值,如果没有提供默认值则为null

可选的命名参数

定义一个函数,使用 {param1, param2, …} 指定命名参数,调用函数时,你可以指定使用命名参数 paramName: value

enableFlags({bool bold, bool hidden}) {
  // ...
}

main(List<String> arguments) {
  enableFlags(bold: true, hidden: false);
}

使用(:)指定默认值

enableFlags({bool bold: false, bool hidden: false}) {
  // ...
}

main(List<String> arguments) {
  enableFlags(bold: true);
}

可选的位置参数

把参数用 [ ] 包装起来,就能标识成位置参数

String say(String from, String msg, [String device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

main(List<String> arguments) {
  //无可选参数的调用
  assert(say('Bob', 'Howdy') == 'Bob says Howdy');
  //有可选参数的调用
  assert(say('Bob', 'Howdy', 'smoke signal') == 'Bob says Howdy with a smoke signal');
}

使用 = 指定默认值

String say(String from, String msg, [String device = 'carrier pigeon', String mood]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  if (mood != null) {
    result = '$result (in a $mood mood)';
  }
  return result;
}

main(List<String> arguments) {
  assert(say('Bob', 'Howdy') == 'Bob says Howdy with a carrier pigeon');
}

main() 函数

每个程序都有main() 函数,作为程序的入口,返回值是void,还有一个可选参数

main(List<String> arguments) {
  print(arguments);
  print(arguments.length);
}

高阶函数

将函数作为参数传递给另一个函数

printElement(element) {
  print(element);
}

main(List<String> arguments) {
  var list = [1, 2, 3];
  list.forEach(printElement);
}

将一个函数分配给一个变量

main(List<String> arguments) {
  var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
  assert(loudify('hello') == '!!! HELLO !!!');
}

作用域

dart的作用域跟其他语言一样,直接看一个例子

var topLevel = true;

main(List<String> arguments) {
  var insideMain = true;

  myFunction() {
    var insideFunction = true;

    nestedFunction() {
      var insideNestedFunction = true;

      assert(topLevel);
      assert(insideMain);
      assert(insideFunction);
      assert(insideNestedFunction);
    }
  }
}

闭包

dart的闭包就是函数对象,其实跟JavaScript的闭包函数差不多,理论请参考JavaScript的闭包函数,这里直接写个例子

//返回一个函数对象,功能是返回累加的数字
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

main(List<String> arguments) {
  //创建一个函数add2,add2返回2
  var add2 = makeAdder(2);

  //创建一个函数add4,add4返回4
  var add4 = makeAdder(4);

  //add2返回2+3
  assert(add2(3) == 5);
  //add4返回4+3
  assert(add4(3) == 7);
}

函数是否相等

测试高阶函数、静态方法和实例方法是否相等

//一个高阶函数
foo() {}

class SomeClass {
  //一个静态方法
  static void bar() {}
  //一个实例方法
  void baz() {}
}

main(List<String> arguments) {
  var x;

  //比较高阶函数
  x = foo;
  assert(foo == x);

  //比较静态方法
  x = SomeClass.bar;
  assert(SomeClass.bar == x);

  //比较实例方法
  var v = new SomeClass();
  var w = new SomeClass();
  var y = w;
  x = w.baz;

  assert(y.baz == x);
  assert(v.baz != w.baz);
}
目录
相关文章
N..
|
5月前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
57 0
|
Dart
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
函数(Function)也被称为方法(Method)。其最直观的理解就是数据中的函数,比如y=f(x),在编程中,f对输入x进行处理,返回结果y,就是一个函数......
977 0
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
|
5月前
|
Dart JavaScript
Flutter - Dart 基础(数据类型)
【2月更文挑战第3天】
161 1
N..
|
5月前
|
自然语言处理 Dart 算法
Dart语言中函数的定义
Dart语言中函数的定义
N..
35 0
|
存储 Dart JavaScript
《深入浅出Dart》Dart库的使用和创建
Dart库的使用和创建 引言 在Dart中,代码重用和模块化可以通过库(libraries)和包(packages)实现。一个库就是一组代码,被一起打包为了实现一种或多种特定功能。一个包则是一种发布和分享Dart库的方式。在这一章,我们将详细介绍如何使用和创建Dart库和包,以及如何实现一个具有大数相加功能的库。 Dart库的使用
134 0
|
自然语言处理 Dart JavaScript
《深入浅出Dart》函数
函数 Dart语言作为一门面向对象的语言,函数在其中占据了非常重要的位置。本文将详细解析如何定义和调用函数,以及箭头语法,高阶函数和闭包等内容。 1. 函数的定义和调用 在Dart中,函数可以定义为一段实现特定功能的代码块,可以带有参数和返回值。 定义函数:
100 0
|
Dart 编译器 索引
Flutter 基础 | Dart 语法
Flutter 基础 | Dart 语法
169 0
|
存储 Dart 前端开发
Flutter(三)——一篇文章掌握Dart语言的用法(三)
Flutter(三)——一篇文章掌握Dart语言的用法(三)
261 0
Flutter(三)——一篇文章掌握Dart语言的用法(三)
|
存储 Dart JavaScript
Flutter(三)——一篇文章掌握Dart语言的用法(一)
Flutter(三)——一篇文章掌握Dart语言的用法(一)
373 0
Flutter(三)——一篇文章掌握Dart语言的用法(一)
|
Dart Java Kotlin
那些你不知道的Dart细节之函数(方法)(三)
Dart中的函数,也就是方法
128 0