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

作者: 西出玉门东望长安 | 来源:发表于2018-04-09 10:19 被阅读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--逻辑操作篇 - 简书

    相关文章

      网友评论

      本文标题:闲话Dart精髓语法3--函数篇

      本文链接:https://www.haomeiwen.com/subject/wrjuhftx.html