Flutter基础 -- Dart 语言 -- 注释函数表达式

目录

[1. 注释](#1. 注释)

[1.1 单行注释](#1.1 单行注释)

[1.2 多行注释](#1.2 多行注释)

[1.3 文档注释](#1.3 文档注释)

[2. 函数](#2. 函数)

[2.1 定义](#2.1 定义)

[2.2 可选参数](#2.2 可选参数)

[2.3 可选参数 默认值](#2.3 可选参数 默认值)

[2.4 命名参数 默认值](#2.4 命名参数 默认值)

[2.5 函数内定义](#2.5 函数内定义)

[2.6 Funcation 返回函数对象](#2.6 Funcation 返回函数对象)

[2.7 匿名函数](#2.7 匿名函数)

[2.8 作用域](#2.8 作用域)

[3. 操作符](#3. 操作符)

[3.1 操作符表](#3.1 操作符表)

[3.2 算术操作符](#3.2 算术操作符)

[3.3 相等相关的操作符](#3.3 相等相关的操作符)

[3.4 类型判定操作符](#3.4 类型判定操作符)

[3.5 条件表达式](#3.5 条件表达式)

[3.6 位和移位操作符](#3.6 位和移位操作符)

[3.7 级联操作符](#3.7 级联操作符)

[3.8 其他操作符](#3.8 其他操作符)

[4. 流程控制](#4. 流程控制)

[5. 异常](#5. 异常)

错误的两种类型

[5.1 Exception 类](#5.1 Exception 类)

[5.2 Error 类](#5.2 Error 类)

[5.3 抛出错误](#5.3 抛出错误)

[5.4 捕获错误](#5.4 捕获错误)

[5.5 重新抛出错误以及finally](#5.5 重新抛出错误以及finally)

[5.6 自定义异常](#5.6 自定义异常)


1. 注释

1.1 单行注释

// Symbol libraryName = new Symbol('dart.core');

1.2 多行注释

/*

* Symbol

*

Symbol libraryName = new Symbol('dart.core'); MirrorSystem mirrorSystem = currentMirrorSystem(); LibraryMirror libMirror = mirrorSystem.findLibrary(libraryName); libMirror.declarations.forEach((s, d) => print('$s - $d'));

*/
一般用在需要说明 类 函数 功能 输入 输出

1.3 文档注释

/// `main` 函数

///

/// 符号

/// 枚举

///

void main() {

...

}
类、函数 请用 /// 方式定义,后期导出文档有帮助

2. 函数

2.1 定义

Dart 复制代码
int add(int x) {
  return x + 1;
}

调用
add(1);

2.2 可选参数

Dart 复制代码
int add(int x, [int? y, int? z]) {
  if (y == null) {
    y = 1;
  }
  if (z == null) {
    z = 1;
  }
  return x + y + z;
}

调用
add(1, 2);

可选参数

使用方括号 [] 来定义可选参数 yz。调用函数时可以选择传入或者不传入这两个参数。

可空类型

int? 表示 int 类型的值可以是 null。如果没有使用 int?,那么 Dart 不允许把 null 赋值给该参数。

默认值逻辑

在函数内部,通过 if (y == null)if (z == null) 检查 yz 是否为 null,如果是则赋值为默认的 1

2.3 可选参数 默认值

Dart 复制代码
int add(int x, [int y = 1, int z = 2]) {
  return x + y;
}

调用
int(1, 2);

就是cpp的缺省值

2.4 命名参数 默认值

Dart 复制代码
int add({int x = 1, int y = 1, int z = 1}) {
  return x + y + z;
}

调用
int(x: 1, y: 2);

这个会比可选参数更灵活,可以调用的时候再指定传参

2.5 函数内定义

Dart 复制代码
void main(){
  int add(int x){
    return x + x;
  }
  print(add(1));
}

cpp的就是lambda

2.6 Funcation 返回函数对象

Dart 复制代码
Function makeAdd(int x) {
  return (int y) => x + y;
}

调用
var add = makeAdd(1);
print(add(5));

这里是add接收了一个函数对象,然后在print里面调用了返回的函数对象

2.7 匿名函数

下面代码定义了只有一个参数 item 且没有参数类型的匿名方法。 List 中的每个元素都会调用这个函数,打印元素位置和值的字符串:

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

箭头函数 如果只有一个表达式

Dart 复制代码
list.forEach((item) => print('${list.indexOf(item)}: $item'));

2.8 作用域

下面是一个嵌套函数中变量在多个作用域中的示例:

Dart 复制代码
bool topLevel = true;

void main() {
  var insideMain = true;

  void myFunction() {
    var insideFunction = true;

    void nestedFunction() {
      var insideNestedFunction = true;

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

注意 nestedFunction() 函数可以访问包括顶层变量在内的所有的变量。简单说就是被包含的作用域内可以访问包含其的外部变量

3. 操作符

3.1 操作符表

优先级顺序 上面左边 优先级高于 右边下面

3.2 算术操作符

3.3 相等相关的操作符

3.4 类型判定操作符

Dart 复制代码
  int a = 123;
  String b = 'ducafecat';
  String c = 'abc';
  print(a as Object);
  print(b is String);
  print(c is! String);

3.5 条件表达式

Dart 复制代码
  bool isFinish = true;
  String txtVal = isFinish ? 'yes' : 'no';

  bool isFinish;
  isFinish = isFinish ?? false;
  or
  isFinish ??= false;

3.6 位和移位操作符

3.7 级联操作符

Dart 复制代码
  StringBuffer sb = StringBuffer();
  sb
  ..write('hello')
  ..write('word')
  ..write('\n')
  ..writeln('doucafecat');

如果没有级联操作符,就需要 sb.write(...);sb.write(...);....

3.8 其他操作符

Dart 复制代码
  String a;
  print(a?.length);

4. 流程控制

if else;for;while;do while;switch case;break;continue;相信这些就不用博主多说了哈

值得一提的是 continue 有一点不一样

continue 跳转指定位置(就像cpp的go to,新增了这个功能)

Dart 复制代码
String command = "close";
switch (command) {
  case "open":
    print("open");
    break;
  case "close":
    print("close");
    continue doClear;
  case "close2":
    print("close2");
    continue doClear;

  doClear:
  case "doClose":
    print("doClose");
    break;

  default:
    print("other");
}

5. 异常

错误的两种类型

5.1 Exception 类

Exception class

可以捕获,可以安全处理

5.2 Error 类

Error class

一般用在不可恢复,容易崩溃的情况

5.3 抛出错误

Dart 复制代码
  // Exception 对象
  throw new FormatException('这是一个格式错误提示');

  // Error 对象
  throw new OutOfMemoryError();

  // 任意对象
  throw '这是一个异常';

5.4 捕获错误

Dart 复制代码
  try {
    // throw new FormatException('这是一个格式错误提示');
    throw new OutOfMemoryError();
  } on OutOfMemoryError {
    print('没有内存了');
  } catch (e) {
    print(e);
  }

5.5 重新抛出错误以及finally

Dart 复制代码
  try {
    throw new OutOfMemoryError();
  } on OutOfMemoryError {
    print('没有内存了');
    rethrow;
  } catch (e) {
    print(e);
  } finally {
    print('end');
  }

try里面是抛出错误,on是捕获特定错误,catch是捕获所有错误,retgrow是重新抛出异常,finally是不管有没有错都会走的!

5.6 自定义异常

implements关键字可以自定义异常

Dart 复制代码
class DioError implements Exception {
  DioError(this.message, this.type);

  final String message;
  final String type;

  @override
  String toString() {
    return 'DioError{message: $message, type: $type}';
  }
}

void main(List<String> args) {
  throw DioError("error", "type");
}

创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖

相关推荐
啊猪是的读来过倒14 小时前
Vue 全局状态管理新宠:Pinia实战指南
前端·vue.js·flutter·pinia·全局状态管理
偷野的程咬金1 天前
了解flutter中SingleTickerProviderStateMixin的使用
flutter
zhang98800002 天前
VUE的底层原理分析vue框架的来龙去脉,和技术要点及难点和应用场景,小白的进阶之道
前端·vue.js·flutter
yrldjsbk2 天前
安卓app开发-基础-本地环境安装android studio且配置参数
android·ide·android studio
Lan.W2 天前
android Studio 无线开发调试: PC机远程安卓电脑 免费
android·ide·android studio
full courage2 天前
【Android】实现图片和视频混合轮播(无限循环、视频自动播放)
android·xml·kotlin·android studio·音视频·播放器·轮播
BruceGerGer2 天前
flutter开发实战-ListWheelScrollView与自定义TimePicker时间选择器
flutter·1024程序员节
有趣的杰克2 天前
Flutter【组件】点击类型表单项
android·flutter·ios·dart
茶卡盐佑星_2 天前
VUE的基础指令介绍
前端·vue.js·flutter
张风捷特烈2 天前
FlutterUnit & TolyUI | 布局游乐场
android·flutter