Dart入门—函数与运算符
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入门—函数与运算符相关推荐
- Dart 学习笔记-函数及运算符
函数 Dart 是一门真正面向对象的语言, 甚至其中的函数也是对象 . 这也意味着函数可以被赋值给变量或者作为参数传递给其他函数. 也可以把 Dart 类的实例当做方法来调用. 以下是函数实现的示例: ...
- Dart入门—控制流程与其他
Dart入门-控制流程与其他 控制流程 if~else if语句和可选的else语句,简单的if语句可以用条件运算符( ? : )来处理 if (isRaining()) {you.bringRain ...
- 【C++入门】C++ 运算符的重载
C++运算符的重载 文章目录 C++运算符的重载 一.运算符重载基本概念 二.赋值运算符的重载 三.运算符重载为友元函数 四.流插入运算符和流提取运算符的重载 五.类型转换运算符和自增.自减运算符的重 ...
- python ** 运算符_Python从入门到放弃运算符(2)
摘要:上一篇Python从入门到放弃-运算符(1),讲了Python的运算符中的算术运算符.赋值运算符.比较(关系)运算符,这篇继续讲Python的运算符. 逻辑运算符 逻辑运算符是对真和假两种布尔值 ...
- 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...
- TypeScript基础入门 - 函数 - 简介
2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/ ...
- [Python图像处理] 一.图像处理基础知识及OpenCV入门函数
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 友元函数重载+运算符
#include<iostream> //#include<vector> using namespace std; class Vector {private:int a;i ...
- Dart入门—库、泛型与异常
Dart入门-库.泛型与异常 库 Pub仓库 在Pub上可以下载到支持各种功能的包,首页在根目录下建立pubspec.yaml文件 name: test_app dependencies:sqljoc ...
最新文章
- 概率论中指数分布介绍及C++11中std::exponential_distribution的使用
- 在C#中使用SerialPort类实现串口通信
- SCCM 2016 配置管理系列(Part 12 )
- 基于pxe+dhcp+ks实现自动安装系统
- 在Servlet中向客户端写Cookie信息
- 简单阐述下OC中UIImage三种创建方式~~~
- 外星人入侵游戏--python实战 (附完整代码)
- matlab实现整数规划/01规划
- 基于Linux的USB主/从设备之间的三种通信方式-转
- mysql5.7 timestemp default value error
- 关于Linux下载工具
- Jsoup爬虫并解析网页
- Maven 详解及常用命令
- pmp中项目经理如何进行目标设定
- 医学图像预处理之CT成像原理
- (转载)程序员应该访问的最佳网站中文版
- AVC编码中的规格 :High、Baseline、Main什么意思?还有High@L3.0、High@L4.0、High@L5.1等
- Win10笔记本开热点供移动端连接后电脑无法连网
- 中国式的父慈子孝:爸妈用子女旧手机
- C/C++ Linux 后台服务器开发高级架构师学习知识路线总结