Dart Learn Notes 02
Functions
Dart是一门面向对象的语言,所以即便是方法也是一个对象,它的类型是Function.
这就意味着方法可以指向变量,也可以作为方法中的参数供其他方法使用。甚至可以让
一个类作为一个方法,这种类叫Callable classes,即回调类。
bool isTrule(String args) {
return args != Null;
}
定义一个方法注意返回值和参数。
在Dart中是不允许出现这种方法的:
bool isTrule(String args) {
return args != Null;
}
bool isTrule(int args,String name) {
return args != Null;
}
java中可以允许方法的重载但是在Dart是不行的,这点倒像是脚本语言。
bool isTrue(int a ) => a != null;
print(isTrue(3));
如果一个方法中只有一个执行函数可以使用上面那种方式写。有点像js中的回调,也像是
java中的lambda表达式。特别需要强调的是“只有一个执行函数”这句话,用 => 这种执行
的语句不能是if,else这种条件判断,但是可以使用三元运算符。
可选参数
一个方法中如果由多个参数,如何规定哪些是必传的,哪些是可选的java是一种强类型语言,如果在java方法中定义一个含有多个参数的方法,我们可以把不需要传的那个参数传一个null进去,但还是得传。Dart中更轻巧一些,只需要一些注解就可以实现,就像定义api接口参数一样方便。
比如像下边这样:
const todone({String name, @required int id})
在Dart中,一个方法参数如果是可选参数,那它可以使命名参数也可以是基于位置的参数。
这句话有点绕,还是举两个栗子:
- 可选命名参数
所谓可选命名参数就是下边这种:
定义方法
int getLuckyNum({int year,int month,int day}){
var luckNum = year + month;
if(day != null){
luckNum = luckNum + 666;
}
return luckNum;
}
调用方法:
var result = getLuckyNum(year:1,month:2);
通俗点说就是把参数名和值以k:v的形式传过去。但是方法参数列表需要用{}包裹起来
- 可选位置参数
所谓可选位置参数:
定义方法:
int getLuckyNum(int year,int month,[int day]){
var luckNum = year + month;
if(day != null){
luckNum = luckNum + 666;
}
return luckNum;
}
调用方法:
var result = getLuckyNum(1,2);
特点就是在定义方法时将可选参数放到[]中。
在调用的时候day这个参数是可选的,传和不传会影响上边那个方法的执行结果。
这些可选参数方法是可以赋值默认值的,
int getLuckyNum(int year,int month,[int day = null){
var luckNum = year + month;
if(day != null){
luckNum = luckNum + 666;
}
return luckNum;
}
对上边的例子稍作修改,day = null是对这个可选字段的默认值,如果调用方法的时候不传,它默认就是null。
ps: 可选位置参数和可选命名参数不能同时存在。而且,必选参数一定在参数列表前边。
主方法
main()
所有程序都有一个启动入口,main()方法返回值类型void,参数是一个List的可选参数。
方法参数类(大概应该这么称呼。。。)
就是说把一个方法作为参数类进行传递,如下代码:
void doFunction(int num){
print(num);
}
var list = [1,2,3];
list.forEach(doFunction);
doFunction这个方法作为list.forEach()的参数,进行处理。
匿名方法
或者写的简单一点,上边学过一个只有一条执行语句的方法写法:
var list = [1,2,3];
list.forEach((item) => print(item));
像上边这种连方法名字都被隐藏起来只有数据流处理的方法,就是匿名方法。
词法作用域
bool top = true;
main(List<String> args) {
var insideFlag = true;
void fun1() {
var fun1Flag = true;
void fun2() {
print('start');
print(insideFlag);
var fun2Flag = true;
print(top);
print(insideFlag);
print(fun1Flag);
print(fun2Flag);
}
fun2();
}
fun1();
}
就像java一样,每个变量都有自己的作用域,其实也就是{}内才有效,像那个top可以在这个类的所有地方获取到。
测试函数是否相等
之前说过在dart中连方法也是个对象
void foo(){}
class A {
static void bar(){}
void baz(){}
}
main(List<String> args) {
var x;
x = foo;
print(x == foo);
x = A.bar;
print(x == A.bar);
var a = new A();
var b = new A();
print(a.baz == b.baz );
var c = A();
print(a ==c);
}
返回值
每个方法都有一个返回值,如果不写,默认为null
foo() {};
assert(foo() == null);
Dart Learn Notes 02的更多相关文章
- Dart Learn Notes 04
流程控制语句 流程控制语句的作用就是控制代码的执行流程. if and else var a = 10; if(a > 10){ print('ok'); }else if( 5 < a ...
- Dart Learn Notes 03
操作符 dart 有一套自己定义的操作符: 这里我就不再写了,直接copy一份官网的. 如果有过编程基础,上边展示的操作符应该都不陌生. 算术运算符 加: + 减: - 乘: * 除: / 取余: % ...
- Dart Learn Notes 01
关于Dart的几点重要说明 在Dart中所有变量都是一个对象,所有对象都是一个类的实例.每个数字,方法,甚至是Null都是对象.所有的对吸纳更都是集成自Object这个类.(这个说法其实是很像Java ...
- ORACLE STUDY NOTES 02
[JSU]LJDragon's Oracle course notes In the first semester, junior year I.用户和权限 1.用户操作 --创建新用户 CREATE ...
- Linux Academy Learn Notes
Linux Essentials Certification Globbing ls ?.txt --- ? stands for one character while * means one or ...
- Java 8 Learn Notes
Main reference: [1] http://winterbe.com/posts/2014/03/16/java-8-tutorial/ [2] https://plus.google.co ...
- Bash Scripting Learn Notes
References: [1] http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ 1. Executing programs from a scri ...
- Java 8 Learn Notes - Streams
Main reference [1] http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples 1. How Stream ...
- R Language Learn Notes
One #install package install.packages("ggplot2") #load library library(ggplot2) #update.pa ...
随机推荐
- Java集合框架个人学习笔记
从网上粘贴的结构图 Collection ├List │├LinkedList │├ArrayList │└Vector(了解,已过时) │ └Stack └Set Map ├Hashtable ...
- Spring MVC(3)Spring MVC 高级应用
一.Spring MVC 的数据转换和格式化 前面的应用,都只是用HandlerAdapter去执行处理器. 处理器和控制器不是一个概念,处理器是在控制器功能的基础上加上了一层包装,有了这层包装,在H ...
- .Net Core WebApi(三)在Linux服务器上部署
鸽了好久,终于有个时间继续写了,继上一篇之后,又写(水)了一篇,有什么不足之处请大家指出,多谢各位了. 下面有两个需要用到的软件,putty和pscp,我已经上传到博客园了,下载请点击这里. 一.准备 ...
- 原生js实现上拉加载
原生js实现上拉加载其实超级简单,把原理整明白了你也会,再也不用去引一个mescroll啦~ 好了,废话不多说,开始进入正题:上拉加载是怎么去做的,原理就是监听滚动条滑到页面底部,然后就去做一次请求数 ...
- Netty 入门,这一篇文章就够了
Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等,针对高性能RPC,一般都是基于Net ...
- 详解PHP中的三大经典模式
单例模式 单例模式的含义: 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 单例模式 ...
- 关于之前玩emacs记的些笔记
移动 C-v 向前翻页 M-v 向后翻页 C-l 当前行居中显示 继续按会依次到上,下,中 C-x C-c 退出 C-g 退出一个正在运行的命令,还可以取消数字参数和只输入到一半的命令 ...
- js动态显示当前时间+数字大小转换+小于9前面补0
<script type="text/javascript"> function getTime(){ var myDate = new Date(); // 年份 d ...
- [LLL邀请赛]参观路线(图论+dfs)
emmmm....学校的oj被查水表了,扒不到原题面,所以.... 但是我还是扒到了题面... 题目大意:给定一个完全图,删掉其中一些边,然后求其字典序最小的遍历顺序 有点像去年day2T1啊.... ...
- Xshell6配置ssh免密码登录虚拟机
首先先说明一下有密码的,涉及到root登陆权限的问题: 1.用超级管理员身份登录,修改 vi /etc/ssh/sshd_config, 找到 把其中的permitRootLogin 修改成: # ...