Dart 开发闲话Flutter和Dart程序员

闲话Dart精髓语法3--函数篇

2018-04-09  本文已影响92人  西出玉门东望长安

闲话Dart精髓语法2--集合篇 - 简书

Dart Logo

好了, 第三波我们来瞜一眼Dart里面的函数和操作符. 就是Functions和Operators. 这部分其实所有现代语言在语法上都很相像, 这篇我们依然以kotlin为比较, 过一遍注意事项.

好了, 分隔线后我们进入正题. 


1. Runes:

这里带一笔上期的一个漏网之鱼. runes, 其实算是Dart对包含表情(emoji)的一系列特殊字符的单独定义,官方说法是for expressing Unicode characters in a string. 主要是它算是string的一个变种. string本身定义是UTF-16, 而runes是UTF-32.

举例: The laughing emoji (😆) is \u{1f600}.

Dart提供一系列的strings和runes的转换. 

转换runes

这个对于前端语言还是很有用的. 毕竟在我们用Flutter构建app的时候, 经常还是需要用到特殊字符.

2. Functions:

    a. Dart是OO型的语言, 因此Dart也和Kotlin这样的现代语言一样, Function本身是可以作为类型assign给变量或是用于传递的.

    b. Dart的Functions是可以省略类型的. 当然Dart本身不建议我们这样做. 像下面的两个对于Functions写法实际上是一样的.

声明return类型 未声明return类型

    c. 简写格式, 这个Flutter里在main函数里runApp啊, 或是createState啊, 都是经常性会用到的.  =>表达式就是{ return expr; }的简写. 这里说下kotlin的表达, kotlin是用=来实现. 也是非常常用的写法.

函数简写

    d. 一个function可以有两种类型的参数, 一种是required, 另一种是optional. required要放在前面, optional要放在required之后. 像下列的实例中, [String device]就是optional参数.

参数的两种类型

    e. Default parameter values. Dart的function是可以预先设置default值的. 简单的使用=来进行预先赋值即可.

Default parameter values

    f. The main() function. 主函数. 这里要多说一下, 因为主函数在Flutter里也是非常非常重要的. 在Dart里, main()就是我们的入口函数. 是每个app的top-level. 当然这里的main函数和java的main函数一样, 是可以接收arguments, 以List<String>的形式. 

    g. 我们可以把一个函数直接传给另一个函数. 这个在我们对于集合类的变化是经常经常用到的. 这也是流式写法的核心之一. 在java8以后, 以及kotlin上都是得到了很完美的实现. Dart这里当然也是我们的重中之重. 

    h. Anonymous functions. 这个也要特别说明一下, 因为在Flutter里我们也经常用到. 像setState(), onTapDown(), 如果我们并不想要把一个函数声明出来, 就可以用这种匿名表达的形式. 

Anonymous functions code block写法 Anonymous functions举例

    i. Lexical scope. 简单来说, 在Dart里, 对于nestedFunction的情况, 内层函数是可以调用外层函数的变量的. 这点和kotlin一样. 

    j. Return values. 对于一个函数来说, 如果各位亲没有明确声明他的return的话, return值就是null. 像foo() {} 这个函数的返回值就是null.

    k. Operators. 很多基本的操作符我这里就不一一阐述了. 因为和java没有什么大不同, 大家可以直接到官方教程里面过一遍即可. 这里突出标注一下这几个: Type test operators, if null, assignment中的??=和cascade.

    k-1: Type test operators. 像java的instanceof和kotlin的is. Dart的type检查操作如下表. 

Type test operators

    k-2: if null. 如果一个表达式为null, 之后应该怎样. 我们用??来定义.

if null

    k-3: assignment中的??=. 这个很有意思. 指的是, 只有一个变量一开始是null的时候, 才会被赋值. 这个可以让我们大大简写我们的初始化的逻辑或是做instance的逻辑.

??=

    k-4: cascade. 这个用起来更爽的东东要更加深深的mark下. cascade的翻译是串联. 为什么好用呢? 就是他可以实现我们一系列的操作. 这个和对集合的变换不同, 是对于一个object本身不停地一序列操作的写法. 像下面两种写法是一样的:

cascade写法 非cascade写法

cascade写法写习惯后, 爽到飞起有没有~

好了, 今天就到这里了, 第三波因为闲话的是函数, 所以内容比较多. 希望大家看完没有犯困. LOL 

希望大家学完语法可以去官方的Dart pad或是自己的Flutter上多练习一下, 毕竟实践是检验真理的唯一标准.

下一篇让我们一起来过一下逻辑操作和异常.

欧了, 谢谢观赏, 大家加油!

闲话Dart精髓语法4--逻辑操作篇 - 简书

上一篇下一篇

猜你喜欢

热点阅读