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的更多相关文章

  1. Dart Learn Notes 04

    流程控制语句 流程控制语句的作用就是控制代码的执行流程. if and else var a = 10; if(a > 10){ print('ok'); }else if( 5 < a ...

  2. Dart Learn Notes 03

    操作符 dart 有一套自己定义的操作符: 这里我就不再写了,直接copy一份官网的. 如果有过编程基础,上边展示的操作符应该都不陌生. 算术运算符 加: + 减: - 乘: * 除: / 取余: % ...

  3. Dart Learn Notes 01

    关于Dart的几点重要说明 在Dart中所有变量都是一个对象,所有对象都是一个类的实例.每个数字,方法,甚至是Null都是对象.所有的对吸纳更都是集成自Object这个类.(这个说法其实是很像Java ...

  4. ORACLE STUDY NOTES 02

    [JSU]LJDragon's Oracle course notes In the first semester, junior year I.用户和权限 1.用户操作 --创建新用户 CREATE ...

  5. Linux Academy Learn Notes

    Linux Essentials Certification Globbing ls ?.txt --- ? stands for one character while * means one or ...

  6. Java 8 Learn Notes

    Main reference: [1] http://winterbe.com/posts/2014/03/16/java-8-tutorial/ [2] https://plus.google.co ...

  7. Bash Scripting Learn Notes

    References: [1] http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ 1. Executing programs from a scri ...

  8. Java 8 Learn Notes - Streams

    Main reference [1] http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples 1. How Stream ...

  9. R Language Learn Notes

    One #install package install.packages("ggplot2") #load library library(ggplot2) #update.pa ...

随机推荐

  1. The usage of Markdown---表格

    更新时间:2019.09.14   谈到怎么在Markdown中插入表格,其实只要熟知以下几点就可以了: 使用管道符|进行内容的分割 使用冒号:和连号符-表示表格内容的对齐情况,连号符-在中间,冒号: ...

  2. 了解这一行的,腰包都鼓鼓的了,程序辅导,CS作业

    我们都知道计算机这类理科专业,可能你打开电脑聊几分钟微信,可能你就已经错过了成为程序员大佬的机会.就像数学专业的同学弯腰捡了一支笔,然后发现黑板被写满从此再也没有学懂数学.所以课后的作业自然也就没法顺 ...

  3. Linux之Centos7开机之后连不上网

    问题:ns33mtu 1500 qdisc noop state DOWN group default qlen 1000 解决方法: root@topcheer ~]# systemctl stop ...

  4. .NET webAPI中集成swagger

    最近做的项目使用winform三层+webapi,对于webAPI路由文档管理一直觉得单独做一些管理比较麻烦,并且测试的时候项目内的代码测试运行起来也比较麻烦,所以在网上开始检索相关办法,发现热度比较 ...

  5. Windows许可证即将过期怎么办?

    最近在使用电脑的时候,一开机就会弹窗出现:Windows 许可证即将过期.我勒个去,windows还会过期啊. 我搜遍全网,发现了一个很棒的 Windows10 永久激活的工具,而且没有广告什么乱七八 ...

  6. 一篇文章让你彻底理解java中抽象类和接口

    目录 1.我所理解的抽象类 2.我所理解的接口 3.抽象类和接口本质区别 相信大家都有这种感觉:抽象类与接口这两者有太多相似的地方,又有太多不同的地方.往往这二者可以让初学者摸不着头脑,无论是在实际编 ...

  7. Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)

    1.-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行). 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数 ...

  8. python中小整数对象池及intern机制

    小整数对象池: Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁 Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收,所有位于这个范围 ...

  9. CSPS模拟 95

    T_T flag彻底倒了 虽然打一开始就没觉得能实现过 可是我好桑心T_T skyh那个没素质的还一直bb T_T

  10. js调用局部打印功能并还原

    function printme() { //printMain为要打印的dom元素 window.document.body.innerHTML = document.getElementById( ...