初探 Dart 语法 01

Posted 熊喵先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初探 Dart 语法 01相关的知识,希望对你有一定的参考价值。

欢迎来到 Dart 编程的世界,最开始将通过初探 Dart 的基本语法;让你对 Dart 整个语法体系轮廓、Dart 的编程有个大概了解,然后再深入到具体每个语法点细节和使用场景。由于文章篇幅的问题,初探 Dart 语法主要分为上下两篇来介绍。

1. Hello Dart

这是第一个 Hello Dart 程序,很多程序入口都是从 main 函数开始,所以 Dart 也不例外,一起来看下百变的 main 函数。

//main 标准写法
void main() 
  print('Hello World!');//注意:Dart 和 Java 一样表达式以分号结尾,写习惯 Kotlin 的小伙伴需要注意了,这可能是你从 Kotlin 转 Dart 最大不适之一。


//Dart 中所有函数的类型都是可以省略的,省略的时候返回值类型为 dynamic
main() 
  print('Hello World!');  


//如果函数内部只有一个表达式,可以省略大括号,使用"=>"箭头函数;
//而对于 Kotlin 则是如果只有一个表达式,可以省略大括号,使用"="连接,类似 fun main(args: Array<String>) = println('Hello World!')
void main() => print('Hello World!');

//最简写形式
main() => print('Hello World!');

2. 数据类型

在 Dart 中的一切皆是对象,包括数字、布尔值、函数等,它们和 Java 一样都继承于 Object,所以它们的默认值也就是 null。在 Dart 主要有:布尔类型 bool、数字类型 num(数字类型又分为 int、double,并且两者父类都是 num)、字符串类型 String、集合类型(List、Set、Map)、Runes 类和 Symbols 类型(后两个用的并不太多)。

2.1 布尔类型(bool)

在 Dart 中和 C 语言一样,都是使用 bool 来声明一个布尔类型变量或常量,而在 Kotlin 则是使用 Boolean 来声明,但是一致的是,它对应的值只有两个 true 和 false。

main() 
    bool isClosed = true;//注意,Dart 还是和 Java 类似的 [类型][变量名]方式声明,这个和 Kotlin 的 [变量名]:[类型]不一样.
    bool isOpened = false;

2.2 数字类型(num、int、double)

在 Dart 中 num、int、double 都是类,然后 int、double 都继承 num 抽象类,这点和 Kotlin 很类似,在 Kotlin 中 Number、Int、Double 都是类,然后 Int、Double 都继承于 Number。注意,但是在 Dart 中没有 float、short、long 类型

main() 
    double pi = 3.141592653;
    int width = 200;
    int height = 300;
    print(width / height);//注意:这里和 Kotlin、Java 都不一样,两个 int 类型相除是 double 类型小数,而不是整除后的整数。
    print(width ~/ height);//注意:这才是 Dart 整除正确姿势

此外和 Java、Kotlin 一样,Dart 也拥有一些数字常用的函数:

main() 
    print(3.141592653.toStringAsFixed(3)); //3.142 保留有效数字
    print(6.6.floor());//6 向下取整
    print((-6.6).ceil()); //-6 向上取整
    print(9.9.ceil()); //10 向上取整
    print(666.6.round()); //667 四舍五入
    print((-666.6).abs()); // 666.6 取绝对值
    print(666.6.toInt()); //666 转化成 int,这中 toInt、toDouble 和 Kotlin 类似
    print(999.isEven); //false 是否是偶数
    print(999.isOdd); //true 是否是奇数
    print(666.6.toString()); //666.6 转化成字符串

2.3 字符串类型(String)

在 Dart 中支持单引号、双引号、三引号以及 $ 字符串模板用法和 Kotlin 是一模一样的。

main() 
    String name = 'Hello Dart!';//单引号
    String title = "'Hello Dart!'";//双引号
    String description = """
          Hello Dart! Hello Dart!
          Hello Dart!
          Hello Dart! Hello Dart!
    """;//三引号
    num value = 2;
    String result = "The result is $value";//单值引用
    num width = 200;
    num height = 300;
    String square = "The square is $width * height";//表达式的值引用

和 Kotlin 一样,Dart 中也有很多字符串操作的方法,比如字符串拆分、子串等。

main() 
  String url = "https://mrale.ph/dartvm/";

  print(url.split("://")[0]); //字符串分割 split 方法,类似 Java 和 Kotlin

  print(url.substring(3, 9)); //字符串截取 substring 方法,类似 Java 和 Kotlin

  print(url.codeUnitAt(0)); //取当前索引位置字符的 UTF-16 码

  print(url.startsWith("https")); //当前字符串是否以指定字符开头,类似 Java 和 Kotlin

  print(url.endsWith("/")); //当前字符串是否以指定字符结尾,类似 Java 和 Kotlin

  print(url.toUpperCase()); //大写,类似 Java 和 Kotlin

  print(url.toLowerCase()); //小写,类似 Java 和 Kotlin

  print(url.indexOf("ph")); //获取指定字符的索引位置,类似 Java 和 Kotlin

  print(url.contains("http")); //字符串是否包含指定字符,类似 Java 和 Kotlin

  print(url.trim()); //去除字符串的首尾空格,类似 Java 和 Kotlin

  print(url.length); //获取字符串长度

  print(url.replaceFirst("t", "A")); //替换第一次出现 t 字符位置的字符

  print(url.replaceAll("m", "M")); //全部替换,类似 Java 和 Kotlin

2.4 类型检查(is 和 is!)和强制类型转换(as)

和 Kotlin 一样,Dart 也是通过 is 关键字来对类型进行检查以及使用 as 关键字对类型进行强制转换,如果判断不是某个类型 Dart 中使用 is!,而在 Kotlin 中正好相反则用 !is 表示。

main() 
    int number = 100;
    double distance = 200.5;
    num age = 18;
    print(number is num);//true
    print(distance is! int);//true
    print(age as int);//18

2.5 Runes 和 Symbols 类型

在 Dart 中的 Runes 和 Symbols 类型使用并不多,这里做个简单的介绍。

Runes 类型是 UTF-32 字节单元定义的 Unicode 字符串,Unicode 可以使用数字表示字母、数字和符号,然而在 Dart 中,String 是一系列的 UTF-16 的字节单元,所以想要表示 32 位的 Unicode 的值,就需要用到 Runes 类型。我们一般使用 \\uxxxx 这种形式来表示一个 Unicode 码,xxxx 表示 4 个十六进制值。当十六进制数据多余或者少于 4 位时,将十六进制数放入到花括号中,例如,微笑表情(

以上是关于初探 Dart 语法 01的主要内容,如果未能解决你的问题,请参考以下文章

初探 Dart 语法 01

初探 Dart 语法 02

初探 Dart 语法 02

初探 Dart 语法 02

dart 函数 - 箭头语法冲突

同时搞定Android和iOS的Dart语言:Dart初探