Dart入门—函数与运算符

函数

基本语法

void main(){printNameA("XiaoMing");printNameB("XiaoMing");printNameC("XiaoMing");
}// 规范语法
void printNameA(String name){print("My name is $name.");
}// 通俗语法
printNameB(name){print("My name is $name.");
}// 速写语法
void printNameC(String name) => print("My name is $name.");

主函数

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

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

可选参数

命名参数

void main() {printName(name:"XiaoMing", age:14);
}// 用 { } 把参数包装起来,就能标识命名参数
// 用 : 指定默认值
void printName({String name, int age, String sex:"female"}){print("My name is $name, $age years old, gender $sex.");
}

位置参数

main(List<String> arguments) {print(say("Bob", "Howdy"));print(say("Bob", "Howdy", "smoke signal"));
}// 用 [ ] 把参数包装起来,就能标识位置参数
// 用 = 指定默认值
String say(String from, String msg, [String device, String mood = "good"]){String result = "$from says $msg.";if (device != null) {result = "$result with a $device.";}if (mood != null) {result = '$result (in a $mood mood)';}return result;
}

高阶函数

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

void main() {List list = [1, 2, 3];list.forEach(printElement);
}printElement(element){print(element);
}

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

void main() {var loudify = (msg) => "!!! ${msg.toUpperCase()} !!!";print(loudify("hello"));
}

闭包

dart的闭包就是函数对象,其实跟JavaScript的闭包函数差不多,理论请参考JavaScript的闭包函数

void main() {// 创建一个函数add2,返回加2Function add2 = makeAdder(2);// 创建一个函数add4,返回加4Function add4 = makeAdder(4);// 2 + 3 = 5print(add2(3));// 4 + 3 = 7print(add4(3));
}// 返回一个函数对象,功能是返回累加的数字
Function makeAdder(int addBy){return (int i) => addBy + i;
}

函数判断

void main() {var x;// 比较高阶函数x = foo;print(foo == x);// 比较静态方法x = SomeClass.bar;print(SomeClass.bar == x);// 比较实例方法var v = new SomeClass();var w = new SomeClass();var y = w;x = w.baz;print(y.baz == x);print(v.baz != w.baz);
}// 一个高阶函数
foo(){}class SomeClass{// 一个静态方法static void bar(){}// 一个实例方法void baz(){}
}

运算符

dart定义的运算符如下所示,前排的优先级高于后排的,例如”%“ > ”==“ > ”&&“,但括号能改变优先级

描述 运算符
一元后缀 expr++ 、 expr– 、 () 、 [] 、 .
一元前缀 -expr 、 !expr 、 ~expr 、 ++expr 、 –expr
乘除法 * 、 / 、 % 、 ~/
加减法 + 、 -
移位 << 、 >>
按位与 &
按位或 |
关系和类型判断 >= 、 > 、 <= 、 < 、 as 、 is 、 is!
相等 == 、 !=
逻辑与 &&
逻辑或 ||
条件式 expr1 ? expr2 : expr3
级联 ..
赋值 = 、 /= 、 ~/= 、 %= 、 += 、 -= 、 <<= 、 >>= 、 &= 、 ^= 、

算术运算符

运算符 意义
+ 加法
- 减法
-expr 取反,或称否定(反向表达式)
* 乘法
/ 除法
~/ 整除
% 模运算,取整除后的余
++var var = var + 1(执行前加1)
var++ var = var + 1(执行后加1)
–var var = var - 1(执行前减1)
var– var = var - 1(执行后减1)

相等与关系运算符

运算符 意义
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

类型运算符

用as、is和is!可以很方便的在执行时检查类型
用 obj is T 这个语法可以判断obj是否实现了T

if (emp is Person) {emp.firstName = 'Bob';
}

也可以使用as运算符检查

(emp as Person).firstName = 'Bob';

赋值运算符

赋值用 = 运算符,如果在前面加上其他运算符比如 += ,就可以组成复合赋值运算符

=    –=    /=    %=    >>=    ^=
+=    *=    ~/=    <<=    &=    |=

复合赋值运算符的语法说明是 a op= b 等于 a = a op b

var a = 2;
a *= 3;
assert(a == 6);

逻辑运算符

运算符 意义
!expr 反转表达式,假为真,反之亦然
|| 逻辑或
&& 逻辑与

按位和位移运算符

运算符 意义
&
|
^ 异或
~expr 按位补码(0成为1;1变成0)
<< 左移位
>> 右移位

其它运算符

运算符 名称 意义
() 函数应用 表示一个函数调用
[] 访问列表 在列表中索引指定值
expr1 ? expr2 : expr3 条件式 如果expr1为真,执行expr2,否则执行expr3
. 成员访问 选择对象的成员,例如foo.bar
.. 级联 对对象的成员执行多个操作

Dart入门—函数与运算符相关推荐

  1. Dart 学习笔记-函数及运算符

    函数 Dart 是一门真正面向对象的语言, 甚至其中的函数也是对象 . 这也意味着函数可以被赋值给变量或者作为参数传递给其他函数. 也可以把 Dart 类的实例当做方法来调用. 以下是函数实现的示例: ...

  2. Dart入门—控制流程与其他

    Dart入门-控制流程与其他 控制流程 if~else if语句和可选的else语句,简单的if语句可以用条件运算符( ? : )来处理 if (isRaining()) {you.bringRain ...

  3. 【C++入门】C++ 运算符的重载

    C++运算符的重载 文章目录 C++运算符的重载 一.运算符重载基本概念 二.赋值运算符的重载 三.运算符重载为友元函数 四.流插入运算符和流提取运算符的重载 五.类型转换运算符和自增.自减运算符的重 ...

  4. python ** 运算符_Python从入门到放弃运算符(2)

    摘要:上一篇Python从入门到放弃-运算符(1),讲了Python的运算符中的算术运算符.赋值运算符.比较(关系)运算符,这篇继续讲Python的运算符. 逻辑运算符 逻辑运算符是对真和假两种布尔值 ...

  5. 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )

    文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...

  6. TypeScript基础入门 - 函数 - 简介

    2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/ ...

  7. [Python图像处理] 一.图像处理基础知识及OpenCV入门函数

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. 友元函数重载+运算符

    #include<iostream> //#include<vector> using namespace std; class Vector {private:int a;i ...

  9. Dart入门—库、泛型与异常

    Dart入门-库.泛型与异常 库 Pub仓库 在Pub上可以下载到支持各种功能的包,首页在根目录下建立pubspec.yaml文件 name: test_app dependencies:sqljoc ...

最新文章

  1. 概率论中指数分布介绍及C++11中std::exponential_distribution的使用
  2. 在C#中使用SerialPort类实现串口通信
  3. SCCM 2016 配置管理系列(Part 12 )
  4. 基于pxe+dhcp+ks实现自动安装系统
  5. 在Servlet中向客户端写Cookie信息
  6. 简单阐述下OC中UIImage三种创建方式~~~
  7. 外星人入侵游戏--python实战 (附完整代码)
  8. matlab实现整数规划/01规划
  9. 基于Linux的USB主/从设备之间的三种通信方式-转
  10. mysql5.7 timestemp default value error
  11. 关于Linux下载工具
  12. Jsoup爬虫并解析网页
  13. Maven 详解及常用命令
  14. pmp中项目经理如何进行目标设定
  15. 医学图像预处理之CT成像原理
  16. (转载)程序员应该访问的最佳网站中文版
  17. AVC编码中的规格 :High、Baseline、Main什么意思?还有High@L3.0、High@L4.0、High@L5.1等
  18. Win10笔记本开热点供移动端连接后电脑无法连网
  19. 中国式的父慈子孝:爸妈用子女旧手机
  20. C/C++ Linux 后台服务器开发高级架构师学习知识路线总结

热门文章

  1. 洛谷 P4017 最大食物链计数
  2. Android之EditText练习
  3. Java中JDK安装以及环境变量设置
  4. http和websocket共用同一端口
  5. 将coco数据集转为voc格式代码
  6. STM32L562开发板开箱记 STM32L562E-DK Discovery kit电路功能分析
  7. B树和B+树详细解析
  8. django框架如何提升性能?(高并发)摘自网络
  9. vue element new vue const
  10. 【探路者】第六周立会报告5(总第38次)