Dart(9)-函数

一、函数定义

(1) 函数的返回类型可以省略 (不建议省略)。若省略,DartVM默认会在函数内的最后一行加上return null。

(2) 函数都有返回类型,void类型函数实际返回null

(3) 函数可以在函数内部定义,无限嵌套

(4) 支持缩写语法=>

(5) 支持可选命名参数

(6) 支持可选位置参数

(7) 支持闭包

(8) 支持匿名函数

(9)支持typedef关键字

(10) 支持顶层函数和局部函数,

二、函数的返回类型可以省略

void main() {

}
class Clazz {
	func() {
  	return null; //若不写,DartVM会默认加上
	}
}

三、函数内定义函数

void main() {
​
  int defineFun() {
    return 1+1;
  }
  
}//defineFun函数只能在main函数内部调用

四、支持缩写语法

当函数的{}内只有一行代码时,可以使用=>代替{},比如:

void todo() {
  print("Hello");
}
void todo2() => print("Hello");
​
int todo3(int a, int b) => a+b;

五、可选命名参数

int optionalNamedFun({int a=0, int b=0, int c}) {
  return a+b+c;
}
​
var x = optionalNamedFun(a:2,b:3);
print(x); //5

比如,上面的代码中c没有赋初始值,就会报下面的错,所以一定要记得在运算时赋初始值,不然DartMV会给null

lib/dartEx2.dart: Warning: Interpreting this as package URI, 'package:flutter_demo/dartEx2.dart'.
Unhandled exception:
NoSuchMethodError: The method '_addFromInteger' was called on null.
Receiver: null
Tried calling: _addFromInteger(5)
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      int.+ (dart:core-patch/integers.dart:10:38)
#2      optionalNamedFun (package:flutter_demo/dartEx2.dart:19:13)
#3      main (package:flutter_demo/dartEx2.dart:4:11)
#4      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#5      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

也可以这样写,固定参数+可选参数

int optionalNamedFun(int z,{int a=0, int b=0, int c=0}) {
  return z+a+b+c;
}
​
var x = optionalNamedFun(1,a:2,b:3);
print(x); //6

六、可选位置参数

把可选参数放到 [] 中,必填参数要放在可选参数前面

int optionalLocationFun(int z,[int a=0, int b=0, int c=0]) {
  return z+a+b+c;
}
​
var x = optionalLocationFun(1,2); //这里的2是给a赋值。
var y = optionalLocationFun(1); //这里的1是给z赋值。
print(x);
print(y);

Ps: 如果在参数中,定义的是集合,需要注意如下,必须使用const进行修饰

int optionalCollection({List list = const[1,2,3]}) {
​
}

七、支持闭包

一个可以使用另外一个函数作用域中的变量的函数。

Function closureFun(int a) {
    return (int b)=> a+b;
}
var operationFun =  closureFun(20); // a=20
print(operationFun(25)); // b=25

八、匿名函数

没有函数名称的函数。

可赋值给变量,通过变量调用,可以把匿名函数看成一个对象。也可在其他函数中直接调用或传递给其他函数。

 var printNoParamsFun = () => print("Hello"); //无参匿名函数
 var printParamsFun = (param) => print(param); //有参匿名函数
 (()=>print("hello"))(); //不推荐
​
 int Function(int i) anonymousFuc = (int i) => i + 1;
 print(anonymousFuc(1)+3); //5
 //源码中的forEach方法
 void forEach(void f(E element)) {
    for (E element in this) f(element);
 }

九、支持typedef(函数别名)

typedef就是给定义的函数取个别名,然后就可以使用operationFun来声明一个函数变量,这样就能清晰的表明了函数参数的类型及返回值的类型。

void main(){
  OperationFun add(int a, int b){
    print(a+b);
  }
  OperationFun fun = add(1, 2);
}
​
typedef OperationFun(int a, int b);

十、类函数

所谓类函数类似于java中的静态方法,就是在函数前面加个static。

class Clazz {
  static Object func() {
    return null;
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以举一个简单的例子来说明。假设你正在开发一个 Flutter 应用程序,需要使用一个 Python 库来进行数据处理。你可以使用 dart-py-interop 插件来实现这个功能。 首先,你需要在你的 Flutter 项目中添加 dart-py-interop 插件的依赖,可以在 `pubspec.yaml` 文件中添加以下代码: ``` dependencies: dart_py_interop: ^0.1.0 ``` 然后,你需要创建一个 Python 脚本,使用你需要的 Python 库来处理数据。例如,假设你需要使用 Pandas 库来处理一个 CSV 文件,你可以编写以下 Python 脚本: ```python import pandas as pd def process_csv(file_path): data = pd.read_csv(file_path) # 对数据进行处理 return processed_data ``` 接下来,你需要在 Flutter 代码中调用这个 Python 脚本。你可以使用 dart-py-interop 插件提供的 `PythonInterop` 类来实现这个功能。例如,你可以编写以下代码: ```dart import 'package:dart_py_interop/dart_py_interop.dart'; Future<List<dynamic>> processCsv(String filePath) async { final python = PythonInterop(); await python.loadModuleFromScript('process_csv', 'process_csv.py'); final result = await python.callFunction( 'process_csv', arguments: [filePath], ); python.dispose(); return result; } ``` 在这个代码中,我们使用 `PythonInterop` 类加载了一个名为 `process_csv` 的 Python 模块,并且调用了它的 `process_csv` 函数,并将 `filePath` 参数传递给它。最后,我们返回从 Python 中返回的结果。 使用 dart-py-interop 插件,你可以轻松地在 Flutter 应用程序中调用 Python 代码,实现更加复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值