dart系列之:dart语言中的函数

简介: dart系列之:dart语言中的函数

目录



简介


函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分。dart中的函数和java中的函数有什么区别呢?


dart作为一种面向对象的编程语言,它的函数也是一个对象,用Function来表示。先看下函数的定义:


abstract class Function {
  external static apply(Function function, List<dynamic>? positionalArguments,
      [Map<Symbol, dynamic>? namedArguments]);
  int get hashCode;
  bool operator ==(Object other);
}


既然函数是一个对象,那么可以将函数赋值给对象,还可以将函数当做参数传递给其他的函数。


下面是一个简单的函数,由返回值,函数名称,参数和函数体来表示:


bool isStudent(int age){
    return age < 20;
    }


尽管dart建议我们指定函数的返回值类型,但是你也可以忽略返回值:


isStudent(int age){
    return age < 20;
    }


函数还有一个简写方式,如果函数体只有一条语句,那么可以使用=> 来替代括号:


isStudent(int age) => age < 20;


看起来更加简洁。


函数的参数


dart中的函数参数有普通参数,也有命名参数。


普通参数很好理解,那么什么是命名参数呢?


命名参数就是给参数传递的时候起了一个名字,这样函数在调用的时候,可以指定参数的名字,来赋值。


看一个函数参数和命名参数的例子:


bool calculator(int age , {int? size}){
}


可以这样调用:


calculator(15,size:10);


默认情况下命名参数是可选的,也就是说函数在调用的时候可以选择是否传递可选的参数。


如果必须要传递某个参数,那么可以将其设置为required.


除了命名参数之外,dart还有可选的位置参数,就是将参数放在[]中,如下所示:


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


上面的函数在调用的时候,可以只传入普通参数,也可以额外的传入可选的位置参数,如下:


say('Bob', 'Howdy');
say('Bob', 'Howdy', 'smoke signal');


dart中的参数还可以设置默认值,如下:


String say(String from='mack', String msg, [String? device='ios']) {
  ...
}


main函数


dart中main函数是应用程序的启动入口,main()是一个特殊的函数,他是没有返回值的带有可选List参数的函数,如下所示:


void main() {
  print('Hello, World!');
}


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


匿名函数


大部分函数都是带有名字的,方便函数的调用。在某些情况下,函数也可以不带名字,这样的函数叫做匿名函数。


匿名函数就是没有名字的函数,如下所示:


([[Type] param1[, …]]) {
  codeBlock;
};


匿名函数通常用在不需要被其他场景调用的情况,比如遍历一个list:


const list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
  print('${list.indexOf(item)}: $item');
});


闭包


提到闭包,大家马上就会想到javascript,没错,除了javascript,dart中也可以构建闭包。


什么是闭包呢?简单点说就是函数的函数。也就是一个函数中定义的变量,在函数范围外被其他的函数所使用。


Function sum(int age1){
    return (int i) => age1 +i; 
}
void main() {
  var sum2 = sum(2);
  var result = sum2(5);
}


上例子中,sum传入的变量2,被在后续的sum2中使用。


函数的返回值


所有的函数都有返回值,如果没有显示返回的话,那么返回的就是null.


所以对下面的函数来说:


foo() {}


它的值是null,也就是说下面的表达式是true:


assert(foo() == null);


总结



以上,就是Dart中函数的定义了。

相关文章
N..
|
6天前
|
Dart
Dart语言中类的定义和使用
Dart语言中类的定义和使用
N..
15 0
|
6天前
|
Dart 编译器 API
Dart笔记:Dart 库
Dart笔记:Dart 库
116 0
N..
|
6天前
|
Dart
Dart语言
Dart语言
N..
11 0
|
JSON Dart 编译器
Dart简单介绍
Dart是一种面向对象、用于构建高性能应用程序的编程语言,它具有快速开发、易于维护和可移植性等特点,因此在 Flutter 应用程序开发方面越来越受欢迎。在这篇文章中,我们将深入探讨 Dart 语言的一些技术思考。 类型系统
Dart简单介绍
|
Dart JavaScript 前端开发
Numbers——Dart
Dart中的数字类型有两种,int和double。
Runes——Dart
Dart中,Runes是指UTF-32定义的Unicode字符串。 Unicode使用数字表示世界上所有的字母、数字和符号。因为Dart中的String是一系列UTF-16字节单元,而在String中想要表示32位的Unicode值,则需要特殊的语法。 一般我们使用 `\uXXXX` 这种形式表示一个Unicode码,`XXXX`表示4个十六进制值。例如,字符(♥)的Unicode字符是`\u2665`。 当十六进制数据多余或者少于4位时,将十六进制数放入到花括号中,例如,微笑表情(😆)是`\u{1f600}`。 String类中有几个属性你可以用来获取`rune`信息。
|
Dart
在 dart 中使用 equatable
在 dart 中使用 equatable
146 0
|
Dart 开发工具
使用 dart tear-off
使用 dart tear-off
85 0
|
Dart JavaScript 前端开发
Flutter(三)——一篇文章掌握Dart语言的用法(二)
Flutter(三)——一篇文章掌握Dart语言的用法(二)
248 0
|
存储 Dart JavaScript
Flutter(三)——一篇文章掌握Dart语言的用法(一)
Flutter(三)——一篇文章掌握Dart语言的用法(一)
334 0
Flutter(三)——一篇文章掌握Dart语言的用法(一)